[
  {
    "path": ".gitignore",
    "content": "/node_modules\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 2, June 1991\n\n Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>\n 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The licenses for most software are designed to take away your\nfreedom to share and change it.  By contrast, the GNU General Public\nLicense is intended to guarantee your freedom to share and change free\nsoftware--to make sure the software is free for all its users.  This\nGeneral Public License applies to most of the Free Software\nFoundation's software and to any other program whose authors commit to\nusing it.  (Some other Free Software Foundation software is covered by\nthe GNU Lesser General Public License instead.)  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthis service if you wish), that you receive source code or can get it\nif you want it, that you can change the software or use pieces of it\nin new free programs; and that you know you can do these things.\n\n  To protect your rights, we need to make restrictions that forbid\nanyone to deny you these rights or to ask you to surrender the rights.\nThese restrictions translate to certain responsibilities for you if you\ndistribute copies of the software, or if you modify it.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must give the recipients all the rights that\nyou have.  You must make sure that they, too, receive or can get the\nsource code.  And you must show them these terms so they know their\nrights.\n\n  We protect your rights with two steps: (1) copyright the software, and\n(2) offer you this license which gives you legal permission to copy,\ndistribute and/or modify the software.\n\n  Also, for each author's protection and ours, we want to make certain\nthat everyone understands that there is no warranty for this free\nsoftware.  If the software is modified by someone else and passed on, we\nwant its recipients to know that what they have is not the original, so\nthat any problems introduced by others will not reflect on the original\nauthors' reputations.\n\n  Finally, any free program is threatened constantly by software\npatents.  We wish to avoid the danger that redistributors of a free\nprogram will individually obtain patent licenses, in effect making the\nprogram proprietary.  To prevent this, we have made it clear that any\npatent must be licensed for everyone's free use or not licensed at all.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                    GNU GENERAL PUBLIC LICENSE\n   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n\n  0. This License applies to any program or other work which contains\na notice placed by the copyright holder saying it may be distributed\nunder the terms of this General Public License.  The \"Program\", below,\nrefers to any such program or work, and a \"work based on the Program\"\nmeans either the Program or any derivative work under copyright law:\nthat is to say, a work containing the Program or a portion of it,\neither verbatim or with modifications and/or translated into another\nlanguage.  (Hereinafter, translation is included without limitation in\nthe term \"modification\".)  Each licensee is addressed as \"you\".\n\nActivities other than copying, distribution and modification are not\ncovered by this License; they are outside its scope.  The act of\nrunning the Program is not restricted, and the output from the Program\nis covered only if its contents constitute a work based on the\nProgram (independent of having been made by running the Program).\nWhether that is true depends on what the Program does.\n\n  1. You may copy and distribute verbatim copies of the Program's\nsource code as you receive it, in any medium, provided that you\nconspicuously and appropriately publish on each copy an appropriate\ncopyright notice and disclaimer of warranty; keep intact all the\nnotices that refer to this License and to the absence of any warranty;\nand give any other recipients of the Program a copy of this License\nalong with the Program.\n\nYou may charge a fee for the physical act of transferring a copy, and\nyou may at your option offer warranty protection in exchange for a fee.\n\n  2. You may modify your copy or copies of the Program or any portion\nof it, thus forming a work based on the Program, and copy and\ndistribute such modifications or work under the terms of Section 1\nabove, provided that you also meet all of these conditions:\n\n    a) You must cause the modified files to carry prominent notices\n    stating that you changed the files and the date of any change.\n\n    b) You must cause any work that you distribute or publish, that in\n    whole or in part contains or is derived from the Program or any\n    part thereof, to be licensed as a whole at no charge to all third\n    parties under the terms of this License.\n\n    c) If the modified program normally reads commands interactively\n    when run, you must cause it, when started running for such\n    interactive use in the most ordinary way, to print or display an\n    announcement including an appropriate copyright notice and a\n    notice that there is no warranty (or else, saying that you provide\n    a warranty) and that users may redistribute the program under\n    these conditions, and telling the user how to view a copy of this\n    License.  (Exception: if the Program itself is interactive but\n    does not normally print such an announcement, your work based on\n    the Program is not required to print an announcement.)\n\nThese requirements apply to the modified work as a whole.  If\nidentifiable sections of that work are not derived from the Program,\nand can be reasonably considered independent and separate works in\nthemselves, then this License, and its terms, do not apply to those\nsections when you distribute them as separate works.  But when you\ndistribute the same sections as part of a whole which is a work based\non the Program, the distribution of the whole must be on the terms of\nthis License, whose permissions for other licensees extend to the\nentire whole, and thus to each and every part regardless of who wrote it.\n\nThus, it is not the intent of this section to claim rights or contest\nyour rights to work written entirely by you; rather, the intent is to\nexercise the right to control the distribution of derivative or\ncollective works based on the Program.\n\nIn addition, mere aggregation of another work not based on the Program\nwith the Program (or with a work based on the Program) on a volume of\na storage or distribution medium does not bring the other work under\nthe scope of this License.\n\n  3. You may copy and distribute the Program (or a work based on it,\nunder Section 2) in object code or executable form under the terms of\nSections 1 and 2 above provided that you also do one of the following:\n\n    a) Accompany it with the complete corresponding machine-readable\n    source code, which must be distributed under the terms of Sections\n    1 and 2 above on a medium customarily used for software interchange; or,\n\n    b) Accompany it with a written offer, valid for at least three\n    years, to give any third party, for a charge no more than your\n    cost of physically performing source distribution, a complete\n    machine-readable copy of the corresponding source code, to be\n    distributed under the terms of Sections 1 and 2 above on a medium\n    customarily used for software interchange; or,\n\n    c) Accompany it with the information you received as to the offer\n    to distribute corresponding source code.  (This alternative is\n    allowed only for noncommercial distribution and only if you\n    received the program in object code or executable form with such\n    an offer, in accord with Subsection b above.)\n\nThe source code for a work means the preferred form of the work for\nmaking modifications to it.  For an executable work, complete source\ncode means all the source code for all modules it contains, plus any\nassociated interface definition files, plus the scripts used to\ncontrol compilation and installation of the executable.  However, as a\nspecial exception, the source code distributed need not include\nanything that is normally distributed (in either source or binary\nform) with the major components (compiler, kernel, and so on) of the\noperating system on which the executable runs, unless that component\nitself accompanies the executable.\n\nIf distribution of executable or object code is made by offering\naccess to copy from a designated place, then offering equivalent\naccess to copy the source code from the same place counts as\ndistribution of the source code, even though third parties are not\ncompelled to copy the source along with the object code.\n\n  4. You may not copy, modify, sublicense, or distribute the Program\nexcept as expressly provided under this License.  Any attempt\notherwise to copy, modify, sublicense or distribute the Program is\nvoid, and will automatically terminate your rights under this License.\nHowever, parties who have received copies, or rights, from you under\nthis License will not have their licenses terminated so long as such\nparties remain in full compliance.\n\n  5. You are not required to accept this License, since you have not\nsigned it.  However, nothing else grants you permission to modify or\ndistribute the Program or its derivative works.  These actions are\nprohibited by law if you do not accept this License.  Therefore, by\nmodifying or distributing the Program (or any work based on the\nProgram), you indicate your acceptance of this License to do so, and\nall its terms and conditions for copying, distributing or modifying\nthe Program or works based on it.\n\n  6. Each time you redistribute the Program (or any work based on the\nProgram), the recipient automatically receives a license from the\noriginal licensor to copy, distribute or modify the Program subject to\nthese terms and conditions.  You may not impose any further\nrestrictions on the recipients' exercise of the rights granted herein.\nYou are not responsible for enforcing compliance by third parties to\nthis License.\n\n  7. If, as a consequence of a court judgment or allegation of patent\ninfringement or for any other reason (not limited to patent issues),\nconditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot\ndistribute so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you\nmay not distribute the Program at all.  For example, if a patent\nlicense would not permit royalty-free redistribution of the Program by\nall those who receive copies directly or indirectly through you, then\nthe only way you could satisfy both it and this License would be to\nrefrain entirely from distribution of the Program.\n\nIf any portion of this section is held invalid or unenforceable under\nany particular circumstance, the balance of the section is intended to\napply and the section as a whole is intended to apply in other\ncircumstances.\n\nIt is not the purpose of this section to induce you to infringe any\npatents or other property right claims or to contest validity of any\nsuch claims; this section has the sole purpose of protecting the\nintegrity of the free software distribution system, which is\nimplemented by public license practices.  Many people have made\ngenerous contributions to the wide range of software distributed\nthrough that system in reliance on consistent application of that\nsystem; it is up to the author/donor to decide if he or she is willing\nto distribute software through any other system and a licensee cannot\nimpose that choice.\n\nThis section is intended to make thoroughly clear what is believed to\nbe a consequence of the rest of this License.\n\n  8. If the distribution and/or use of the Program is restricted in\ncertain countries either by patents or by copyrighted interfaces, the\noriginal copyright holder who places the Program under this License\nmay add an explicit geographical distribution limitation excluding\nthose countries, so that distribution is permitted only in or among\ncountries not thus excluded.  In such case, this License incorporates\nthe limitation as if written in the body of this License.\n\n  9. The Free Software Foundation may publish revised and/or new versions\nof the General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\nEach version is given a distinguishing version number.  If the Program\nspecifies a version number of this License which applies to it and \"any\nlater version\", you have the option of following the terms and conditions\neither of that version or of any later version published by the Free\nSoftware Foundation.  If the Program does not specify a version number of\nthis License, you may choose any version ever published by the Free Software\nFoundation.\n\n  10. If you wish to incorporate parts of the Program into other free\nprograms whose distribution conditions are different, write to the author\nto ask for permission.  For software which is copyrighted by the Free\nSoftware Foundation, write to the Free Software Foundation; we sometimes\nmake exceptions for this.  Our decision will be guided by the two goals\nof preserving the free status of all derivatives of our free software and\nof promoting the sharing and reuse of software generally.\n\n                            NO WARRANTY\n\n  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\nFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN\nOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\nPROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\nOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE\nPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\nREPAIR OR CORRECTION.\n\n  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\nREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\nINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\nOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\nTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\nYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\nPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\nPOSSIBILITY OF SUCH DAMAGES.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nconvey the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    {description}\n    Copyright (C) {year}  {fullname}\n\n    This program is free software; you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation; either version 2 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License along\n    with this program; if not, write to the Free Software Foundation, Inc.,\n    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n\nAlso add information on how to contact you by electronic and paper mail.\n\nIf the program is interactive, make it output a short notice like this\nwhen it starts in an interactive mode:\n\n    Gnomovision version 69, Copyright (C) year name of author\n    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, the commands you use may\nbe called something other than `show w' and `show c'; they could even be\nmouse-clicks or menu items--whatever suits your program.\n\nYou should also get your employer (if you work as a programmer) or your\nschool, if any, to sign a \"copyright disclaimer\" for the program, if\nnecessary.  Here is a sample; alter the names:\n\n  Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n  `Gnomovision' (which makes passes at compilers) written by James Hacker.\n\n  {signature of Ty Coon}, 1 April 1989\n  Ty Coon, President of Vice\n\nThis General Public License does not permit incorporating your program into\nproprietary programs.  If your program is a subroutine library, you may\nconsider it more useful to permit linking proprietary applications with the\nlibrary.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.\n"
  },
  {
    "path": "README.md",
    "content": "<h1>3D FlipBook jQuery plugin</h1>\n\n<p>\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> is jQuery plugin that allows to browse images, PDFs or HTMLs as a flipping book.\n  It can be used for demonstration magazines, books, cards, brochures, booklets and much more in natural way.\n  It helps to attract user attention and make more impression on him.\n</p>\n\n<div align=\"center\">\n  <a href=\"https://www.youtube.com/watch?v=pN2TqSLLMYs\" target=\"_blank\"><img src=\"https://img.youtube.com/vi/pN2TqSLLMYs/0.jpg\" alt=\"3D FlipBook Demonstration\"></a>\n</div>\n\n<p>\n  Start from <a href=\"http://3dflipbook.net/\">the live preview</a>.\n</p>\n\n<h2>Main features</h2>\n\n<h3>Version 1.7</h3>\n<ul>\n  <li>RTL mode</li>\n  <li>Default template option in General Settings</li>\n</ul>\n\n<h3>Version 1.6</h3>\n<ul>\n  <li>CSS Layers</li>\n  <li>Languages</li>\n</ul>\n\n<h3>Version 1.5</h3>\n<ul>\n  <li>PDF search</li>\n</ul>\n\n<h3>Version 1.4</h3>\n<ul>\n  <li>Thumbnails</li>\n  <li>Flip sounds</li>\n  <li>Deep linking</li>\n</ul>\n\n<h3>Version 1.3</h3>\n<ul>\n  <li>PDF bookmarks</li>\n  <li>Printing</li>\n  <li>Single page mode</li>\n  <li>Control customization</li>\n  <li>Fit view command</li>\n  <li>Controllable script for templates</li>\n</ul>\n\n<h3>Version 1.2</h3>\n<ul>\n  <li>PDF links</li>\n  <li>Mobile-Friendly</li>\n  <li>Flipping sheet animation style</li>\n  <li>Loading animation and progress</li>\n</ul>\n\n<h3>Version 1.1</h3>\n<ul>\n  <li>Smart pan mode</li>\n  <li>Skins</li>\n  <li>Flipping covers together with other pages</li>\n</ul>\n\n<h3>Version 1.0</h3>\n<ul>\n  <li>Realistic view</li>\n  <li>Natural behaviour</li>\n  <li>Flixible page corners</li>\n  <li>User behaviour prediction system</li>\n  <li>HTML, PDF, images as sources</li>\n  <li>User friendly</li>\n  <li>High perfomance</li>\n  <li>Lightbox effect</li>\n  <li>Interactive</li>\n  <li>Responsive</li>\n  <li>Easy to use</li>\n  <li>Well documented</li>\n</ul>\n\n\n<h2>Details</h2>\n\n<h3>Realistic view</h3>\n<p>\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> allows to create volume book, with page thickness. It is the most exact computer model of a book or a magazine from real world.\n</p>\n<p>\n  The plugin is able to simulate book opening process.\n  Modeled book repeat the same actions as its real prototype:\n    while the cover is opening or closing the internal pages are deforming as it happens in life.\n  The deformation can be customized. You can reduce it or switch off.\n</p>\n\n<h3>Natural behaviour</h3>\n<p>\n  The plugin is called <a href=\"http://3dflipbook.net/\">3D FlipBook</a>, for sure, it can perform page flipping animation.\n</p>\n<p>\n  But this is very common ability so all typical plugins are able to do it.\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> allows to customize the shape of flipping pages but it is still not enough to be unique.\n</p>\n<p>\n  The main feature is using specially designed physics engine that perform all interaction with a user.\n  This engine is based on physics laws so all user actions with the model seems realistic.\n  The plugin allow you drag and throw pages together. The engine solve the collisions and show natural scene.\n</p>\n<p>\n  Physics engine has a lot of properties: gravity, mass, flexibility, page flipping velocities and much more.\n  But it is little necessary to know for using the plugin because all those properties have default presets.\n</p>\n\n<h3>Flexible page corners</h3>\n<p>\n  The main goal of <a href=\"http://3dflipbook.net/\">3D FlipBook</a> is maximum user friendly. Main key of being friendly is behave in habitual for user way.\n  How are we used to turn pages in books? - of course it is dragging a page while holding a corner!\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> is one known 3D plugin that has such feature.\n</p>\n\n<h3>Skins support</h3>\n<p>\n  Supporting skins makes customization very easy. It is necessary just to choose appropriate skin and that is all.\n  Now there are available skins for light and dark themes - the most universal ones.\n</p>\n\n<h3>Smart pan</h3>\n<p>\n  3d FlipBook has smart algorithm to show the book in maximum comfortable and appropriate for user way.\n  It automatically chooses book scale and alignment on the screen, disallows user to drag the book out of view port.\n  The pan makes only smooth moves that seems very friendly for user. All these abilities help the book to look richer.\n</p>\n\n<h3>HTML, PDF, images as sources</h3>\n<p>\n  The plugin can use PDF, images and HTMLs as texture for pages. Supporting HTML format as texture is a new technology no one of other plugins support it.\n  HTML allow easily create interactive books, handle user events, manage plugin behaviour. Using HTML textures is next important step in development web animation.\n</p>\n\n<h3>User behaviour prediction system</h3>\n<p>\n  The plugin is not just pretty but it is smart. It has user behaviour prediction system.\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> tracks user actions and try to predict next necessary pages.\n  In the background it loads predicted pages and renders them. When the user go to next page it is ready to be shown.\n</p>\n<p>\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> uses priorities for page loading. First of all it loads visible for user pages then predicted ones.\n  It is possible to customize amount of pages to predict and quantity of used by user pages for predicting his behaviour.\n</p>\n\n<h3>User friendly</h3>\n<p>\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> is designed to be maximum user friendly. It has familiar to user page flipping control.\n  Flexible corners help user to understand that he can turn the page by means drag and drop technology.\n  Physics engine computes page transforms in similar to real world way.\n  Modeling book is close to natural book - it has the same volume and shape.\n  It is possible to use hard flat covers to create hard bending and use flexible pages, make whole book flexible or flat.\n</p>\n<p>\n  The plugin has specially designed animation of page loading process.\n  It is created automatically for different page colors.\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> computes animation colors as inversion of page color.\n  It looks nice for all colors.\n</p>\n<p>\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> supports fullscreen mode. It is comfortable to watch magazines in this mode, they look like alive.\n</p>\n<p>\n  Sometimes it is useful to change lightning. <a href=\"http://3dflipbook.net/\">3D FlipBook</a> gives to its users such ability.\n  User can change lightning to do it appropriate for him. It is important option for reading long texts.\n</p>\n\n<h3>High performance</h3>\n<p>\n  The plugin performance does not depend on number of pages because it does not manage single pages.\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> works with blocks of pages, it allows to keep in memory just visible for user pages.\n  So if the book is closed then there are 2 or 3 blocks.\n  The first is left cover, the second is right cover and third is internal pages.\n  If the book is opened there can be two blocks for left and right internal pages.\n  There can be more blocks just when the flipping animation is performing.\n  The plugin has no problem with more than 50 simultaneously flipping blocks.\n  When the turn is finished the turned block merges with neighbour block.\n</p>\n<p>\n  For fast rendering 3D graphics <a href=\"http://3dflipbook.net/\">3D FlipBook</a> uses WebGL. WebGL is a API for creating interactive 3D graphics without using plugins.\n</p>\n\n<h3>Interactive</h3>\n<p>\n  Supporting HTML opens wide abilities for creating interactive books.\n  It allows to use CSS3 and JavaScript, create navigation, use hover effects and much more.\n</p>\n\n\n<h3>Responsive</h3>\n<p>\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> is designed to occupy whole container where you place it. So if the container size changes the plagin recompute its dimensions.\n  So keep the container responsive and plugin will be responsive too.\n</p>\n\n<h3>Easy to use and customize</h3>\n<p>\n  <a href=\"http://3dflipbook.net/\">3D FlipBook</a> is well documented, has a lot of examples and getting started manual. It is easy to start.\n  The plugin supports skins, so it is possible to create own skins or customize style or template files of existing.\n</p>\n<p>\n  The plugin has a lot of customization options (<a href=\"http://3dflipbook.net/documentation#properties\">see the documentation</a>).\n  If it is not enough you can edit the project. It is written in modern JavaScript (ES6) object oriented style. Very easy to understand how it works.\n</p>\n\n<h2>How to use</h2>\n\nSee <a href=\"https://github.com/iberezansky/flip-book-jquery-example\">the example</a>.\n\n<h2>Rebuilding</h2>\n\nClone a copy of the main git repo by running:\n```bash\ngit clone https://github.com/iberezansky/flip-book-jquery.git\n```\n\nEnter the flip-book-jquery-example directory and run the installation:\n```bash\ncd flip-book-jquery && npm install\n```\n\nTo build debug version:\n\n```bash\nnpm run build-debug\n```\n\nTo build production version:\n```bash\nnpm run build-production\n```\n"
  },
  {
    "path": "css/black-book-view.css",
    "content": ".flip-book {\n  position: relative;\n  height: 100%;\n}\n\n.flip-book .view {\n  text-align: center;\n  height: 100%;\n}\n\n.flip-book .view .fnav {\n}\n\n.flip-book .view .prev, .flip-book .view .next {\n  position: absolute;\n  top: 50%;\n  transform: translate(0, -50%);\n  z-index: 1;\n}\n\n.flip-book .view .prev {\n  left: 20px;\n}\n\n.flip-book .view .next {\n  right: 20px;\n}\n\n\n.flip-book .view .fnav a {\n  font-size: 72pt;\n  color: #666;\n}\n\n.flip-book .view .fnav a:hover {\n  cursor: pointer;\n  text-shadow: 0 0 7px #000;\n}\n\n.flip-book .view .fnav a:active {\n  font-size: 70pt;\n}\n\n.flip-book .view .fnav .hidden {\n  display: none;\n}\n\n.flip-book .view .fnav .active {\n  color: #555;\n}\n\n.flip-book .view .fnav .disabled {\n  color: #aaa;\n}\n\n.flip-book .view .fnav .disabled:hover {\n  cursor: not-allowed;\n  text-shadow: none;\n}\n\n.flip-book .view .loading-progress {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n.flip-book .view .loading-progress.hidden {\n  display: none;\n}\n\n.flip-book .loading-progress .progress {\n  background-color: #555;\n  background-image: none;\n  width: 50px;\n  height: 50px;\n  margin: 0 auto;\n  border-radius: 30px;\n  padding: 5px;\n  box-shadow: 0px 0px 3px #000;\n  margin-bottom: 10px;\n}\n\n.flip-book .loading-progress .progress::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/light-loader.gif');\n}\n\n.flip-book .page-loading {\n  width: 50px;\n  height: 50px;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  z-index: 1;\n}\n\n.flip-book .page-loading.hidden {\n  display: none;\n}\n\n.flip-book .page-loading::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/light-loader.gif');\n}\n\n.flip-book .loading-progress .caption {\n  background-color: #555;\n  border: 1px solid #333;\n  padding: 7px 10px;\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n  font-size: 10pt;\n  border-radius: 5px;\n  font-style: italic;\n  color: #eee;\n}\n\n.flip-book .controls {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n}\n\n.flip-book .controls .fnavbar {\n  margin: 0 auto;\n  opacity: 0.3;\n  transition: opacity 2s ease-in-out 3s;\n}\n\n.flip-book .controls .fnavbar:hover {\n  opacity: 1;\n  transition: opacity 1s ease;\n}\n\n\n\n.ctrl {\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n}\n.ctrl ul {\n  margin: 0;\n  padding: 0;\n}\n.ctrl .fnavbar {\n  text-align: center;\n  background-image: linear-gradient(to bottom,#3c3c3c 0,#222 100%);\n  background-repeat: repeat-x;\n  padding: 3px;\n  overflow: visible;\n  background-color: #3c3c3c;\n}\n.ctrl .fnavbar a {\n  text-decoration: none;\n  font-size: 14px;\n}\n.ctrl .fnavbar .fnav {\n  font-size: 0;\n  display: inline-block;\n  text-align: left;\n}\n.ctrl .fnavbar .fnav li{\n  font-size: 12pt;\n  margin: 0;\n  width: auto;\n}\n.ctrl .fnavbar .fnav .fnav-item {\n  display: inline-block;\n}\n.ctrl .fnavbar .fnav .hidden {\n  display: none;\n}\n.ctrl .fnavbar .fnav .fnav-item>a {\n  padding: 10px;\n  display: inline-block;\n  color: #ccc;\n}\n.ctrl .fnavbar .fnav>.active>a {\n  color: #fff;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:hover {\n  color: #fff;\n  cursor: pointer;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:active {\n  text-shadow: 0 0 2px #fff;\n}\n.ctrl .fnavbar .fnav>.disabled>a {\n  color: #888;\n}\n.ctrl .fnavbar .fnav>.disabled>a:hover {\n  color: #888;\n  cursor: not-allowed;\n}\n.ctrl .fnavbar .fnav>.active {\n  background: #222;\n}\n\n.ctrl .fnavbar .fnav .dropdown, .ctrl .fnavbar .fnav .dropup {\n  position: relative;\n}\n.ctrl .fnavbar .fnav .dropdown .menu {\n  top: 100%;\n  box-shadow: 3px 0 3px #222;\n}\n.ctrl .fnavbar .fnav .dropdown .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 5px solid #ccc;\n}\n.ctrl .fnavbar .fnav .dropup .menu {\n  bottom: 100%;\n  box-shadow: 3px 0 3px #222;\n}\n.ctrl .fnavbar .fnav .dropup .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #ccc;\n}\n.ctrl .fnavbar .menu {\n  position: absolute;\n  border: 1px solid #444;\n  background-color: #222;\n  z-index: 10;\n  min-width: 160px;\n}\n.ctrl .fnavbar .menu li {\n  display: block;\n  padding: 5px 10px;\n}\n.ctrl .fnavbar .menu .divider {\n  height: 1px;\n  background-color: #444;\n  padding: 0;\n  margin: 5px 0;\n}\n.ctrl .fnavbar .menu .active {\n  background-color: #444;\n}\n.ctrl .fnavbar .menu .active:hover {\n  /*background-color: #444;*/\n}\n.ctrl .fnavbar .menu li:hover {\n  background-color: #333;\n  cursor: pointer;\n}\n.ctrl .fnavbar .menu li a {\n  color: #fff;\n}\n.ctrl .fnavbar .menu .disabled a {\n  color: #aaa;\n  cursor: not-allowed;\n}\n\n.ctrl .fnavbar .menu .icon {\n  display: inline-block;\n  width: 14px;\n  height: 14px;\n  text-align: center;\n}\n\n.ctrl .pages {\n  padding: 0 10px;\n  display: inline-block;\n  font-size: 0;\n}\n\n.ctrl .pages .number, .ctrl .pages .amount {\n  width: 50px;\n  height: 20px;\n  text-align: center;\n  display: inline-block;\n  font-size: 11pt;\n  border: 0;\n  color: #000;\n  background-color: #ccc;\n  font-weight: bold;\n  border-radius: 0;\n  margin: 0;\n  padding: 2px;\n}\n\n.ctrl .pages .number {\n  border-top-left-radius: 5px;\n  border-bottom-left-radius: 5px;\n  background-color: #ddd;\n}\n\n.ctrl .pages .amount {\n  border-top-right-radius: 5px;\n  border-bottom-right-radius: 5px;\n}\n\n/* floating window */\n\n.flip-book .float-wnd {\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  border-radius: 5px 5px 0 0;\n  background-color: #1a1a1a;\n  width: 300px;\n  z-index: 1;\n  box-shadow: 3px 0 3px #222;\n}\n\n.flip-book .float-wnd.hidden {\n  display: none;\n}\n\n.flip-book .float-wnd .header {\n  border-radius: 4px 4px 0 0;\n  background-color: #3c3c3c;\n  background-image: linear-gradient(to bottom,#3c3c3c 0,#222 100%);\n  background-repeat: repeat-x;\n  padding: 7px 10px;\n  border: 1px solid #444;\n  border-bottom: none;\n  color: #fff;\n  font-weight: bold;\n  cursor: move;\n}\n\n.flip-book .float-wnd .header .close {\n  top: 5px;\n  right: 8px;\n  font-size: 14px;\n  position: absolute;\n  color: #ccc;\n}\n\n.flip-book .float-wnd .header .close:hover {\n  color: #fff;\n}\n.flip-book .float-wnd .header .close:active {\n  font-size: 12px;\n  padding-top: 1px;\n  padding-right: 1px;\n}\n\n.flip-book .float-wnd .body {\n  border: 1px solid #444;\n  border-top: none;\n}\n\n/* toc */\n\n.ctrl .toc {\n  font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;\n}\n\n.ctrl .toc a {\n  text-decoration: none;\n}\n\n.ctrl .toc .hidden {\n  display: none;\n}\n\n.ctrl .toc .toc-menu {\n  padding: 5px 10px;\n}\n\n.ctrl .toc .toc-menu ul {\n  list-style: none;\n  padding: 0;\n}\n.ctrl .toc .toc-menu li {\n  display: inline-block;\n  padding-right: 5px;\n}\n.ctrl .toc .toc-menu a {\n  color: #ccc;\n  font-size: 14px;\n}\n.ctrl .toc .toc-menu a:hover {\n  color: #fff;\n}\n.ctrl .toc .toc-menu a:active {\n  text-shadow: 0 0 2px #fff;\n}\n.ctrl .toc .toc-menu .active a {\n  color: #fff;\n}\n\n\n.ctrl .toc .toc-view {\n  padding: 10px 0;\n  max-height: 80vh;\n  overflow-y: auto;\n  overflow-x: hidden;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar {\n  width: 7px;\n  height: 7px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-button {\n  width: 0;\n  height: 0;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb {\n  background: #4a4a4a;\n  border-radius: 2px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:hover {\n  background: #3a3a3a;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:active {\n  background: #5a5a5a;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-track {\n  background: #2a2a2a;\n  border-left: 2px solid #1a1a1a;\n  border-right: 2px solid #1a1a1a;\n}\n\n.ctrl .bookmarks .white-space, .ctrl .bookmarks .togle, .ctrl .bookmarks .togle i {\n  width: 18px;\n  height: 18px;\n}\n\n.ctrl .bookmarks .white-space {\n  display: inline-block;\n}\n\n.ctrl .bookmarks li {\n  width: 10000px;\n}\n\n.ctrl .bookmarks .item .area {\n  padding: 2px 0;\n}\n\n.ctrl .bookmarks .level-0 .area {\n  padding-left: 5px;\n}\n.ctrl .bookmarks .level-1 .area {\n  padding-left: 10px;\n}\n.ctrl .bookmarks .level-2 .area {\n  padding-left: 15px;\n}\n.ctrl .bookmarks .level-3 .area {\n  padding-left: 20px;\n}\n.ctrl .bookmarks .level-4 .area {\n  padding-left: 25px;\n}\n\n.ctrl .bookmarks .item .area:hover {\n  background-color: #444;\n}\n\n.ctrl .bookmarks .item .area:active {\n  background-color: #333;\n}\n\n.ctrl .bookmarks .item a {\n  color: #fff;\n  font-size: 14px;\n}\n\n.ctrl .bookmarks ul {\n  list-style: none;\n  padding: 0;\n}\n\n.ctrl .bookmarks .togle {\n  display: inline-block;\n  text-align: center;\n  position: relative;\n}\n\n.ctrl .bookmarks .togle::before {\n  content: ' ';\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  border-radius: 50%;\n  border: 0px solid #222;\n  transition: border 0.2s;\n}\n\n.ctrl .bookmarks .togle:active::before {\n  border: 12px solid #222;\n  transition: border 0.05s;\n}\n\n.ctrl .bookmarks .togle i {\n  transform: rotateZ(0deg);\n  transition: transform 0.2s;\n}\n\n.ctrl .bookmarks .togle.minimized i {\n  transform: rotateZ(90deg);\n  transition: transform 0.2s;\n}\n\n\n.ctrl .thumbnails .item a {\n  color: #fff;\n  font-size: 14px;\n}\n\n.ctrl .thumbnails {\n  padding: 10px 0;\n  text-align: center;\n}\n.ctrl .thumbnails .thumbnail {\n  height: 170px;\n  margin-bottom: 5px;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position: center;\n}\n.ctrl .thumbnails .loading {\n  position: relative;\n}\n.ctrl .thumbnails .loading::after {\n  content: ' ';\n  position: absolute;\n  width: 40px;\n  height: 40px;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  background-size: contain;\n  background-image: url('../images/light-loader.gif');\n}\n.ctrl .thumbnails .item {\n  display: inline-block;\n  width: 128px;\n  padding: 5px 5px;\n  border: 1px solid transparent;\n  border-radius: 3px;\n}\n.ctrl .thumbnails .item:hover {\n  border: 1px solid #555;\n  background-color: #444;\n}\n.ctrl .thumbnails .heading {\n  overflow: hidden;\n  height: 20px;\n}\n\n\n.ctrl .search .result {\n  padding: 7px 10px;\n  cursor: pointer;\n}\n\n.ctrl .search .result:hover {\n  background-color: #444;\n}\n\n.ctrl .search .results a {\n  color: #fff;\n  font-size: 14px;\n}\n\n.ctrl .search .query {\n  padding: 0 10px;\n  padding-bottom: 10px;\n}\n\n.ctrl .search .query input {\n  width: 100%;\n}\n\n.ctrl .search .status {\n  text-align: center;\n  color: #ccc;\n  font-size: 12px;\n}\n"
  },
  {
    "path": "css/short-black-book-view.css",
    "content": ".flip-book {\n  position: relative;\n  height: 100%;\n}\n\n.flip-book .view {\n  text-align: center;\n  height: 100%;\n}\n\n.flip-book .view .fnav {\n}\n\n.flip-book .view .prev, .flip-book .view .next {\n  position: absolute;\n  top: 50%;\n  transform: translate(0, -50%);\n  z-index: 1;\n}\n\n.flip-book .view .prev {\n  left: 20px;\n}\n\n.flip-book .view .next {\n  right: 20px;\n}\n\n\n.flip-book .view .fnav a {\n  font-size: 72pt;\n  color: #666;\n}\n\n.flip-book .view .fnav a:hover {\n  cursor: pointer;\n  text-shadow: 0 0 7px #000;\n}\n\n.flip-book .view .fnav a:active {\n  font-size: 70pt;\n}\n\n.flip-book .view .fnav .hidden {\n  display: none;\n}\n\n.flip-book .view .fnav .active {\n  color: #555;\n}\n\n.flip-book .view .fnav .disabled {\n  color: #aaa;\n}\n\n.flip-book .view .fnav .disabled:hover {\n  cursor: not-allowed;\n  text-shadow: none;\n}\n\n.flip-book .view .loading-progress {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n.flip-book .view .loading-progress.hidden {\n  display: none;\n}\n\n.flip-book .loading-progress .progress {\n  background-color: #555;\n  background-image: none;\n  width: 50px;\n  height: 50px;\n  margin: 0 auto;\n  border-radius: 30px;\n  padding: 5px;\n  box-shadow: 0px 0px 3px #000;\n  margin-bottom: 10px;\n}\n\n.flip-book .loading-progress .progress::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/light-loader.gif');\n}\n\n.flip-book .page-loading {\n  width: 50px;\n  height: 50px;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  z-index: 1;\n}\n\n.flip-book .page-loading.hidden {\n  display: none;\n}\n\n.flip-book .page-loading::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/light-loader.gif');\n}\n\n.flip-book .loading-progress .caption {\n  background-color: #555;\n  border: 1px solid #333;\n  padding: 7px 10px;\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n  font-size: 10pt;\n  border-radius: 5px;\n  font-style: italic;\n  color: #eee;\n}\n\n.flip-book .controls {\n  position: relative;\n}\n\n.flip-book .controls .fnavbar {\n  margin: 0 auto;\n  opacity: 0.3;\n  transition: opacity 2s ease-in-out 3s;\n}\n\n.flip-book .controls .fnavbar:hover {\n  opacity: 1;\n  transition: opacity 1s ease;\n}\n\n.flip-book .controls .ctrl {\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n  position: absolute;\n  bottom: 10px;\n}\n.ctrl ul {\n  margin: 0;\n  padding: 0;\n}\n.ctrl .fnavbar {\n  text-align: center;\n  background-image: linear-gradient(to bottom,#3c3c3c 0,#222 100%);\n  background-repeat: repeat-x;\n  padding: 3px;\n  overflow: visible;\n  background-color: #3c3c3c;\n\n  border-radius: 4px;\n}\n.ctrl .fnavbar a {\n  text-decoration: none;\n  font-size: 14px;\n}\n.ctrl .fnavbar .fnav {\n  font-size: 0;\n  display: flex;\n  text-align: left;\n}\n.ctrl .fnavbar .fnav li{\n  font-size: 12pt;\n  margin: 0;\n  width: auto;\n}\n.ctrl .fnavbar .fnav .fnav-item {\n  display: inline-block;\n}\n.ctrl .fnavbar .fnav .hidden {\n  display: none;\n}\n.ctrl .fnavbar .fnav .fnav-item>a {\n  padding: 10px;\n  display: inline-block;\n  color: #ccc;\n}\n.ctrl .fnavbar .fnav>.active>a {\n  color: #fff;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:hover {\n  color: #fff;\n  cursor: pointer;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:active {\n  text-shadow: 0 0 2px #fff;\n}\n.ctrl .fnavbar .fnav>.disabled>a {\n  color: #888;\n}\n.ctrl .fnavbar .fnav>.disabled>a:hover {\n  color: #888;\n  cursor: not-allowed;\n}\n.ctrl .fnavbar .fnav>.active {\n  background: #222;\n}\n\n.ctrl .fnavbar .fnav .dropdown, .ctrl .fnavbar .fnav .dropup {\n  position: relative;\n}\n.ctrl .fnavbar .fnav .dropdown .menu {\n  top: 100%;\n  box-shadow: 3px 0 3px #222;\n}\n.ctrl .fnavbar .fnav .icon-caret {\n  width: 26px;\n  display: inline-block;\n}\n.ctrl .fnavbar .fnav .dropdown .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 5px solid #ccc;\n}\n.ctrl .fnavbar .fnav .dropup .menu {\n  bottom: 100%;\n  box-shadow: 3px 0 3px #222;\n}\n.ctrl .fnavbar .fnav .dropup .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #ccc;\n}\n.ctrl .fnavbar .menu {\n  position: absolute;\n  border: 1px solid #444;\n  background-color: #222;\n  z-index: 10;\n  min-width: 160px;\n}\n.ctrl .fnavbar .menu li {\n  display: block;\n  padding: 5px 10px;\n}\n.ctrl .fnavbar .menu .divider {\n  height: 1px;\n  background-color: #444;\n  padding: 0;\n  margin: 5px 0;\n}\n.ctrl .fnavbar .menu .active {\n  background-color: #444;\n}\n.ctrl .fnavbar .menu .active:hover {\n  /*background-color: #444;*/\n}\n.ctrl .fnavbar .menu li:hover {\n  background-color: #333;\n  cursor: pointer;\n}\n.ctrl .fnavbar .menu li a {\n  color: #fff;\n}\n.ctrl .fnavbar .menu .disabled a {\n  color: #aaa;\n  cursor: not-allowed;\n}\n\n.ctrl .fnavbar .menu .icon {\n  display: inline-block;\n  width: 14px;\n  height: 14px;\n  text-align: center;\n}\n\n.ctrl .pages {\n  padding: 8px 10px;\n  display: flex;\n  font-size: 0;\n}\n\n.ctrl .pages .number, .ctrl .pages .amount {\n  width: 50px;\n  height: 20px;\n  text-align: center;\n  display: inline-block;\n  font-size: 11pt;\n  border: 0;\n  color: #000;\n  background-color: #ccc;\n  font-weight: bold;\n  border-radius: 0;\n  margin: 0;\n  padding: 2px;\n}\n\n.ctrl .pages .number {\n  border-top-left-radius: 5px;\n  border-bottom-left-radius: 5px;\n  background-color: #ddd;\n}\n\n.ctrl .pages .amount {\n  border-top-right-radius: 5px;\n  border-bottom-right-radius: 5px;\n}\n\n/* floating window */\n\n.flip-book .float-wnd {\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  border-radius: 5px 5px 0 0;\n  background-color: #1a1a1a;\n  width: 300px;\n  z-index: 1;\n  box-shadow: 3px 0 3px #222;\n}\n\n.flip-book .float-wnd.hidden {\n  display: none;\n}\n\n.flip-book .float-wnd .header {\n  border-radius: 4px 4px 0 0;\n  background-color: #3c3c3c;\n  background-image: linear-gradient(to bottom,#3c3c3c 0,#222 100%);\n  background-repeat: repeat-x;\n  padding: 7px 10px;\n  border: 1px solid #444;\n  border-bottom: none;\n  color: #fff;\n  font-weight: bold;\n  cursor: move;\n}\n\n.flip-book .float-wnd .header .close {\n  top: 5px;\n  right: 8px;\n  font-size: 14px;\n  position: absolute;\n  color: #ccc;\n}\n\n.flip-book .float-wnd .header .close:hover {\n  color: #fff;\n}\n.flip-book .float-wnd .header .close:active {\n  font-size: 12px;\n  padding-top: 1px;\n  padding-right: 1px;\n}\n\n.flip-book .float-wnd .body {\n  border: 1px solid #444;\n  border-top: none;\n}\n\n/* toc */\n\n.ctrl .toc {\n  font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;\n}\n\n.ctrl .toc a {\n  text-decoration: none;\n}\n\n.ctrl .toc .hidden {\n  display: none;\n}\n\n.ctrl .toc .toc-menu {\n  padding: 5px 10px;\n}\n\n.ctrl .toc .toc-menu ul {\n  list-style: none;\n  padding: 0;\n}\n.ctrl .toc .toc-menu li {\n  display: inline-block;\n  padding-right: 5px;\n}\n.ctrl .toc .toc-menu a {\n  color: #ccc;\n  font-size: 14px;\n}\n.ctrl .toc .toc-menu a:hover {\n  color: #fff;\n}\n.ctrl .toc .toc-menu a:active {\n  text-shadow: 0 0 2px #fff;\n}\n.ctrl .toc .toc-menu .active a {\n  color: #fff;\n}\n\n\n.ctrl .toc .toc-view {\n  padding: 10px 0;\n  max-height: 80vh;\n  overflow-y: auto;\n  overflow-x: hidden;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar {\n  width: 7px;\n  height: 7px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-button {\n  width: 0;\n  height: 0;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb {\n  background: #4a4a4a;\n  border-radius: 2px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:hover {\n  background: #3a3a3a;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:active {\n  background: #5a5a5a;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-track {\n  background: #2a2a2a;\n  border-left: 2px solid #1a1a1a;\n  border-right: 2px solid #1a1a1a;\n}\n\n.ctrl .bookmarks .white-space, .ctrl .bookmarks .togle, .ctrl .bookmarks .togle i {\n  width: 18px;\n  height: 18px;\n}\n\n.ctrl .bookmarks .white-space {\n  display: inline-block;\n}\n\n.ctrl .bookmarks li {\n  width: 10000px;\n}\n\n.ctrl .bookmarks .item .area {\n  padding: 2px 0;\n}\n\n.ctrl .bookmarks .level-0 .area {\n  padding-left: 5px;\n}\n.ctrl .bookmarks .level-1 .area {\n  padding-left: 10px;\n}\n.ctrl .bookmarks .level-2 .area {\n  padding-left: 15px;\n}\n.ctrl .bookmarks .level-3 .area {\n  padding-left: 20px;\n}\n.ctrl .bookmarks .level-4 .area {\n  padding-left: 25px;\n}\n\n.ctrl .bookmarks .item .area:hover {\n  background-color: #444;\n}\n\n.ctrl .bookmarks .item .area:active {\n  background-color: #333;\n}\n\n.ctrl .bookmarks .item a {\n  color: #fff;\n  font-size: 14px;\n}\n\n.ctrl .bookmarks ul {\n  list-style: none;\n  padding: 0;\n}\n\n.ctrl .bookmarks .togle {\n  display: inline-block;\n  text-align: center;\n  position: relative;\n}\n\n.ctrl .bookmarks .togle::before {\n  content: ' ';\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  border-radius: 50%;\n  border: 0px solid #222;\n  transition: border 0.2s;\n}\n\n.ctrl .bookmarks .togle:active::before {\n  border: 12px solid #222;\n  transition: border 0.05s;\n}\n\n.ctrl .bookmarks .togle i {\n  transform: rotateZ(0deg);\n  transition: transform 0.2s;\n}\n\n.ctrl .bookmarks .togle.minimized i {\n  transform: rotateZ(90deg);\n  transition: transform 0.2s;\n}\n\n\n.ctrl .thumbnails .item a {\n  color: #fff;\n  font-size: 14px;\n}\n\n.ctrl .thumbnails {\n  padding: 10px 0;\n  text-align: center;\n}\n.ctrl .thumbnails .thumbnail {\n  height: 170px;\n  margin-bottom: 5px;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position: center;\n}\n.ctrl .thumbnails .loading {\n  position: relative;\n}\n.ctrl .thumbnails .loading::after {\n  content: ' ';\n  position: absolute;\n  width: 40px;\n  height: 40px;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  background-size: contain;\n  background-image: url('../images/light-loader.gif');\n}\n.ctrl .thumbnails .item {\n  display: inline-block;\n  width: 128px;\n  padding: 5px 5px;\n  border: 1px solid transparent;\n  border-radius: 3px;\n}\n.ctrl .thumbnails .item:hover {\n  border: 1px solid #555;\n  background-color: #444;\n}\n.ctrl .thumbnails .heading {\n  overflow: hidden;\n  height: 20px;\n}\n\n\n.ctrl .search .result {\n  padding: 7px 10px;\n  cursor: pointer;\n}\n\n.ctrl .search .result:hover {\n  background-color: #444;\n}\n\n.ctrl .search .results a {\n  color: #fff;\n  font-size: 14px;\n}\n\n.ctrl .search .query {\n  padding: 0 10px;\n  padding-bottom: 10px;\n}\n\n.ctrl .search .query input {\n  width: 100%;\n}\n\n.ctrl .search .status {\n  text-align: center;\n  color: #ccc;\n  font-size: 12px;\n}\n"
  },
  {
    "path": "css/short-white-book-view.css",
    "content": ".flip-book {\n  position: relative;\n  height: 100%;\n}\n\n.flip-book .view {\n  position: relative;\n  height: 100%;\n}\n\n.flip-book .view .fnav {\n}\n\n.flip-book .view .prev, .flip-book .view .next {\n  position: absolute;\n  top: 50%;\n  transform: translate(0, -50%);\n  z-index: 1;\n}\n\n.flip-book .view .prev {\n  left: 20px;\n}\n\n.flip-book .view .next {\n  right: 20px;\n}\n\n\n.flip-book .view .fnav a {\n  font-size: 72pt;\n  color: #ccc;\n}\n\n.flip-book .view .fnav a:hover {\n  cursor: pointer;\n  text-shadow: 0 0 7px #fff;\n}\n\n.flip-book .view .fnav a:active {\n  font-size: 70pt;\n}\n\n.flip-book .view .fnav .hidden {\n  display: none;\n}\n\n.flip-book .view .fnav .active {\n  color: #ddd;\n}\n\n.flip-book .view .fnav .disabled {\n  color: #888;\n}\n\n.flip-book .view .fnav .disabled:hover {\n  cursor: not-allowed;\n  text-shadow: none;\n}\n\n.flip-book .view .loading-progress {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n.flip-book .view .loading-progress.hidden {\n  display: none;\n}\n\n.flip-book .loading-progress .progress {\n  background-color: #eee;\n  background-image: none;\n  width: 50px;\n  height: 50px;\n  margin: 0 auto;\n  border-radius: 30px;\n  padding: 5px;\n  box-shadow: 0px 0px 3px #fff;\n  margin-bottom: 10px;\n}\n\n.flip-book .loading-progress .progress::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/dark-loader.gif');\n}\n\n.flip-book .page-loading {\n  width: 50px;\n  height: 50px;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  z-index: 1;\n}\n\n.flip-book .page-loading.hidden {\n  display: none;\n}\n\n.flip-book .page-loading::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/dark-loader.gif');\n}\n\n.flip-book .loading-progress .caption {\n  background-color: #eee;\n  border: 1px solid #fff;\n  padding: 7px 10px;\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n  font-size: 10pt;\n  border-radius: 5px;\n  font-style: italic;\n  color: #111;\n}\n\n.flip-book .controls {\n  position: relative;\n}\n\n.flip-book .controls .fnavbar {\n  margin: 0 auto;\n  opacity: 0.3;\n  transition: opacity 2s ease-in-out 3s;\n}\n\n.flip-book .controls .fnavbar:hover {\n  opacity: 1;\n  transition: opacity 1s ease;\n}\n\n.flip-book .controls .ctrl {\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n  position: absolute;\n  bottom: 10px;\n}\n.ctrl ul {\n  margin: 0;\n  padding: 0;\n}\n.ctrl .fnavbar {\n  background-image: linear-gradient(to bottom,#fff 0,#f8f8f8 100%);\n  background-repeat: repeat-x;\n  padding: 3px;\n  overflow: visible;\n  background-color: #f8f8f8;\n\n  border-radius: 4px;\n}\n.ctrl .fnavbar a {\n  text-decoration: none;\n  font-size: 14px;\n}\n.ctrl .fnavbar .fnav {\n  font-size: 0;\n  display: flex;\n  text-align: left;\n}\n.ctrl .fnavbar .fnav li{\n  font-size: 12pt;\n  margin: 0;\n  width: auto;\n}\n.ctrl .fnavbar .fnav .fnav-item {\n  display: inline-block;\n}\n.ctrl .fnavbar .fnav .hidden {\n  display: none;\n}\n.ctrl .fnavbar .fnav .fnav-item>a {\n  padding: 10px;\n  display: inline-block;\n  color: #777;\n}\n.ctrl .fnavbar .fnav>.active>a {\n  color: #000;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:hover {\n  color: #000;\n  cursor: pointer;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:active {\n  text-shadow: 0 0 1px #000;\n}\n.ctrl .fnavbar .fnav>.disabled>a {\n  color: #aaa;\n}\n.ctrl .fnavbar .fnav>.disabled>a:hover {\n  color: #aaa;\n  cursor: not-allowed;\n}\n.ctrl .fnavbar .fnav>.active {\n  background: #fff;\n}\n\n.ctrl .fnavbar .fnav .dropdown, .ctrl .fnavbar .fnav .dropup {\n  position: relative;\n}\n.ctrl .fnavbar .fnav .dropdown .menu {\n  top: 100%;\n  box-shadow: 3px 0 3px #ddd;\n}\n.ctrl .fnavbar .fnav .icon-caret {\n  width: 26px;\n  display: inline-block;\n}\n.ctrl .fnavbar .fnav .dropdown .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 5px solid #777;\n}\n.ctrl .fnavbar .fnav .dropup .menu {\n  bottom: 100%;\n  box-shadow: 3px 0 3px #ddd;\n}\n.ctrl .fnavbar .fnav .dropup .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #777;\n}\n.ctrl .fnavbar .menu {\n  position: absolute;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  z-index: 10;\n  min-width: 160px;\n}\n.ctrl .fnavbar .menu li {\n  display: block;\n  padding: 5px 10px;\n}\n.ctrl .fnavbar .menu .divider {\n  height: 1px;\n  background-color: #ddd;\n  padding: 0;\n  margin: 5px 0;\n}\n.ctrl .fnavbar .menu .active {\n  background-color: #e0e0e0;\n}\n.ctrl .fnavbar .menu .active:hover {\n  /*background-color: #e0e0e0;*/\n}\n.ctrl .fnavbar .menu li:hover {\n  background-color: #eee;\n  cursor: pointer;\n}\n.ctrl .fnavbar .menu li a {\n  color: #000;\n}\n.ctrl .fnavbar .menu .disabled a {\n  color: #777;\n  cursor: not-allowed;\n}\n\n.ctrl .fnavbar .menu .icon {\n  display: inline-block;\n  width: 14px;\n  height: 14px;\n  text-align: center;\n}\n\n.ctrl .pages {\n  padding: 8px 10px;\n  display: flex;\n  font-size: 0;\n}\n\n.ctrl .pages .number, .ctrl .pages .amount {\n  width: 50px;\n  height: 20px;\n  text-align: center;\n  display: inline-block;\n  font-size: 11pt;\n  border: 0;\n  color: #fff;\n  background-color: #444;\n  font-weight: bold;\n  border-radius: 0;\n  margin: 0;\n  padding: 2px;\n}\n\n.ctrl .pages .number {\n  border-top-left-radius: 5px;\n  border-bottom-left-radius: 5px;\n  background-color: #000;\n}\n\n.ctrl .pages .amount {\n  border-top-right-radius: 5px;\n  border-bottom-right-radius: 5px;\n}\n\n/* floating window */\n\n.flip-book .float-wnd {\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  border-radius: 5px 5px 0 0;\n  background-color: #fff;\n  width: 300px;\n  z-index: 1;\n  box-shadow: 3px 0 3px #ddd;\n}\n\n.flip-book .float-wnd.hidden {\n  display: none;\n}\n\n.flip-book .float-wnd .header {\n  border-radius: 4px 4px 0 0;\n  background-color: #fff;\n  background-image: linear-gradient(to bottom,#fff 0,#f8f8f8 100%);\n  background-repeat: repeat-x;\n  padding: 7px 10px;\n  border: 1px solid #ddd;\n  border-bottom: none;\n  font-weight: bold;\n  cursor: move;\n}\n\n.flip-book .float-wnd .header .close {\n  top: 5px;\n  right: 8px;\n  font-size: 14px;\n  position: absolute;\n  color: #777;\n}\n\n.flip-book .float-wnd .header .close:hover {\n  color: #000;\n}\n.flip-book .float-wnd .header .close:active {\n  font-size: 12px;\n  padding-top: 1px;\n  padding-right: 1px;\n}\n\n.flip-book .float-wnd .body {\n  border: 1px solid #ddd;\n  border-top: none;\n}\n\n/* toc */\n\n.ctrl .toc {\n  font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;\n}\n\n.ctrl .toc a {\n  text-decoration: none;\n}\n\n.ctrl .toc .hidden {\n  display: none;\n}\n\n.ctrl .toc .toc-menu {\n  padding: 5px 10px;\n}\n\n.ctrl .toc .toc-menu ul {\n  list-style: none;\n  padding: 0;\n}\n.ctrl .toc .toc-menu li {\n  display: inline-block;\n  padding-right: 5px;\n}\n.ctrl .toc .toc-menu a {\n  color: #777;\n  font-size: 14px;\n}\n.ctrl .toc .toc-menu a:hover {\n  color: #000;\n}\n.ctrl .toc .toc-menu a:active {\n  text-shadow: 0 0 1px rgba(0,0,0,0.3);\n}\n.ctrl .toc .toc-menu .active a {\n  color: #000;\n}\n\n.ctrl .toc .toc-view {\n  padding: 10px 0;\n  max-height: 80vh;\n  overflow-y: auto;\n  overflow-x: hidden;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar {\n  width: 7px;\n  height: 7px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-button {\n  width: 0;\n  height: 0;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb {\n  background: #ccc;\n  border-radius: 2px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:hover {\n  background: #ddd;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:active {\n  background: #bbb;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-track {\n  background: #eee;\n  border-left: 2px solid #fff;\n  border-right: 2px solid #fff;\n}\n\n.ctrl .bookmarks .white-space, .ctrl .bookmarks .togle, .ctrl .bookmarks .togle i {\n  width: 18px;\n  height: 18px;\n}\n\n.ctrl .bookmarks .white-space {\n  display: inline-block;\n}\n\n.ctrl .bookmarks li {\n  width: 10000px;\n}\n\n.ctrl .bookmarks .item .area {\n  padding: 2px 0;\n}\n\n.ctrl .bookmarks .level-0 .area {\n  padding-left: 5px;\n}\n.ctrl .bookmarks .level-1 .area {\n  padding-left: 10px;\n}\n.ctrl .bookmarks .level-2 .area {\n  padding-left: 15px;\n}\n.ctrl .bookmarks .level-3 .area {\n  padding-left: 20px;\n}\n.ctrl .bookmarks .level-4 .area {\n  padding-left: 25px;\n}\n\n.ctrl .bookmarks .item .area:hover {\n  background-color: #eee;\n}\n\n.ctrl .bookmarks .item .area:active {\n  background-color: #e0e0e0;\n}\n\n.ctrl .bookmarks .item a {\n  color: #000;\n  font-size: 14px;\n}\n\n.ctrl .bookmarks ul {\n  list-style: none;\n  padding: 0;\n}\n\n.ctrl .bookmarks .togle {\n  display: inline-block;\n  text-align: center;\n  position: relative;\n}\n\n.ctrl .bookmarks .togle::before {\n  content: ' ';\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  border-radius: 50%;\n  border: 0px solid #f5f5f5;\n  transition: border 0.2s;\n}\n\n.ctrl .bookmarks .togle:active::before {\n  border: 12px solid #f5f5f5;\n  transition: border 0.05s;\n}\n\n.ctrl .bookmarks .togle i {\n  transform: rotateZ(0deg);\n  transition: transform 0.2s;\n}\n\n.ctrl .bookmarks .togle.minimized i {\n  transform: rotateZ(90deg);\n  transition: transform 0.2s;\n}\n\n.ctrl .thumbnails .item a {\n  color: #000;\n  font-size: 14px;\n}\n\n.ctrl .thumbnails {\n  padding: 10px 0;\n  text-align: center;\n}\n.ctrl .thumbnails .thumbnail {\n  height: 170px;\n  margin-bottom: 5px;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position: center;\n}\n.ctrl .thumbnails .loading {\n  position: relative;\n}\n.ctrl .thumbnails .loading::after {\n  content: ' ';\n  position: absolute;\n  width: 40px;\n  height: 40px;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  background-size: contain;\n  background-image: url('../images/dark-loader.gif');\n}\n.ctrl .thumbnails .item {\n  display: inline-block;\n  width: 128px;\n  padding: 5px 5px;\n  border: 1px solid transparent;\n  border-radius: 3px;\n}\n.ctrl .thumbnails .item:hover {\n  border: 1px solid #ddd;\n  background-color: #eee;\n}\n.ctrl .thumbnails .heading {\n  overflow: hidden;\n  height: 20px;\n}\n\n\n.ctrl .search .result {\n  padding: 7px 10px;\n  cursor: pointer;\n}\n\n.ctrl .search .result:hover {\n  background-color: #ddd;\n}\n\n.ctrl .search .results a {\n  color: #000;\n  font-size: 14px;\n}\n\n.ctrl .search .query {\n  padding: 0 10px;\n  padding-bottom: 10px;\n}\n\n.ctrl .search .query input {\n  width: 100%;\n}\n\n.ctrl .search .status {\n  text-align: center;\n  color: #333;\n  font-size: 12px;\n}\n"
  },
  {
    "path": "css/white-book-view.css",
    "content": ".flip-book {\n  position: relative;\n  height: 100%;\n}\n\n.flip-book .view {\n  text-align: center;\n  height: 100%;\n}\n\n.flip-book .view .fnav {\n}\n\n.flip-book .view .prev, .flip-book .view .next {\n  position: absolute;\n  top: 50%;\n  transform: translate(0, -50%);\n  z-index: 1;\n}\n\n.flip-book .view .prev {\n  left: 20px;\n}\n\n.flip-book .view .next {\n  right: 20px;\n}\n\n\n.flip-book .view .fnav a {\n  font-size: 72pt;\n  color: #ccc;\n}\n\n.flip-book .view .fnav a:hover {\n  cursor: pointer;\n  text-shadow: 0 0 7px #fff;\n}\n\n.flip-book .view .fnav a:active {\n  font-size: 70pt;\n}\n\n.flip-book .view .fnav .hidden {\n  display: none;\n}\n\n.flip-book .view .fnav .active {\n  color: #ddd;\n}\n\n.flip-book .view .fnav .disabled {\n  color: #888;\n}\n\n.flip-book .view .fnav .disabled:hover {\n  cursor: not-allowed;\n  text-shadow: none;\n}\n\n.flip-book .view .loading-progress {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n.flip-book .view .loading-progress.hidden {\n  display: none;\n}\n\n.flip-book .loading-progress .progress {\n  background-color: #eee;\n  background-image: none;\n  width: 50px;\n  height: 50px;\n  margin: 0 auto;\n  border-radius: 30px;\n  padding: 5px;\n  box-shadow: 0px 0px 3px #fff;\n  margin-bottom: 10px;\n}\n\n.flip-book .loading-progress .progress::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/dark-loader.gif');\n}\n\n.flip-book .page-loading {\n  width: 50px;\n  height: 50px;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  z-index: 1;\n}\n\n.flip-book .page-loading.hidden {\n  display: none;\n}\n\n.flip-book .page-loading::after {\n  content: ' ';\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-size: contain;\n  background-image: url('../images/dark-loader.gif');\n}\n\n.flip-book .loading-progress .caption {\n  background-color: #eee;\n  border: 1px solid #fff;\n  padding: 7px 10px;\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n  font-size: 10pt;\n  border-radius: 5px;\n  font-style: italic;\n  color: #111;\n}\n\n.flip-book .controls {\n  position: absolute;\n  bottom: 0px;\n  width: 100%;\n}\n\n.flip-book .controls .fnavbar {\n  margin: 0 auto;\n  opacity: 0.3;\n  transition: opacity 2s ease-in-out 3s;\n}\n\n.flip-book .controls .fnavbar:hover {\n  opacity: 1;\n  transition: opacity 1s ease;\n}\n\n.ctrl {\n  font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n}\n.ctrl ul {\n  margin: 0;\n  padding: 0;\n}\n.ctrl .fnavbar {\n  text-align: center;\n  background-image: linear-gradient(to bottom,#fff 0,#f8f8f8 100%);\n  background-repeat: repeat-x;\n  padding: 3px;\n  overflow: visible;\n  background-color: #f8f8f8;\n}\n.ctrl .fnavbar a {\n  text-decoration: none;\n  font-size: 14px;\n}\n.ctrl .fnavbar .fnav {\n  font-size: 0;\n  display: inline-block;\n  text-align: left;\n}\n.ctrl .fnavbar .fnav li{\n  font-size: 12pt;\n  margin: 0;\n  width: auto;\n}\n.ctrl .fnavbar .fnav .fnav-item {\n  display: inline-block;\n}\n.ctrl .fnavbar .fnav .hidden {\n  display: none;\n}\n.ctrl .fnavbar .fnav .fnav-item>a {\n  padding: 10px;\n  display: inline-block;\n  color: #777;\n}\n.ctrl .fnavbar .fnav>.active>a {\n  color: #000;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:hover {\n  color: #000;\n  cursor: pointer;\n}\n.ctrl .fnavbar .fnav .fnav-item>a:active {\n  text-shadow: 0 0 1px #000;\n}\n.ctrl .fnavbar .fnav>.disabled>a {\n  color: #aaa;\n}\n.ctrl .fnavbar .fnav>.disabled>a:hover {\n  color: #aaa;\n  cursor: not-allowed;\n}\n.ctrl .fnavbar .fnav>.active {\n  background: #fff;\n}\n\n.ctrl .fnavbar .fnav .dropdown, .ctrl .fnavbar .fnav .dropup {\n  position: relative;\n}\n.ctrl .fnavbar .fnav .dropdown .menu {\n  top: 100%;\n  box-shadow: 3px 0 3px #ddd;\n}\n.ctrl .fnavbar .fnav .dropdown .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-top: 5px solid #777;\n}\n.ctrl .fnavbar .fnav .dropup .menu {\n  bottom: 100%;\n  box-shadow: 3px 0 3px #ddd;\n}\n.ctrl .fnavbar .fnav .dropup .caret {\n  display: inline-block;\n  border-left: 5px solid transparent;\n  border-right: 5px solid transparent;\n  border-bottom: 5px solid #777;\n}\n.ctrl .fnavbar .menu {\n  position: absolute;\n  border: 1px solid #ddd;\n  background-color: #fff;\n  z-index: 10;\n  min-width: 160px;\n}\n.ctrl .fnavbar .menu li {\n  display: block;\n  padding: 5px 10px;\n}\n.ctrl .fnavbar .menu .divider {\n  height: 1px;\n  background-color: #ddd;\n  padding: 0;\n  margin: 5px 0;\n}\n.ctrl .fnavbar .menu .active {\n  background-color: #e0e0e0;\n}\n.ctrl .fnavbar .menu .active:hover {\n  /*background-color: #e0e0e0;*/\n}\n.ctrl .fnavbar .menu li:hover {\n  background-color: #eee;\n  cursor: pointer;\n}\n.ctrl .fnavbar .menu li a {\n  color: #000;\n}\n.ctrl .fnavbar .menu .disabled a {\n  color: #777;\n  cursor: not-allowed;\n}\n\n.ctrl .fnavbar .menu .icon {\n  display: inline-block;\n  width: 14px;\n  height: 14px;\n  text-align: center;\n}\n\n.ctrl .pages {\n  padding: 0 10px;\n  display: inline-block;\n  font-size: 0;\n}\n\n.ctrl .pages .number, .ctrl .pages .amount {\n  width: 50px;\n  height: 20px;\n  text-align: center;\n  display: inline-block;\n  font-size: 11pt;\n  border: 0;\n  color: #fff;\n  background-color: #444;\n  font-weight: bold;\n  border-radius: 0;\n  margin: 0;\n  padding: 2px;\n}\n\n.ctrl .pages .number {\n  border-top-left-radius: 5px;\n  border-bottom-left-radius: 5px;\n  background-color: #000;\n}\n\n.ctrl .pages .amount {\n  border-top-right-radius: 5px;\n  border-bottom-right-radius: 5px;\n}\n\n\n/* floating window */\n\n.flip-book .float-wnd {\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  border-radius: 5px 5px 0 0;\n  background-color: #fff;\n  width: 300px;\n  z-index: 1;\n  box-shadow: 3px 0 3px #ddd;\n}\n\n.flip-book .float-wnd.hidden {\n  display: none;\n}\n\n.flip-book .float-wnd .header {\n  border-radius: 4px 4px 0 0;\n  background-color: #fff;\n  background-image: linear-gradient(to bottom,#fff 0,#f8f8f8 100%);\n  background-repeat: repeat-x;\n  padding: 7px 10px;\n  border: 1px solid #ddd;\n  border-bottom: none;\n  font-weight: bold;\n  cursor: move;\n}\n\n.flip-book .float-wnd .header .close {\n  top: 5px;\n  right: 8px;\n  font-size: 14px;\n  position: absolute;\n  color: #777;\n}\n\n.flip-book .float-wnd .header .close:hover {\n  color: #000;\n}\n.flip-book .float-wnd .header .close:active {\n  font-size: 12px;\n  padding-top: 1px;\n  padding-right: 1px;\n}\n\n.flip-book .float-wnd .body {\n  border: 1px solid #ddd;\n  border-top: none;\n}\n\n\n/* toc */\n\n.ctrl .toc {\n  font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif;\n}\n\n.ctrl .toc a {\n  text-decoration: none;\n}\n\n.ctrl .toc .hidden {\n  display: none;\n}\n\n.ctrl .toc .toc-menu {\n  padding: 5px 10px;\n}\n\n.ctrl .toc .toc-menu ul {\n  list-style: none;\n  padding: 0;\n}\n.ctrl .toc .toc-menu li {\n  display: inline-block;\n  padding-right: 5px;\n}\n.ctrl .toc .toc-menu a {\n  color: #777;\n  font-size: 14px;\n}\n.ctrl .toc .toc-menu a:hover {\n  color: #000;\n}\n.ctrl .toc .toc-menu a:active {\n  text-shadow: 0 0 1px rgba(0,0,0,0.3);\n}\n.ctrl .toc .toc-menu .active a {\n  color: #000;\n}\n\n.ctrl .toc .toc-view {\n  padding: 10px 0;\n  max-height: 80vh;\n  overflow-y: auto;\n  overflow-x: hidden;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar {\n  width: 7px;\n  height: 7px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-button {\n  width: 0;\n  height: 0;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb {\n  background: #ccc;\n  border-radius: 2px;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:hover {\n  background: #ddd;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-thumb:active {\n  background: #bbb;\n}\n.ctrl .toc .toc-view::-webkit-scrollbar-track {\n  background: #eee;\n  border-left: 2px solid #fff;\n  border-right: 2px solid #fff;\n}\n\n.ctrl .bookmarks .white-space, .ctrl .bookmarks .togle, .ctrl .bookmarks .togle i {\n  width: 18px;\n  height: 18px;\n}\n\n.ctrl .bookmarks .white-space {\n  display: inline-block;\n}\n\n.ctrl .bookmarks li {\n  width: 10000px;\n}\n\n.ctrl .bookmarks .item .area {\n  padding: 2px 0;\n}\n\n.ctrl .bookmarks .level-0 .area {\n  padding-left: 5px;\n}\n.ctrl .bookmarks .level-1 .area {\n  padding-left: 10px;\n}\n.ctrl .bookmarks .level-2 .area {\n  padding-left: 15px;\n}\n.ctrl .bookmarks .level-3 .area {\n  padding-left: 20px;\n}\n.ctrl .bookmarks .level-4 .area {\n  padding-left: 25px;\n}\n\n.ctrl .bookmarks .item .area:hover {\n  background-color: #eee;\n}\n\n.ctrl .bookmarks .item .area:active {\n  background-color: #e0e0e0;\n}\n\n.ctrl .bookmarks .item a {\n  color: #000;\n  font-size: 14px;\n}\n\n.ctrl .bookmarks ul {\n  list-style: none;\n  padding: 0;\n}\n\n.ctrl .bookmarks .togle {\n  display: inline-block;\n  text-align: center;\n  position: relative;\n}\n\n.ctrl .bookmarks .togle::before {\n  content: ' ';\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  border-radius: 50%;\n  border: 0px solid #f5f5f5;\n  transition: border 0.2s;\n}\n\n.ctrl .bookmarks .togle:active::before {\n  border: 12px solid #f5f5f5;\n  transition: border 0.05s;\n}\n\n.ctrl .bookmarks .togle i {\n  transform: rotateZ(0deg);\n  transition: transform 0.2s;\n}\n\n.ctrl .bookmarks .togle.minimized i {\n  transform: rotateZ(90deg);\n  transition: transform 0.2s;\n}\n\n.ctrl .thumbnails .item a {\n  color: #000;\n  font-size: 14px;\n}\n\n.ctrl .thumbnails {\n  padding: 10px 0;\n  text-align: center;\n}\n.ctrl .thumbnails .thumbnail {\n  height: 170px;\n  margin-bottom: 5px;\n  background-size: contain;\n  background-repeat: no-repeat;\n  background-position: center;\n}\n.ctrl .thumbnails .loading {\n  position: relative;\n}\n.ctrl .thumbnails .loading::after {\n  content: ' ';\n  position: absolute;\n  width: 40px;\n  height: 40px;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  background-size: contain;\n  background-image: url('../images/dark-loader.gif');\n}\n.ctrl .thumbnails .item {\n  display: inline-block;\n  width: 128px;\n  padding: 5px 5px;\n  border: 1px solid transparent;\n  border-radius: 3px;\n}\n.ctrl .thumbnails .item:hover {\n  border: 1px solid #ddd;\n  background-color: #eee;\n}\n.ctrl .thumbnails .heading {\n  overflow: hidden;\n  height: 20px;\n}\n\n\n.ctrl .search .result {\n  padding: 7px 10px;\n  cursor: pointer;\n}\n\n.ctrl .search .result:hover {\n  background-color: #ddd;\n}\n\n.ctrl .search .results a {\n  color: #000;\n  font-size: 14px;\n}\n\n.ctrl .search .query {\n  padding: 0 10px;\n  padding-bottom: 10px;\n}\n\n.ctrl .search .query input {\n  width: 100%;\n}\n\n.ctrl .search .status {\n  text-align: center;\n  color: #333;\n  font-size: 12px;\n}\n"
  },
  {
    "path": "dist/flip-book.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 3);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(2);\n\n__webpack_require__(1);\n\nexports.default = _libs.$;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof2 = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/******/(function (modules) {\n  // webpackBootstrap\n  /******/ // The module cache\n  /******/var installedModules = {};\n  /******/\n  /******/ // The require function\n  /******/function __webpack_require__(moduleId) {\n    /******/\n    /******/ // Check if module is in cache\n    /******/if (installedModules[moduleId])\n      /******/return installedModules[moduleId].exports;\n    /******/\n    /******/ // Create a new module (and put it into the cache)\n    /******/var module = installedModules[moduleId] = {\n      /******/i: moduleId,\n      /******/l: false,\n      /******/exports: {}\n      /******/ };\n    /******/\n    /******/ // Execute the module function\n    /******/modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n    /******/\n    /******/ // Flag the module as loaded\n    /******/module.l = true;\n    /******/\n    /******/ // Return the exports of the module\n    /******/return module.exports;\n    /******/\n  }\n  /******/\n  /******/\n  /******/ // expose the modules object (__webpack_modules__)\n  /******/__webpack_require__.m = modules;\n  /******/\n  /******/ // expose the module cache\n  /******/__webpack_require__.c = installedModules;\n  /******/\n  /******/ // identity function for calling harmony imports with the correct context\n  /******/__webpack_require__.i = function (value) {\n    return value;\n  };\n  /******/\n  /******/ // define getter function for harmony exports\n  /******/__webpack_require__.d = function (exports, name, getter) {\n    /******/if (!__webpack_require__.o(exports, name)) {\n      /******/Object.defineProperty(exports, name, {\n        /******/configurable: false,\n        /******/enumerable: true,\n        /******/get: getter\n        /******/ });\n      /******/\n    }\n    /******/\n  };\n  /******/\n  /******/ // getDefaultExport function for compatibility with non-harmony modules\n  /******/__webpack_require__.n = function (module) {\n    /******/var getter = module && module.__esModule ?\n    /******/function getDefault() {\n      return module['default'];\n    } :\n    /******/function getModuleExports() {\n      return module;\n    };\n    /******/__webpack_require__.d(getter, 'a', getter);\n    /******/return getter;\n    /******/\n  };\n  /******/\n  /******/ // Object.prototype.hasOwnProperty.call\n  /******/__webpack_require__.o = function (object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n  };\n  /******/\n  /******/ // __webpack_public_path__\n  /******/__webpack_require__.p = \"\";\n  /******/\n  /******/ // Load entry module and return exports\n  /******/return __webpack_require__(__webpack_require__.s = 72);\n  /******/\n})(\n/************************************************************************/\n/******/[\n/* 0 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n  var _$ = true ? window.jQuery : require('jquery'),\n      _html2canvas = true ? window.html2canvas : require('html2canvas'),\n      _THREE = true ? window.THREE : require('three'),\n      _React = true ? window.React : require('react'),\n      _ReactDOM = true ? window.ReactDOM : require('react-dom'),\n      _PDFJS = true ? window.PDFJS : require('pdfjs'),\n      _tr = function _tr(s) {\n    return (window.iberezansky || {}).tr && window.iberezansky.tr(s) || s;\n  };\n\n  exports.$ = _$;\n  exports.html2canvas = _html2canvas;\n  exports.THREE = _THREE;\n  exports.React = _React;\n  exports.ReactDOM = _ReactDOM;\n  exports.PDFJS = _PDFJS;\n  exports.tr = _tr;\n\n  /***/\n},\n/* 1 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _$ = true ? window.jQuery : require('jquery'),\n      _html2canvas = true ? window.html2canvas : require('html2canvas'),\n      _THREE = true ? window.THREE : require('three'),\n      _PDFJS = true ? window.PDFJS : require('pdfjs'),\n      _tr = function _tr(s) {\n    return (window.iberezansky || {}).tr && window.iberezansky.tr(s) || s;\n  };\n\n  if (window.FB3D_LOCALE) {\n    window.iberezansky = _extends({}, window.iberezansky, {\n      tr: function tr(s) {\n        return (FB3D_LOCALE.dictionary || {})[s] || s;\n      }\n    });\n  }\n\n  exports.$ = _$;\n  exports.html2canvas = _html2canvas;\n  exports.THREE = _THREE;\n  exports.PDFJS = _PDFJS;\n  exports.tr = _tr;\n\n  /***/\n},\n/* 2 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var BaseMathUtils = function () {\n    function BaseMathUtils() {\n      _classCallCheck(this, BaseMathUtils);\n    }\n\n    BaseMathUtils.sum1 = function sum1(ka, a, kb, b) {\n      return [ka * a[0] + kb * b[0]];\n    };\n\n    BaseMathUtils.sum2 = function sum2(ka, a, kb, b) {\n      return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1]];\n    };\n\n    BaseMathUtils.sum3 = function sum3(ka, a, kb, b) {\n      return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1], ka * a[2] + kb * b[2]];\n    };\n\n    BaseMathUtils.sum4 = function sum4(ka, a, kb, b) {\n      return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1], ka * a[2] + kb * b[2], ka * a[3] + kb * b[3]];\n    };\n\n    BaseMathUtils.rk4 = function rk4(dy, t, dt, y) {\n      var sum = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : BaseMathUtils.sum[y.length - 1];\n\n      var k1 = dy(t, y),\n          k2 = dy(t + dt / 2, sum(1, y, dt / 2, k1)),\n          k3 = dy(t + dt / 2, sum(1, y, dt / 2, k2)),\n          k4 = dy(t + dt, sum(1, y, dt, k3));\n      return sum(1, y, dt / 6, sum(1, sum(1, k1, 2, k2), 1, sum(2, k3, 1, k4)));\n    };\n\n    BaseMathUtils.extrapolateLinear = function extrapolateLinear(x, y, xi) {\n      return y[0] + (y[1] - y[0]) / (x[1] - x[0]) * (xi - x[0]);\n    };\n\n    BaseMathUtils.interpolateLinear = function interpolateLinear(x, y, xi) {\n      var yi = void 0;\n      if (x[0] > x[1]) {\n        x = x.reverse();\n        y = y.reverse();\n      }\n      if (xi < x[0]) {\n        yi = y[0];\n      } else if (xi > x[1]) {\n        yi = y[1];\n      } else {\n        yi = BaseMathUtils.extrapolateLinear(x, y, xi);\n      }\n      return yi;\n    };\n\n    BaseMathUtils.calcScale = function calcScale(srcW, srcH, dstW, dstH) {\n      return Math.min(dstW / srcW, dstH / srcH);\n    };\n\n    BaseMathUtils.mulM = function mulM(a, b) {\n      var r = [];\n      for (var i = 0; i < a.length; ++i) {\n        r.push([]);\n        for (var j = 0; j < b[0].length; ++j) {\n          r[i][j] = 0;\n          for (var k = 0; k < b.length; ++k) {\n            r[i][j] += a[i][k] * b[k][j];\n          }\n        }\n      }\n      return r;\n    };\n\n    BaseMathUtils.transM = function transM(m) {\n      var r = [];\n      for (var i = 0; i < m.length; ++i) {\n        for (var j = 0; j < m[0].length; ++j) {\n          if (!r[j]) {\n            r[j] = [];\n          }\n          r[j][i] = m[i][j];\n        }\n      }\n      return r;\n    };\n\n    BaseMathUtils.mat = function mat(data) {\n      var s = 0;\n      for (var _iterator = data, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var x = _ref;\n\n        s += x;\n      }\n      return s / data.length;\n    };\n\n    BaseMathUtils.disp = function disp(data) {\n      var M = BaseMathUtils.mat(data);\n      var s = 0;\n      for (var _iterator2 = data, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var x = _ref2;\n\n        s += (x - M) * (x - M);\n      }\n      return s / data.length;\n    };\n\n    BaseMathUtils.predict = function predict(data, num) {\n      var r = [],\n          l = data.length,\n          D = BaseMathUtils.disp(data);\n      if (D < l && l > 1) {\n        var am = [],\n            bm = [];\n        for (var i = 0; i < l; ++i) {\n          am.push([i, 1]);\n          bm.push([data[i]]);\n        }\n        var ta = BaseMathUtils.transM(am),\n            a = BaseMathUtils.mulM(ta, am),\n            b = BaseMathUtils.mulM(ta, bm),\n            d = a[0][0] * a[1][1] - a[1][0] * a[0][1],\n            p = [-(a[0][1] * b[1][0] - b[0][0] * a[1][1]) / d, (a[0][0] * b[1][0] - a[1][0] * b[0][0]) / d];\n        for (var _i3 = 0; _i3 < num; ++_i3) {\n          var v = Math.round(p[0] * (_i3 + l) + p[1]);\n          if (r.indexOf(v) === -1) {\n            r.push(v);\n          }\n        }\n      }\n      return r;\n    };\n\n    BaseMathUtils.getUnique = function getUnique() {\n      return Math.ceil(1e9 * Math.random());\n    };\n\n    BaseMathUtils.setSplinePoints = function setSplinePoints(spline, ps) {\n      if (spline.points.length !== ps.x.length) {\n        console.warn('setSplinePoints: bad points');\n      }\n      for (var i = 0; i < spline.points.length; ++i) {\n        spline.points[i].set(ps.x[i], ps.y[i], ps.z ? ps.z[i] : 0);\n      }\n    };\n\n    BaseMathUtils.mapl2L = function mapl2L(ls, len, n, f) {\n      var dL = len / (n - 1);\n      var L = 0;\n      for (var i = 0, d = ls[0]; i < ls.length - 1 && L < len + 0.1 * dL; ++i, d += ls[i]) {\n        if (Math.abs(L - d) < Math.abs(L - d - ls[i + 1])) {\n          f(i, L);\n          L += dL;\n        }\n      }\n      if (L < len + 0.1 * dL) {\n        console.warn('mapl2L: ls is not enought');\n      }\n    };\n\n    BaseMathUtils.det2 = function det2(a, b, c, d) {\n      return a * d - b * c;\n    };\n\n    BaseMathUtils.solve2Lin = function solve2Lin(a1, b1, a2, b2) {\n      var res = void 0;\n      var d = BaseMathUtils.det2(a1[0], a1[1], a2[0], a2[1]);\n      if (Math.abs(d) > BaseMathUtils.eps) {\n        var dx = BaseMathUtils.det2(b1, a1[1], b2, a2[1]),\n            dy = BaseMathUtils.det2(a1[0], b1, a2[0], b2);\n        res = {\n          x: dx / d,\n          y: dy / d\n        };\n      }\n      return res;\n    };\n\n    BaseMathUtils.isInsidePoly = function isInsidePoly(ps, p) {\n      var done = false,\n          ct = void 0;\n      for (var i = 0; i < ps.length; ++i) {\n        if (BaseMathUtils.v2dist(p, ps[i]) < BaseMathUtils.eps) {\n          ct = 1;\n          done = true;\n          break;\n        }\n      }\n      while (!done) {\n        done = true;\n        ct = 0;\n        var np = { x: p.x + Math.random() - 0.5, y: p.y + Math.random() - 0.5 },\n            rn = { x: np.x - p.x, y: np.y - p.y },\n            a1 = [rn.y, -rn.x],\n            b1 = p.x * rn.y - p.y * rn.x;\n        for (var _i4 = 0; _i4 < ps.length; ++_i4) {\n          var p0 = ps[_i4],\n              p1 = ps[(_i4 + 1) % ps.length],\n              n = { x: p1.x - p0.x, y: p1.y - p0.y },\n              a2 = [n.y, -n.x],\n              b2 = p0.x * n.y - p0.y * n.x,\n              ip = BaseMathUtils.solve2Lin(a1, b1, a2, b2);\n          if (ip) {\n            if (BaseMathUtils.v2dist(ip, p0) < BaseMathUtils.eps || BaseMathUtils.v2dist(ip, p1) < BaseMathUtils.eps) {\n              done = false;\n              break;\n            } else if (ip.x > Math.min(p0.x, p1.x) - BaseMathUtils.eps && ip.x < Math.max(p0.x, p1.x) + BaseMathUtils.eps && ip.y > Math.min(p0.y, p1.y) - BaseMathUtils.eps && ip.y < Math.max(p0.y, p1.y) + BaseMathUtils.eps) {\n              if (BaseMathUtils.v2dist(ip, p) < BaseMathUtils.eps) {\n                ct = 1;\n                break;\n              } else {\n                var tn = { x: ip.x - p.x, y: ip.y - p.y };\n                ct += tn.x * rn.x + tn.y * rn.y > 0;\n              }\n            }\n          }\n        }\n      }\n      return ct % 2;\n    };\n\n    BaseMathUtils.isInsideConvPoly = function isInsideConvPoly(ps, p) {\n      var sg = [0, 0];\n      for (var i = 0; i < ps.length; ++i) {\n        var p0 = ps[i],\n            p1 = ps[(i + 1) % ps.length],\n            a = { x: p0.x - p.x, y: p0.y - p.y },\n            b = { x: p1.x - p.x, y: p1.y - p.y };\n        ++sg[(a.x * b.y - a.y * b.x < 0) + 0];\n      }\n      return ~sg.indexOf(ps.length);\n    };\n\n    BaseMathUtils.v2len = function v2len(v2) {\n      return Math.sqrt(v2.x * v2.x + v2.y * v2.y);\n    };\n\n    BaseMathUtils.v2dist = function v2dist(v21, v22) {\n      return BaseMathUtils.v2len({\n        x: v22.x - v21.x,\n        y: v22.y - v21.y\n      });\n    };\n\n    BaseMathUtils.computeSquare = function computeSquare(ps) {\n      var a = [];\n      var p = 0;\n      for (var i = 0; i < ps.length; ++i) {\n        a.push(BaseMathUtils.v2dist(ps[i], ps[(i + 1) % ps.length]));\n        p += 0.5 * a[i];\n      }\n      return Math.sqrt(p * (p - a[0]) * (p - a[1]) * (p - a[2]));\n    };\n\n    BaseMathUtils.computeInterpCoefs = function computeInterpCoefs(tri, p) {\n      var s = BaseMathUtils.computeSquare(tri),\n          coefs = [],\n          l = tri.length;\n      for (var i = 0; i < l; ++i) {\n        coefs[i] = BaseMathUtils.computeSquare([p, tri[(i + 1) % l], tri[(i + 2) % l]]) / s;\n      }\n      return coefs;\n    };\n\n    return BaseMathUtils;\n  }();\n\n  BaseMathUtils.sum = [BaseMathUtils.sum1, BaseMathUtils.sum2, BaseMathUtils.sum3, BaseMathUtils.sum4];\n  BaseMathUtils.eps = 1e-4;\n  exports.default = BaseMathUtils;\n\n  /***/\n},\n/* 3 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _BaseMathUtils2 = __webpack_require__(2);\n\n  var _BaseMathUtils3 = _interopRequireDefault(_BaseMathUtils2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var MathUtils = function (_BaseMathUtils) {\n    _inherits(MathUtils, _BaseMathUtils);\n\n    function MathUtils() {\n      _classCallCheck(this, MathUtils);\n\n      return _possibleConstructorReturn(this, _BaseMathUtils.apply(this, arguments));\n    }\n\n    MathUtils.splitSpline = function splitSpline(spline, N) {\n      var o = { len: 0, ls: [0] },\n          dl = 1 / N;\n      for (var i = 0; i <= N; ++i) {\n        var p = spline.getPoint(i * dl);\n        if (i) {\n          var d = MathUtils.v1.distanceTo(p);\n          o.len += d;\n          o.ls.push(d);\n        }\n        MathUtils.v1.copy(p);\n      }\n      return o;\n    };\n\n    MathUtils.getLinearIndeces = function getLinearIndeces(spline, n) {\n      var del = 5000,\n          dDel = 1 / del;\n      var ls = [0];\n      var l = 0;\n      for (var i = 0; i <= del; ++i) {\n        var p = spline.getPoint(i * dDel);\n        if (i) {\n          var d = MathUtils.v1.distanceTo(p);\n          l += d;\n          ls.push(d);\n        }\n        MathUtils.v1.copy(p);\n      }\n      ls.push(1e7);\n\n      var res = [],\n          dl = l / (n - 1);\n      for (var _i = 0, L = 0, _d = ls[0]; _i < ls.length - 1; ++_i, _d += ls[_i]) {\n        if (Math.abs(L - _d) < Math.abs(L - _d - ls[_i + 1])) {\n          res.push(_i * dDel);\n          L += dl;\n        }\n      }\n\n      return res;\n    };\n\n    MathUtils.refinePoly = function refinePoly(poly, maxDl) {\n      var res = [];\n      for (var i = 0; i < poly.length; ++i) {\n        var p0 = poly[i],\n            p1 = poly[(i + 1) % poly.length],\n            l = _BaseMathUtils3.default.v2dist(p0, p1),\n            n = Math.ceil(l / maxDl),\n            dl = l / n;\n        res.push(p0);\n        for (var j = 1; j < n; ++j) {\n          res.push(new _libs.THREE.Vector2(p0.x + j * dl * (p1.x - p0.x) / l, p0.y + j * dl * (p1.y - p0.y) / l));\n        }\n      }\n      return res;\n    };\n\n    return MathUtils;\n  }(_BaseMathUtils3.default);\n\n  MathUtils.v1 = new _libs.THREE.Vector3();\n  exports.default = MathUtils;\n\n  /***/\n},\n/* 4 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Utils = function () {\n    function Utils() {\n      _classCallCheck(this, Utils);\n    }\n\n    Utils.normalizeUrl = function normalizeUrl(url) {\n      function split(s) {\n        return s.replace(/\\\\/g, '/').split('/');\n      }\n      var base = split(window.location.href);\n      url = split(url);\n      if (base[2] === url[2]) {\n        url[0] = base[0];\n      }\n      return url.join('/');\n    };\n\n    Utils.extends = function _extends(der, base) {\n      for (var name in base) {\n        if (!der.hasOwnProperty(name)) {\n          der[name] = base[name];\n        }\n      }\n    };\n\n    Utils.defaultCmp = function defaultCmp(a, b) {\n      return a - b;\n    };\n\n    Utils.lowerBound = function lowerBound(a, x, cmp) {\n      cmp = cmp || Utils.defaultCmp;\n      var l = 0,\n          h = a.length - 1;\n      while (h - l > 1) {\n        var mid = Math.floor((l + h) / 2);\n        if (cmp(x, a[mid]) < 0) {\n          h = mid;\n        } else {\n          l = mid;\n        }\n      }\n      return cmp(x, a[h]) >= 0 ? h : l;\n    };\n\n    return Utils;\n  }();\n\n  exports.default = Utils;\n\n  /***/\n},\n/* 5 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _GraphUtils = __webpack_require__(7);\n\n  var _GraphUtils2 = _interopRequireDefault(_GraphUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var ImageBase = function () {\n    function ImageBase(context, width, height, color) {\n      _classCallCheck(this, ImageBase);\n\n      this.context = context;\n      this.wnd = context.wnd;\n      this.doc = context.doc;\n      this.element = context.element || context.doc.body;\n      this.c = context.renderCanvas || ImageBase.renderCanvas;\n      this.ctx = context.renderCanvasCtx || ImageBase.renderCanvasCtx;\n      this.resW = this.width = width;\n      this.resH = this.height = height;\n      this.color = color;\n    }\n\n    ImageBase.prototype.setResolution = function setResolution(res) {\n      this.resW = res.width;\n      this.resH = res.height;\n    };\n\n    ImageBase.prototype.dispose = function dispose() {};\n\n    ImageBase.prototype.renderBlankPage = function renderBlankPage() {\n      this.ctx.beginPath();\n      this.ctx.fillStyle = _GraphUtils2.default.color2Rgba(this.color, 1);\n      this.ctx.rect(0, 0, this.c.width, this.c.height);\n      this.ctx.fill();\n    };\n\n    ImageBase.prototype.renderImage = function renderImage(image) {\n      this.pushCtx();\n      this.ctx.drawImage(image, 0, 0);\n      this.popCtx();\n    };\n\n    ImageBase.prototype.normToConv = function normToConv(p) {\n      return {\n        x: p.x * this.c.width,\n        y: (1 - p.y) * this.c.height\n      };\n    };\n\n    ImageBase.prototype.renderHit = function renderHit(poly) {\n      var ctx = this.ctx;\n      ctx.fillStyle = 'rgba(255,255,0,0.4)';\n      ctx.beginPath();\n      var p = this.normToConv(poly[0]);\n      ctx.moveTo(p.x, p.y);\n      for (var i = 1; i < poly.length; ++i) {\n        p = this.normToConv(poly[i]);\n        ctx.lineTo(p.x, p.y);\n      }\n      ctx.closePath();\n      ctx.fill();\n    };\n\n    ImageBase.prototype.pushCtx = function pushCtx() {\n      if (this.resW != this.c.width) {\n        this.c.width = this.resW;\n      }\n      if (this.resH != this.c.height) {\n        this.c.height = this.resH;\n      }\n      this.ctx.save();\n      this.ctx.scale(this.c.width / this.width, this.c.height / this.height);\n      return this.ctx;\n    };\n\n    ImageBase.prototype.popCtx = function popCtx() {\n      this.ctx.restore();\n    };\n\n    ImageBase.prototype.renderNotFoundPage = function renderNotFoundPage() {\n      this.renderBlankPage();\n    };\n\n    ImageBase.prototype.finishRender = function finishRender() {\n      if (this.onChange) {\n        this.onChange(this.c);\n      }\n    };\n\n    ImageBase.prototype.finishLoad = function finishLoad() {\n      if (this.onLoad) {\n        this.onLoad();\n      } else {\n        this.startRender();\n      }\n    };\n\n    ImageBase.prototype.getSimulatedDoc = function getSimulatedDoc() {\n      return undefined;\n    };\n\n    return ImageBase;\n  }();\n\n  ImageBase.renderCanvas = (0, _libs.$)('<canvas>')[0];\n  ImageBase.renderCanvasCtx = ImageBase.renderCanvas.getContext('2d');\n  exports.default = ImageBase;\n\n  /***/\n},\n/* 6 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var EventConverter = function () {\n\n    // virtuals\n    // getObject(e, data);\n    // getCallback(object);\n    // test(object1, object1);\n\n    function EventConverter(wnd, doc) {\n      _classCallCheck(this, EventConverter);\n\n      this.wnd = wnd;\n      this.doc = doc;\n      this.enabled = true;\n    }\n\n    EventConverter.prototype.setEnable = function setEnable(vl) {\n      if (!vl) {\n        if (this.mCapObject) {\n          this.notify(this.mCapObject, _libs.$.Event('mouseup'), 'mouseup');\n          this.mCapObject = undefined;\n        }\n        if (this.mHovObject) {\n          this.notify(this.mHovObject, _libs.$.Event('mouseout'), 'mouseout');\n          this.mHovObject = undefined;\n        }\n      }\n      this.enabled = vl;\n    };\n\n    EventConverter.prototype.getCallback = function getCallback(object) {\n      return undefined;\n    };\n\n    EventConverter.prototype.notify = function notify(object, e, type) {\n      var callback = this.getCallback(object);\n      if (callback) {\n        var props = _extends({}, e, {\n          type: type,\n          view: this.wnd\n        });\n        var jE = _libs.$.Event(type, props);\n        callback(jE, object);\n      }\n    };\n\n    EventConverter.prototype.convert = function convert(e, data) {\n      if (!this.enabled) return;\n\n      if (this.filter) {\n        e = this.filter(this.element, e);\n      }\n\n      var object = this.getObject(e, data),\n          notify = ~e.type.indexOf('touch') ? this.convertTouch(e, data, object) : this.convertMouse(e, data, object);\n      if (notify && object) {\n        this.notify(object, e, e.type);\n      }\n    };\n\n    EventConverter.prototype.convertTouch = function convertTouch(e, data, object) {\n      var notify = true;\n      switch (e.type) {\n        case 'touchstart':\n          {\n            if (this.tCapObject) {\n              this.notify(this.tCapObject, e, 'touchend');\n            }\n            this.tCapObject = object;\n            break;\n          }\n        case 'touchend':\n          {\n            if (this.tCapObject && !this.test(this.tCapObject, object)) {\n              this.notify(this.tCapObject, e, 'touchend');\n              notify = false;\n            } else if (object && this.test(this.tCapObject, object)) {\n              this.notify(object, e, 'touchtap');\n            }\n            this.tCapObject = undefined;\n            break;\n          }\n        case 'touchtap':\n          {\n            notify = false;\n            break;\n          }\n      }\n      return notify;\n    };\n\n    EventConverter.prototype.convertMouse = function convertMouse(e, data, object) {\n      var notify = true;\n      switch (e.type) {\n        case 'mousedown':\n          {\n            if (this.mCapObject) {\n              this.notify(this.mCapObject, e, 'mouseup');\n            }\n            this.mCapObject = object;\n            break;\n          }\n        case 'mouseup':\n          {\n            if (this.mCapObject && !this.test(this.mCapObject, object)) {\n              this.notify(this.mCapObject, e, 'mouseup');\n              notify = false;\n            }\n            break;\n          }\n        case 'click':\n          {\n            notify = this.test(this.mCapObject, object);\n            this.mCapObject = undefined;\n            break;\n          }\n        case 'mouseenter':\n        case 'mouseover':\n        case 'mousemove':\n          {\n            if (!this.test(this.mHovObject, object) && this.mHovObject) {\n              this.notify(this.mHovObject, e, 'mouseout');\n              this.mHovObject = undefined;\n            }\n            if (!this.mHovObject && object) {\n              this.notify(object, e, 'mouseover');\n              this.mHovObject = object;\n            }\n            notify = e.type === 'mousemove';\n            break;\n          }\n        case 'mouseleave':\n        case 'mouseout':\n          {\n            if (this.mHovObject) {\n              this.notify(this.mHovObject, e, 'mouseout');\n              this.mHovObject = undefined;\n            }\n            notify = false;\n            break;\n          }\n      }\n      return notify;\n    };\n\n    return EventConverter;\n  }();\n\n  exports.default = EventConverter;\n\n  /***/\n},\n/* 7 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var GraphUtils = function () {\n    function GraphUtils() {\n      _classCallCheck(this, GraphUtils);\n    }\n\n    GraphUtils.extrapolateLinear = function extrapolateLinear(x, y, xi) {\n      return y[0] + (y[1] - y[0]) / (x[1] - x[0]) * (xi - x[0]);\n    };\n\n    GraphUtils.interpolate01 = function interpolate01(y1, y2, t) {\n      return GraphUtils.extrapolateLinear([0, 1], [y1, y2], t);\n    };\n\n    GraphUtils.getColorBytes = function getColorBytes(color) {\n      return [color >> 16 & 0xFF, color >> 8 & 0xFF, color & 0xFF];\n    };\n\n    GraphUtils.inverseColor = function inverseColor(color) {\n      var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n      var bs = GraphUtils.getColorBytes(color),\n          ibs = [0xFF - bs[0], 0xFF - bs[1], 0xFF - bs[2]],\n          nbs = [Math.round(GraphUtils.interpolate01(bs[0], ibs[0], t)), Math.round(GraphUtils.interpolate01(bs[1], ibs[1], t)), Math.round(GraphUtils.interpolate01(bs[2], ibs[2], t))];\n      return GraphUtils.bytes2Color(nbs);\n    };\n\n    GraphUtils.color2Rgba = function color2Rgba(color, a) {\n      return GraphUtils.bytes2Rgba(GraphUtils.getColorBytes(color), a);\n    };\n\n    GraphUtils.bytes2Rgba = function bytes2Rgba(bs, a) {\n      return 'rgba(' + bs.join(',') + ',' + a + ')';\n    };\n\n    GraphUtils.bytes2Color = function bytes2Color(bs) {\n      return bs[2] | bs[1] << 8 | bs[0] << 16;\n    };\n\n    return GraphUtils;\n  }();\n\n  exports.default = GraphUtils;\n\n  /***/\n},\n/* 8 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _Cache = __webpack_require__(14);\n\n  var _Cache2 = _interopRequireDefault(_Cache);\n\n  var _BlankImage = __webpack_require__(43);\n\n  var _BlankImage2 = _interopRequireDefault(_BlankImage);\n\n  var _StaticImage = __webpack_require__(59);\n\n  var _StaticImage2 = _interopRequireDefault(_StaticImage);\n\n  var _PdfImage = __webpack_require__(57);\n\n  var _PdfImage2 = _interopRequireDefault(_PdfImage);\n\n  var _InteractiveImage = __webpack_require__(51);\n\n  var _InteractiveImage2 = _interopRequireDefault(_InteractiveImage);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var ImageFactory = function () {\n    function ImageFactory(context, cache) {\n      _classCallCheck(this, ImageFactory);\n\n      this.context = context;\n      this.cache = cache || new _Cache2.default();\n    }\n\n    ImageFactory.prototype.build = function build(info) {\n      var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      var widthTexels = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 210;\n      var heightTexels = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 297;\n      var color = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0xFFFFFF;\n      var injector = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;\n\n      var image = void 0;\n      switch (info.type) {\n        case 'html':\n          {\n            image = new _InteractiveImage2.default(this.context, widthTexels, heightTexels, color, info.src, this.cache, injector);\n            break;\n          }\n        case 'image':\n          {\n            image = new _StaticImage2.default(this.context, widthTexels, heightTexels, color, info.src);\n            break;\n          }\n        case 'pdf':\n          {\n            image = new _PdfImage2.default(this.context, widthTexels, heightTexels, color, info.src, n);\n            break;\n          }\n        case 'blank':\n        default:\n          {\n            image = new _BlankImage2.default(this.context, widthTexels, heightTexels, color);\n            break;\n          }\n      }\n      return image;\n    };\n\n    return ImageFactory;\n  }();\n\n  exports.default = ImageFactory;\n\n  /***/\n},\n/* 9 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _book = __webpack_require__(11);\n\n  var _BaseMathUtils = __webpack_require__(2);\n\n  var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var BookPropsBuilder = function () {\n    function BookPropsBuilder(onReady) {\n      _classCallCheck(this, BookPropsBuilder);\n\n      this.onReady = onReady;\n      this.defaults = (0, _book.props)();\n    }\n\n    BookPropsBuilder.prototype.dispose = function dispose() {};\n\n    BookPropsBuilder.prototype.calcSize = function calcSize(width, height) {\n      var scale = _BaseMathUtils2.default.calcScale(width, height, this.defaults.width, this.defaults.height);\n      return {\n        width: scale * width,\n        height: scale * height\n      };\n    };\n\n    BookPropsBuilder.prototype.calcTexels = function calcTexels(width, height) {\n      var sheet = this.defaults.sheet,\n          scale = _BaseMathUtils2.default.calcScale(width, height, sheet.widthTexels, sheet.heightTexels);\n      return {\n        widthTexels: scale * width,\n        heightTexels: scale * height\n      };\n    };\n\n    BookPropsBuilder.prototype.calcProps = function calcProps(width, height) {\n      this.props = _extends({}, this.defaults, this.calcSize(width, height), {\n        sheet: _extends({}, this.defaults.sheet, this.calcTexels(width, height)),\n        cover: _extends({}, this.defaults.cover),\n        page: _extends({}, this.defaults.page)\n      });\n    };\n\n    BookPropsBuilder.prototype.calcSheets = function calcSheets(pages) {\n      return this.sheets = Math.ceil(Math.max(0, pages - 4) / 2);\n    };\n\n    BookPropsBuilder.prototype.getSheets = function getSheets() {\n      return this.sheets;\n    };\n\n    BookPropsBuilder.prototype.getProps = function getProps() {\n      return this.props;\n    };\n\n    BookPropsBuilder.prototype.getPageCallback = function getPageCallback() {\n      return this.binds.pageCallback;\n    };\n\n    BookPropsBuilder.prototype.ready = function ready() {\n      if (this.onReady) {\n        this.onReady(this.getProps(), this.getSheets(), this.getPageCallback());\n      }\n    };\n\n    return BookPropsBuilder;\n  }();\n\n  exports.default = BookPropsBuilder;\n\n  /***/\n},\n/* 10 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n    return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n  };\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(1);\n\n  var _sheetBlock = __webpack_require__(41);\n\n  var _sheetBlock2 = _interopRequireDefault(_sheetBlock);\n\n  var _MathUtils = __webpack_require__(3);\n\n  var _MathUtils2 = _interopRequireDefault(_MathUtils);\n\n  var _ThreeUtils = __webpack_require__(20);\n\n  var _ThreeUtils2 = _interopRequireDefault(_ThreeUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  // import ThreeMarkup from './ThreeMarkup';\n\n  var SheetBlock = function () {\n    function SheetBlock(visual, p, first, last) {\n      var angle = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n      var _this = this;\n\n      var state = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'closed';\n      var height = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n\n      _classCallCheck(this, SheetBlock);\n\n      this.visual = visual;\n      this.p = _extends({}, p, {\n        first: first,\n        last: last\n      });\n      var props = this.getProps();\n\n      var loadedPoints = this.loadPoints();\n      Object.keys(loadedPoints).map(function (k) {\n        _this[k] = loadedPoints[k][props.shape] || loadedPoints[k][0];\n      });\n\n      this.pSpline = new _libs.THREE.Spline([]);\n      for (var i = 0; i < this.interpolationPoints.x[0].length; ++i) {\n        this.pSpline.points.push(new _libs.THREE.Vector3());\n      }\n\n      this.iSpline = new _libs.THREE.Spline([]);\n      for (var _i = 0; _i < _sheetBlock2.default.resX; ++_i) {\n        this.iSpline.points.push(new _libs.THREE.Vector3());\n      }\n\n      this.aSplines = [];\n\n      //this.three = new THREE.Object3D();\n\n      this.geometry = _sheetBlock2.default.geometry.clone();\n\n      this.p.sideFaces = [{\n        first: 0,\n        last: _sheetBlock2.default.faces[0]\n      }, {\n        first: _sheetBlock2.default.faces[0],\n        last: _sheetBlock2.default.faces[1]\n      }];\n\n      this.sideTexture = new _libs.THREE.Texture();\n      this.sideTexture.wrapT = _libs.THREE.RepeatWrapping;\n      this.sideTexture.repeat.set(0, last - first);\n      this.sideTexture.image = props.sideTexture;\n      this.sideTexture.needsUpdate = true;\n\n      this.materials = [new _libs.THREE.MeshPhongMaterial(), new _libs.THREE.MeshPhongMaterial(), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture })];\n\n      this.p.setTexture(this.materials[0], 2 * first);\n      this.p.setTexture(this.materials[1], 2 * last - 1);\n\n      this.mesh = new _libs.THREE.Mesh(this.geometry, new _libs.THREE.MeshFaceMaterial(this.materials));\n      this.mesh.castShadow = false;\n      this.mesh.receiveShadow = false;\n      // this.mesh.frustumCulled = true;\n\n      //this.three.add(this.mesh);\n      this.three = this.mesh;\n      this.three.userData.self = this;\n\n      this.markers = [];\n      if (this.p.marker.use) {\n        var l = this.geometry.vertices.length;\n        var is = void 0;\n        // is = [0, sheetBlock.resX-1, (sheetBlock.resZ-1)*sheetBlock.resX, sheetBlock.resZ*sheetBlock.resX-1];\n        is = Array.apply(0, Array(l)).map(function (_, i) {\n          return i;\n        });\n\n        for (var _iterator = is, _isArray = Array.isArray(_iterator), _i2 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i2 >= _iterator.length) break;\n            _ref = _iterator[_i2++];\n          } else {\n            _i2 = _iterator.next();\n            if (_i2.done) break;\n            _ref = _i2.value;\n          }\n\n          var _i3 = _ref;\n\n          var marker = _ThreeUtils2.default.createMarker(this.geometry.vertices[_i3], _i3 < l / 2 ? 0xFF0000 : 0x00FF00, this.p.marker.size);\n          this.markers.push({\n            marker: marker,\n            vertex: _i3\n          });\n          this.three.add(marker);\n        }\n      }\n\n      this.corner = {\n        use: true,\n        height: 0,\n        maxDistance: 0,\n        points: [],\n        OZ: new _libs.THREE.Vector3(0, 0, 1),\n        axis: new _libs.THREE.Vector3()\n      };\n      this.set(0, 'closed', height, first, last); // calculate corner points\n\n      this.set(angle, state, height, first, last); // init position\n\n      // if(!SheetBlock.markup) {\n      //   SheetBlock.markup=true;\n      //   this.markup = new ThreeMarkup(this, 0, [{\n      //     x: 0,\n      //     y: 0,\n      //   }, {\n      //     x: 0.5,\n      //     y: 1\n      //   }, {\n      //     x: 1,\n      //     y: 0\n      //   }].map((p)=>new THREE.Vector2(p.x, p.y)), {});\n      // }\n    }\n\n    SheetBlock.prototype.dispose = function dispose() {\n      for (var _iterator2 = this.materials, _isArray2 = Array.isArray(_iterator2), _i4 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i4 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i4++];\n        } else {\n          _i4 = _iterator2.next();\n          if (_i4.done) break;\n          _ref2 = _i4.value;\n        }\n\n        var m = _ref2;\n\n        if (m.map) {\n          m.map = null;\n          m.needsUpdate = true;\n        }\n        m.dispose();\n      }\n      delete this.materials;\n      this.geometry.dispose();\n    };\n\n    SheetBlock.prototype.getSize = function getSize() {\n      return this.p.last - this.p.first;\n    };\n\n    SheetBlock.prototype.getProps = function getProps() {\n      return _extends({}, this.p.page, {\n        sheets: this.p.sheets\n      });\n    };\n\n    SheetBlock.prototype.getTopCerners = function getTopCerners() {\n      var off = this.angle > Math.PI / 2 ? this.geometry.vertices.length / 2 : 0;\n      return [this.geometry.vertices[off], this.geometry.vertices[_sheetBlock2.default.resX - 1 + off], this.geometry.vertices[(_sheetBlock2.default.resZ - 1) * _sheetBlock2.default.resX + off], this.geometry.vertices[_sheetBlock2.default.resZ * _sheetBlock2.default.resX - 1 + off]];\n    };\n\n    SheetBlock.prototype.getTopSize = function getTopSize() {\n      // const l=this.geometry.vertices.length, off = this.angle>Math.PI/2? l/2: 0,\n      //   v0 = this.geometry.vertices[off], v1 = this.geometry.vertices[sheetBlock.resZ*sheetBlock.resX-1+off];\n      // // is = [0, sheetBlock.resX-1, (sheetBlock.resZ-1)*sheetBlock.resX, sheetBlock.resZ*sheetBlock.resX-1];\n      // return {\n      //   width: Math.abs(v1.x-v0.x),\n      //   height: Math.abs(v1.z-v0.z)\n      // };\n      var vs = this.getTopCerners();\n      return {\n        width: vs[0].distanceTo(vs[1]),\n        height: vs[0].distanceTo(vs[2])\n      };\n    };\n\n    SheetBlock.prototype.getTopWorldRotation = function getTopWorldRotation(q) {\n      q.x = -Math.PI / 2;\n      return q;\n    };\n\n    SheetBlock.prototype.getTopWorldPosition = function getTopWorldPosition(v) {\n      var l = this.geometry.vertices.length,\n          off = this.angle > Math.PI / 2 ? l / 2 : 0,\n          vs = [this.geometry.vertices[off], this.geometry.vertices[_sheetBlock2.default.resX - 1 + off], this.geometry.vertices[(_sheetBlock2.default.resZ - 1) * _sheetBlock2.default.resX + off], this.geometry.vertices[_sheetBlock2.default.resZ * _sheetBlock2.default.resX - 1 + off]];\n      v.set(0, 0, 0);\n      for (var _iterator3 = vs, _isArray3 = Array.isArray(_iterator3), _i5 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i5 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i5++];\n        } else {\n          _i5 = _iterator3.next();\n          if (_i5.done) break;\n          _ref3 = _i5.value;\n        }\n\n        var vi = _ref3;\n\n        v.x += 0.25 * vi.x;\n        v.y += 0.25 * vi.y;\n        v.z += 0.25 * vi.z;\n      }\n      this.three.localToWorld(v);\n      return v;\n    };\n\n    SheetBlock.prototype.getInterpolationPoints = function getInterpolationPoints(inds, mod) {\n      var ps = { x: [], y: [] },\n          K = this.getProps().wave;\n      for (var _iterator4 = inds, _isArray4 = Array.isArray(_iterator4), _i6 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i6 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i6++];\n        } else {\n          _i6 = _iterator4.next();\n          if (_i6.done) break;\n          _ref4 = _i6.value;\n        }\n\n        var i = _ref4;\n\n        ps.x.push([].concat(this.interpolationPoints.x[i]));\n        ps.y.push(~mod.indexOf(i) ? this.interpolationPoints.y[i].map(function (n) {\n          return K * n;\n        }) : [].concat(this.interpolationPoints.y[i]));\n      }\n      return ps;\n    };\n\n    SheetBlock.prototype.set = function set(angle) {\n      var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n      var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.corner.height;\n      var first = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.p.first;\n      var last = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.p.last;\n\n      var PI = Math.PI;\n      this.state = state;\n      var closedAngle = void 0,\n          binderTurn = void 0;\n      if ((typeof angle === 'undefined' ? 'undefined' : _typeof(angle)) === 'object') {\n        this.angle = angle.openedAngle;\n        closedAngle = angle.closedAngle;\n        binderTurn = angle.binderTurn > PI / 2 ? PI - angle.binderTurn : angle.binderTurn;\n      } else {\n        this.angle = angle;\n      }\n      this.corner.height = height;\n      if (this.p.first !== first || this.p.last !== last) {\n        this.sideTexture.repeat.set(0, last - first);\n        this.sideTexture.needsUpdate = true;\n        if (this.p.first !== first) {\n          this.p.setTexture(this.materials[0], 2 * first);\n        }\n        if (this.p.last !== last) {\n          this.p.setTexture(this.materials[1], 2 * last - 1);\n        }\n      }\n      this.p.first = first;\n      this.p.last = last;\n      var points = void 0;\n      var props = this.getProps();\n      if (this.state === 'closed') {\n        points = this.getInterpolationPoints(this.closedInterpolationIndeces, this.closedInterpolationIndeces);\n      } else if (this.state === 'opened') {\n        if (closedAngle !== undefined && Math.abs(closedAngle - PI / 2) > 1e-2) {\n          points = this.getInterpolationPoints(this.flatInterpolationIndeces, []);\n          var ps = this.getPointsAtAngle(this.getInterpolationPoints(this.closedInterpolationIndeces, this.closedInterpolationIndeces), closedAngle > PI / 2 ? PI - closedAngle : closedAngle);\n          points.x = [ps.x].concat(points.x);\n          points.y = [ps.y].concat(points.y);\n          // console.log(ps);\n        } else {\n          points = this.getInterpolationPoints(this.openedInterpolationIndeces, this.closedInterpolationIndeces);\n        }\n      }\n      var hl = void 0,\n          hr = void 0,\n          offset = 0.5 * props.sheets * props.depth;\n      if (this.state === 'closed') {\n        offset -= 7e-6 * this.p.scale;\n      }\n      if (this.angle <= PI / 2) {\n        hl = (props.sheets - first) * props.depth;\n        hr = (props.sheets - last) * props.depth;\n      } else {\n        hl = first * props.depth;\n        hr = last * props.depth;\n      }\n\n      var inAngle = this.angle > PI / 2 ? PI - this.angle : this.angle,\n          hAngle = this.state === 'closed' ? inAngle : binderTurn === undefined ? PI / 2 : binderTurn;\n\n      var _getPointsAtAngleAndH = this.getPointsAtAngleAndHs(points, inAngle, hAngle, [hl / props.width, hr / props.width]),\n          left = _getPointsAtAngleAndH[0],\n          right = _getPointsAtAngleAndH[1];\n\n      if (this.angle > PI / 2) {\n        this.inverse(left);\n        this.inverse(right);\n        offset = -offset;\n      }\n      this.setPoints(left, right, offset);\n    };\n\n    SheetBlock.prototype.setPoints = function setPoints(left, right, offset) {\n      var _this2 = this;\n\n      var p = this.getProps();\n      var i = 0;\n\n      var ys = [right, left];\n      for (var y = 0; y < _sheetBlock2.default.resY; ++y) {\n        for (var z = 0; z < _sheetBlock2.default.resZ; ++z) {\n          for (var x = 0; x < _sheetBlock2.default.resX; ++x) {\n            this.geometry.vertices[i++].set(ys[y].x[x] * p.width + offset, ys[y].y[x] * p.width, z * p.height / (_sheetBlock2.default.resZ - 1) - 0.5 * p.height);\n          }\n        }\n      }\n      if (i !== this.geometry.vertices.length) {\n        console.warn('setPoints: bad mapping!');\n      }\n\n      if (this.corner.use && !this.corner.points.length) {\n        var plane = new _libs.THREE.Plane(),\n            normal = plane.normal,\n            planeOffset = (1 - this.getProps().flexibleCorner) * Math.min(p.width, p.height),\n            proj = new _libs.THREE.Vector3();\n        plane.setFromNormalAndCoplanarPoint(new _libs.THREE.Vector3(-1, 0, -1).normalize(), new _libs.THREE.Vector3(planeOffset + offset, 0, 0.5 * p.height));\n        for (var _i7 = 0, l = this.geometry.vertices.length; _i7 < l; ++_i7) {\n          plane.projectPoint(this.geometry.vertices[_i7], proj);\n          proj.sub(this.geometry.vertices[_i7]);\n          if (proj.x * normal.x + proj.y * normal.y + proj.z * normal.z > 0) {\n            var d = proj.length() / planeOffset;\n            this.corner.maxDistance = Math.max(this.corner.maxDistance, d);\n            this.corner.points.push({ vertex: _i7, distance: d });\n          }\n        }\n      }\n\n      if (this.corner.use && Math.abs(this.corner.height) > 1e-3) {\n        var d2Angle = function d2Angle(d) {\n          return p.cornerDeviation * _this2.corner.height / (1 + Math.exp(-p.bending * (d - 0.5 * _this2.corner.maxDistance)));\n        };\n        this.corner.axis.set(-1, 0, 1).normalize();\n        this.corner.axis.applyAxisAngle(this.corner.OZ, this.angle);\n        for (var _iterator5 = this.corner.points, _isArray5 = Array.isArray(_iterator5), _i8 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n          var _ref5;\n\n          if (_isArray5) {\n            if (_i8 >= _iterator5.length) break;\n            _ref5 = _iterator5[_i8++];\n          } else {\n            _i8 = _iterator5.next();\n            if (_i8.done) break;\n            _ref5 = _i8.value;\n          }\n\n          var point = _ref5;\n\n          this.geometry.vertices[point.vertex].applyAxisAngle(this.corner.axis, d2Angle(point.distance));\n        }\n      }\n\n      for (var _iterator6 = this.markers, _isArray6 = Array.isArray(_iterator6), _i9 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n        var _ref6;\n\n        if (_isArray6) {\n          if (_i9 >= _iterator6.length) break;\n          _ref6 = _iterator6[_i9++];\n        } else {\n          _i9 = _iterator6.next();\n          if (_i9.done) break;\n          _ref6 = _i9.value;\n        }\n\n        var m = _ref6;\n\n        m.marker.position.copy(this.geometry.vertices[m.vertex]);\n      }\n\n      this.geometry.computeVertexNormals();\n      //this.geometry.computeFaceNormals();\n      this.geometry.computeBoundingSphere();\n      //this.geometry.computeBoundingBox();\n      this.geometry.verticesNeedUpdate = true;\n\n      if (this.markup) {\n        this.markup.computeVertices();\n      }\n    };\n\n    SheetBlock.prototype.inverse = function inverse(ps) {\n      for (var i = 0; i < ps.x.length; ++i) {\n        ps.x[i] = -ps.x[i];\n      }\n      return ps;\n    };\n\n    SheetBlock.prototype.getPointsAtHs = function getPointsAtHs(ps, angle, hs) {\n      var _this3 = this;\n\n      var N = 1000;\n      _MathUtils2.default.setSplinePoints(this.pSpline, ps);\n      var bl = _MathUtils2.default.splitSpline(this.pSpline, N),\n          r = [];\n      {\n        var p1 = _extends({}, this.pSpline.getPoint((N - 1) / N)),\n            p2 = _extends({}, this.pSpline.getPoint(1)),\n            dp = { x: p2.x - p1.x, y: p2.y - p1.y },\n            ln = Math.sqrt(dp.x * dp.x + dp.y * dp.y),\n            sp = this.pSpline.points[this.pSpline.points.length - 1];\n        sp.set(sp.x + 0.1 * dp.x / ln, sp.y + 0.1 * dp.y / ln, 0);\n        bl = _MathUtils2.default.splitSpline(this.pSpline, N);\n      }\n      bl.ls.push(1e7);\n      _MathUtils2.default.mapl2L(bl.ls, bl.len, _sheetBlock2.default.resX, function (i) {\n        for (var j = 0; j < hs.length; ++j) {\n          if (!i) {\n            r[j] = { x: [-hs[j] * Math.sin(angle)], y: [hs[j] * Math.cos(angle)] };\n          } else {\n            var p0 = _extends({}, _this3.pSpline.getPoint((i - 1) / N)),\n                _p = _this3.pSpline.getPoint(i / N),\n                x = -(_p.y - p0.y),\n                y = _p.x - p0.x,\n                l = Math.sqrt(x * x + y * y);\n            r[j].x.push(_p.x + x / l * hs[j]);\n            r[j].y.push(_p.y + y / l * hs[j]);\n          }\n        }\n      });\n\n      var nps = [];\n\n      var _loop = function _loop(j) {\n        nps[j] = { x: [], y: [] };\n        _MathUtils2.default.setSplinePoints(_this3.iSpline, r[j]);\n        var l = _MathUtils2.default.splitSpline(_this3.iSpline, N);\n        l.ls.push(1e7);\n        _MathUtils2.default.mapl2L(l.ls, 1, _sheetBlock2.default.resX, function (i) {\n          var p = _this3.iSpline.getPoint(i / N);\n          nps[j].x.push(p.x);\n          nps[j].y.push(p.y);\n        });\n      };\n\n      for (var j = 0; j < hs.length; ++j) {\n        _loop(j);\n      }\n      return nps;\n    };\n\n    SheetBlock.prototype.getPointsAtAngleAndHs = function getPointsAtAngleAndHs(points, angle, hAngle, hs) {\n      var ps = this.getPointsAtAngle(points, angle);\n      return this.getPointsAtHs(ps, hAngle, hs);\n    };\n\n    SheetBlock.prototype.getPointsAtAngle = function getPointsAtAngle(points, angle) {\n      var ps = { x: [], y: [] },\n          angles = [];\n      angle /= Math.PI / 2;\n      for (var j = 0; j < points.x.length; ++j) {\n        angles.push(j / (points.x.length - 1));\n      }\n      for (var i = 0; i < points.x[0].length; ++i) {\n        var xps = [],\n            yps = [];\n        for (var _j = 0; _j < points.x.length; ++_j) {\n          xps.push(points.x[_j][i]);\n          yps.push(points.y[_j][i]);\n        }\n        ps.x.push(this.interpolate(angles, xps, angle));\n        ps.y.push(this.interpolate(angles, yps, angle));\n      }\n      return ps;\n    };\n\n    SheetBlock.prototype.interpolate = function interpolate(x, y, xi) {\n      if (!this.aSplines[x.length]) {\n        this.aSplines[x.length] = new _libs.THREE.Spline([]);\n        var ps = this.aSplines[x.length].points;\n        for (var i = 0; i < x.length; ++i) {\n          ps.push(new _libs.THREE.Vector3());\n        }\n      }\n      var spline = this.aSplines[x.length];\n      for (var _i10 = 0; _i10 < x.length; ++_i10) {\n        spline.points[_i10].set(x[_i10], y[_i10], 0);\n      }\n      return spline.getPoint(Math.min(1, Math.max(xi, 0))).y;\n    };\n\n    SheetBlock.prototype.loadPoints = function loadPoints() {\n      var x = [],\n          y = [];\n      var _arr = [0, 0.2877, 0.6347, 0.8174, 1.0000];\n      for (var _i11 = 0; _i11 < _arr.length; _i11++) {\n        var r = _arr[_i11];\n        x.push(r * Math.cos(0.9 * Math.PI / 4));\n        y.push(r * Math.sin(0.9 * Math.PI / 4));\n      }\n\n      var openedInterpolationIndeces = [[2, 3, 4], [2, 3, 4, 5, 6]],\n          closedInterpolationIndeces = [[0, 1, 2], [0, 1, 2]],\n          flatInterpolationIndeces = [[5, 4], [7, 6]],\n          interpolationPoints = [{\n        x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0.000, 0.286, 0.632, 0.815, 0.997], [0.000, 0.279, 0.623, 0.806, 0.988], [0.000, 0.126, 0.411, 0.593, 0.774], [0, 0, 0, 0, 0], x],\n        y: [[0, 0, 0, 0, 0], [0.000, 0.030, 0.010, 0.002, 0.000], [0.000, 0.060, 0.017, 0.004, 0.000], [0.000, 0.259, 0.440, 0.446, 0.429], [0, 0.2877, 0.6347, 0.8174, 1.0000], y]\n      }, {\n        x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0.000, 0.286, 0.632, 0.815, 0.997], [0.000, 0.279, 0.623, 0.806, 0.988], [0.000, 0.233, 0.563, 0.746, 0.927], [0.000, 0.144, 0.433, 0.613, 0.796], [0.000, 0.070, 0.288, 0.455, 0.626], [0, 0, 0, 0, 0], x],\n        y: [[0, 0, 0, 0, 0], [0.000, 0.030, 0.010, 0.002, 0.000], [0.000, 0.060, 0.017, 0.004, 0.000], [0.000, 0.168, 0.269, 0.270, 0.255], [0.000, 0.245, 0.435, 0.458, 0.460], [0.000, 0.278, 0.544, 0.614, 0.673], [0, 0.2877, 0.6347, 0.8174, 1.0000], y]\n      }];\n\n      return {\n        interpolationPoints: interpolationPoints,\n        openedInterpolationIndeces: openedInterpolationIndeces,\n        closedInterpolationIndeces: closedInterpolationIndeces,\n        flatInterpolationIndeces: flatInterpolationIndeces\n      };\n    };\n\n    return SheetBlock;\n  }();\n\n  exports.default = SheetBlock;\n\n  /***/\n},\n/* 11 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n  exports.props = props;\n  function props() {\n    // const props = {\n    //   height,\n    //   width,\n    //   gravity,\n    //   injector,\n    //   cachedPages,\n    //   renderInactivePages,\n    //   renderWhileFlipping,\n    //   pagesForPredicting,\n    //   preloadPages,\n    //   sheet: {\n    //     startVelocity,\n    //     cornerDeviation,\n    //     flexibility,\n    //     flexibleCorner,\n    //     bending,\n    //     wave,\n    //     shape,\n    //     widthTexels,\n    //     heightTexels,\n    //     color,\n    //     sideTexture\n    //   },\n    //   cover: {\n    //     ...sheet,\n    //     padding,\n    //     binderTexture,\n    //     depth,\n    //     mass\n    //   },\n    //   page: {\n    //     ...sheet,\n    //     depth,\n    //     mass\n    //   }\n    // };\n\n    return {\n      height: 0.297,\n      width: 0.21,\n      gravity: 1,\n      cachedPages: 50,\n      renderInactivePages: true,\n      renderInactivePagesOnMobile: false,\n      renderWhileFlipping: false,\n      pagesForPredicting: 5,\n      preloadPages: 5,\n      rtl: false,\n      sheet: {\n        startVelocity: 0.9,\n        cornerDeviation: 0.25,\n        flexibility: 10,\n        flexibleCorner: 0.5,\n        bending: 11,\n        wave: 0.5,\n        shape: 0,\n        widthTexels: 5 * 210,\n        heightTexels: 5 * 297,\n        color: 0xFFFFFF\n      },\n      cover: {\n        binderTexture: '',\n        depth: 0.0003,\n        padding: 0,\n        mass: 0.003\n      },\n      page: {\n        depth: 0.0001,\n        mass: 0.001\n      },\n      cssLayerProps: {\n        width: 1024\n      }\n    };\n  };\n\n  /***/\n},\n/* 12 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n  exports.CSS3DSprite = exports.CSS3DObject = undefined;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  _libs.THREE.CSS3DObject = function (_THREE$Object3D) {\n    _inherits(CSS3DObject, _THREE$Object3D);\n\n    function CSS3DObject() {\n      var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n      _classCallCheck(this, CSS3DObject);\n\n      var _this = _possibleConstructorReturn(this, _THREE$Object3D.call(this));\n\n      if (element) {\n        _this.set(element);\n      }\n      return _this;\n    }\n\n    CSS3DObject.prototype.set = function set(element) {\n      this.element = element;\n      this.element.style.position = 'absolute';\n\n      this.addEventListener('removed', function () {\n        if (this.element.parentNode !== null) {\n          this.element.parentNode.removeChild(this.element);\n        }\n      });\n    };\n\n    return CSS3DObject;\n  }(_libs.THREE.Object3D);\n\n  _libs.THREE.CSS3DSprite = function (_THREE$CSS3DObject) {\n    _inherits(CSS3DSprite, _THREE$CSS3DObject);\n\n    function CSS3DSprite(element) {\n      _classCallCheck(this, CSS3DSprite);\n\n      return _possibleConstructorReturn(this, _THREE$CSS3DObject.call(this, element));\n    }\n\n    return CSS3DSprite;\n  }(_libs.THREE.CSS3DObject);\n\n  _libs.THREE.CSS3DRenderer = function CSS3DRenderer() {\n    _classCallCheck(this, CSS3DRenderer);\n\n    var _width, _height;\n    var _widthHalf, _heightHalf;\n\n    var matrix = new _libs.THREE.Matrix4();\n\n    var cache = {\n      camera: { fov: 0, style: '' },\n      objects: {}\n    };\n\n    var domElement = document.createElement('div');\n    domElement.style.overflow = 'hidden';\n\n    this.domElement = domElement;\n\n    var cameraElement = document.createElement('div');\n\n    cameraElement.style.WebkitTransformStyle = 'preserve-3d';\n    cameraElement.style.MozTransformStyle = 'preserve-3d';\n    cameraElement.style.transformStyle = 'preserve-3d';\n\n    domElement.appendChild(cameraElement);\n\n    var isIE = /Trident/i.test(navigator.userAgent);\n\n    this.setClearColor = function () {};\n\n    this.getSize = function () {\n\n      return {\n        width: _width,\n        height: _height\n      };\n    };\n\n    this.setSize = function (width, height) {\n\n      _width = width;\n      _height = height;\n      _widthHalf = _width / 2;\n      _heightHalf = _height / 2;\n\n      domElement.style.width = width + 'px';\n      domElement.style.height = height + 'px';\n\n      cameraElement.style.width = width + 'px';\n      cameraElement.style.height = height + 'px';\n    };\n\n    function epsilon(value) {\n\n      return Math.abs(value) < 1e-10 ? 0 : value;\n    }\n\n    function getCameraCSSMatrix(matrix) {\n\n      var elements = matrix.elements;\n\n      return 'matrix3d(' + epsilon(elements[0]) + ',' + epsilon(-elements[1]) + ',' + epsilon(elements[2]) + ',' + epsilon(elements[3]) + ',' + epsilon(elements[4]) + ',' + epsilon(-elements[5]) + ',' + epsilon(elements[6]) + ',' + epsilon(elements[7]) + ',' + epsilon(elements[8]) + ',' + epsilon(-elements[9]) + ',' + epsilon(elements[10]) + ',' + epsilon(elements[11]) + ',' + epsilon(elements[12]) + ',' + epsilon(-elements[13]) + ',' + epsilon(elements[14]) + ',' + epsilon(elements[15]) + ')';\n    }\n\n    function getObjectCSSMatrix(matrix, cameraCSSMatrix) {\n\n      var elements = matrix.elements;\n      var matrix3d = 'matrix3d(' + epsilon(elements[0]) + ',' + epsilon(elements[1]) + ',' + epsilon(elements[2]) + ',' + epsilon(elements[3]) + ',' + epsilon(-elements[4]) + ',' + epsilon(-elements[5]) + ',' + epsilon(-elements[6]) + ',' + epsilon(-elements[7]) + ',' + epsilon(elements[8]) + ',' + epsilon(elements[9]) + ',' + epsilon(elements[10]) + ',' + epsilon(elements[11]) + ',' + epsilon(elements[12]) + ',' + epsilon(elements[13]) + ',' + epsilon(elements[14]) + ',' + epsilon(elements[15]) + ')';\n\n      if (isIE) {\n\n        return 'translate(-50%,-50%)' + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)' + cameraCSSMatrix + matrix3d;\n      }\n\n      return 'translate(-50%,-50%)' + matrix3d;\n    }\n\n    function renderObject(object, camera, cameraCSSMatrix) {\n\n      if (object instanceof _libs.THREE.CSS3DObject) {\n\n        var style;\n\n        if (object instanceof _libs.THREE.CSS3DSprite) {\n          matrix.copy(camera.matrixWorldInverse);\n          matrix.transpose();\n          matrix.copyPosition(object.matrixWorld);\n          matrix.scale(object.scale);\n\n          matrix.elements[3] = 0;\n          matrix.elements[7] = 0;\n          matrix.elements[11] = 0;\n          matrix.elements[15] = 1;\n\n          style = getObjectCSSMatrix(matrix, cameraCSSMatrix);\n        } else {\n\n          style = getObjectCSSMatrix(object.matrixWorld, cameraCSSMatrix);\n        }\n\n        var element = object.element;\n        var cachedStyle = cache.objects[object.id] && cache.objects[object.id].style;\n\n        if (cachedStyle === undefined || cachedStyle !== style) {\n          element.style.WebkitTransform = style;\n          element.style.MozTransform = style;\n          element.style.transform = style;\n\n          cache.objects[object.id] = { style: style };\n          if (isIE) {\n            cache.objects[object.id].distanceToCameraSquared = getDistanceToSquared(camera, object);\n          }\n        }\n\n        if (element.parentNode !== cameraElement) {\n          cameraElement.appendChild(element);\n        }\n      }\n\n      for (var i = 0, l = object.children.length; i < l; i++) {\n\n        renderObject(object.children[i], camera, cameraCSSMatrix);\n      }\n    }\n\n    var getDistanceToSquared = function () {\n\n      var a = new _libs.THREE.Vector3();\n      var b = new _libs.THREE.Vector3();\n\n      return function (object1, object2) {\n\n        a.setFromMatrixPosition(object1.matrixWorld);\n        b.setFromMatrixPosition(object2.matrixWorld);\n\n        return a.distanceToSquared(b);\n      };\n    }();\n\n    function zOrder(scene) {\n\n      var order = Object.keys(cache.objects).sort(function (a, b) {\n\n        return cache.objects[a].distanceToCameraSquared - cache.objects[b].distanceToCameraSquared;\n      });\n      var zMax = order.length;\n\n      scene.traverse(function (object) {\n\n        var index = order.indexOf(object.id + '');\n\n        if (index !== -1) {\n\n          object.element.style.zIndex = zMax - index;\n        }\n      });\n    }\n\n    this.render = function (scene, camera) {\n\n      var fov = camera.projectionMatrix.elements[5] * _heightHalf;\n\n      if (cache.camera.fov !== fov) {\n\n        domElement.style.WebkitPerspective = fov + 'px';\n        domElement.style.MozPerspective = fov + 'px';\n        domElement.style.perspective = fov + 'px';\n\n        cache.camera.fov = fov;\n      }\n\n      scene.updateMatrixWorld();\n\n      if (camera.parent === null) camera.updateMatrixWorld();\n\n      var cameraCSSMatrix = 'translateZ(' + fov + 'px)' + getCameraCSSMatrix(camera.matrixWorldInverse);\n\n      var style = cameraCSSMatrix + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';\n\n      if (cache.camera.style !== style && !isIE) {\n\n        cameraElement.style.WebkitTransform = style;\n        cameraElement.style.MozTransform = style;\n        cameraElement.style.transform = style;\n\n        cache.camera.style = style;\n      }\n\n      renderObject(scene, camera, cameraCSSMatrix);\n\n      if (isIE) {\n\n        // IE10 and 11 does not support 'preserve-3d'.\n        // Thus, z-order in 3D will not work.\n        // We have to calc z-order manually and set CSS z-index for IE.\n        // FYI: z-index can't handle object intersection\n        zOrder(scene);\n      }\n    };\n  };\n\n  exports.default = _libs.THREE.CSS3DRenderer;\n\n  var _CSS3DObject = _libs.THREE.CSS3DObject,\n      _CSS3DSprite = _libs.THREE.CSS3DSprite;\n  exports.CSS3DObject = _CSS3DObject;\n  exports.CSS3DSprite = _CSS3DSprite;\n\n  /***/\n},\n/* 13 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _CSS3DRenderer = __webpack_require__(12);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var CSSLayer = function (_CSS3DObject) {\n    _inherits(CSSLayer, _CSS3DObject);\n\n    CSSLayer.init = function init(doc) {\n      var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 150;\n\n      CSSLayer.delay = delay;\n      CSSLayer.style = (0, _libs.$)('<style type=text/css>\\n      .css-layer {\\n    \\t\\topacity: 1;\\n    \\t\\ttransition: opacity ' + delay + 'ms ease-out;\\n        visibility: visible;\\n        overflow: hidden;\\n    \\t}\\n    \\t.css-layer.hidden {\\n    \\t\\ttransition: opacity ' + delay + 'ms ease-in, visibility ' + delay + 'ms step-end;\\n    \\t\\topacity: 0;\\n        visibility: hidden;\\n      }\\n    </style>').appendTo(doc.head);\n    };\n\n    CSSLayer.dispose = function dispose() {\n      CSSLayer.style.remove();\n    };\n\n    function CSSLayer(width, height, props) {\n      _classCallCheck(this, CSSLayer);\n\n      var _this = _possibleConstructorReturn(this, _CSS3DObject.call(this));\n\n      _this.props = props;\n      _this.jContainer = (0, _libs.$)('<div class=\"hidden css-layer\"></div>');\n      var widthPxs = props.width,\n          heightPxs = height / width * widthPxs;\n      _this.jContainer.width(widthPxs).height(heightPxs);\n      _this.scale.x /= widthPxs / width;\n      _this.scale.y /= widthPxs / width;\n\n      _this.setData();\n      _this.set(_this.jContainer[0]);\n      return _this;\n    }\n\n    CSSLayer.prototype.callInternal = function callInternal(name) {\n      if (this.object && this.object[name]) {\n        try {\n          this.object[name]();\n        } catch (e) {\n          console.error(e);\n        }\n      }\n    };\n\n    CSSLayer.prototype.dispose = function dispose() {\n      this.clearInternals();\n    };\n\n    CSSLayer.prototype.clearInternals = function clearInternals() {\n      this.callInternal('dispose');\n      !this.css || this.css.remove();\n      !this.html || this.html.remove();\n    };\n\n    CSSLayer.prototype.setData = function setData() {\n      var css = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var html = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n      var js = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n      this.clearInternals();\n\n      this.css = (0, _libs.$)('<style type=\"text/css\">' + css + '</style>').appendTo(this.jContainer);\n      this.html = (0, _libs.$)(html).appendTo(this.jContainer);\n      var init = eval(js);\n      if (init) {\n        this.object = init(this.jContainer, this.props) || {};\n      }\n    };\n\n    CSSLayer.prototype.pendedCall = function pendedCall(clb) {\n      var _this2 = this;\n\n      var timestamp = this.timestamp = Date.now();\n      setTimeout(function () {\n        if (timestamp === _this2.timestamp) {\n          clb();\n        }\n      }, CSSLayer.delay);\n    };\n\n    CSSLayer.prototype.isHidden = function isHidden() {\n      return this.jContainer.hasClass('hidden');\n    };\n\n    CSSLayer.prototype.hide = function hide() {\n      var _this3 = this;\n\n      var res = void 0;\n      if (!this.isHidden()) {\n        this.jContainer.addClass('hidden');\n        this.callInternal('hide');\n        res = new Promise(function (resolve) {\n          _this3.pendedCall(function () {\n            _this3.callInternal('hidden');\n            resolve();\n          });\n        });\n      } else {\n        res = Promise.resolve();\n      }\n      return res;\n    };\n\n    CSSLayer.prototype.show = function show() {\n      var _this4 = this;\n\n      var res = void 0;\n      if (this.isHidden()) {\n        this.jContainer.removeClass('hidden');\n        this.callInternal('show');\n        res = new Promise(function (resolve) {\n          _this4.pendedCall(function () {\n            _this4.callInternal('shown');\n            resolve();\n          });\n        });\n      } else {\n        res = Promise.resolve();\n      }\n      return res;\n    };\n\n    return CSSLayer;\n  }(_CSS3DRenderer.CSS3DObject);\n\n  exports.default = CSSLayer;\n\n  /***/\n},\n/* 14 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  \"use strict\";\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Cache = function () {\n    function Cache() {\n      var maxSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Infinity;\n      var sizeof = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Cache.countSizeof;\n\n      _classCallCheck(this, Cache);\n\n      this.os = new Map();\n      this.sizeof = sizeof;\n      this.maxSize = maxSize;\n      this.size = 0;\n    }\n\n    Cache.prototype.forEach = function forEach(clb) {\n      this.os.forEach(function (v, k) {\n        return clb([k, v]);\n      });\n    };\n\n    Cache.countSizeof = function countSizeof(value) {\n      return 1;\n    };\n\n    Cache.prototype.remove = function remove(k) {\n      var res = false;\n      var v = this.os.get(k);\n      if (!v.locked || !v.locked(k)) {\n        this.size -= this.sizeof(v);\n        if (v.dispose) {\n          v.dispose();\n        }\n        this.os.delete(k);\n        res = true;\n      }\n      return res;\n    };\n\n    Cache.prototype.freeSpace = function freeSpace() {\n      var arr = [];\n      for (var _iterator = this.os, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var p = _ref;\n\n        arr.push({ timestamp: p[1].timestamp, key: p[0] });\n      }\n      arr.sort(function (a, b) {\n        return a.timestamp - b.timestamp;\n      });\n      for (var i = 0; i < arr.length && this.size > 3 * this.maxSize / 4; ++i) {\n        this.remove(arr[i].key);\n      }\n    };\n\n    Cache.prototype.dispose = function dispose() {\n      var arr = [];\n      for (var _iterator2 = this.os, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var p = _ref2;\n\n        arr.push({ v: p[1], k: p[0] });\n      }\n      for (var _iterator3 = arr, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) break;\n          _ref3 = _i3.value;\n        }\n\n        var o = _ref3;\n\n        if (o.v.dispose) {\n          o.v.dispose();\n        }\n        this.os.delete(o.k);\n      }\n    };\n\n    Cache.recursionSizeof = function recursionSizeof(value) {\n      var size = 0;\n      if (value) {\n        ++size;\n        var len = value.length;\n        if (len === undefined) {\n          for (var p in value) {\n            if (value.hasOwnProperty(p)) {\n              size += Cache.recursionSizeof(value[p]);\n            }\n          }\n        } else {\n          size += len;\n        }\n      }\n      return size;\n    };\n\n    Cache.prototype.getTimestamp = function getTimestamp() {\n      return Date.now();\n    };\n\n    Cache.prototype.get = function get(key) {\n      var value = this.os.get(key);\n      if (value) {\n        value.timestamp = this.getTimestamp();\n      }\n      return value;\n    };\n\n    Cache.prototype.put = function put(key, value) {\n      value.timestamp = this.getTimestamp();\n      this.os.set(key, value);\n      this.size += this.sizeof(value);\n      if (this.size > this.maxSize) {\n        this.freeSpace();\n      }\n      return value;\n    };\n\n    return Cache;\n  }();\n\n  exports.default = Cache;\n\n  /***/\n},\n/* 15 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var Controller = function (_THREE$EventDispatche) {\n    _inherits(Controller, _THREE$EventDispatche);\n\n    function Controller() {\n      _classCallCheck(this, Controller);\n\n      return _possibleConstructorReturn(this, _THREE$EventDispatche.apply(this, arguments));\n    }\n\n    Controller.prototype.handleDefault = function handleDefault(id, e, data) {\n      //console.log(id+'-'+e.type+'-'+data);\n    };\n\n    Controller.prototype.dispatchAsync = function dispatchAsync(e) {\n      var _this2 = this;\n\n      Promise.resolve().then(function () {\n        return _this2.dispatchEvent(e);\n      });\n    };\n\n    Controller.prototype.dispose = function dispose() {};\n\n    return Controller;\n  }(_libs.THREE.EventDispatcher);\n\n  exports.default = Controller;\n\n  /***/\n},\n/* 16 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _EventConverter2 = __webpack_require__(6);\n\n  var _EventConverter3 = _interopRequireDefault(_EventConverter2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var CustomEventConverter = function (_EventConverter) {\n    _inherits(CustomEventConverter, _EventConverter);\n\n    // custom\n    // testIntersection(e, data);\n    // custom.object\n    // test(object);\n\n    function CustomEventConverter(wnd, doc) {\n      var customTest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {\n        return false;\n      };\n      var eDoc = arguments[3];\n\n      _classCallCheck(this, CustomEventConverter);\n\n      var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));\n\n      _this.eDoc = eDoc;\n      _this.customTest = customTest;\n      _this.customs = [];\n      return _this;\n    }\n\n    CustomEventConverter.prototype.test = function test(object1, object2) {\n      return object1 && object2 ? this.customTest(object1, object2) : false;\n    };\n\n    CustomEventConverter.prototype.getCallback = function getCallback(object) {\n      return object.target.callback;\n    };\n\n    CustomEventConverter.prototype.addCustom = function addCustom(custom) {\n      this.customs.push(custom);\n    };\n\n    CustomEventConverter.prototype.getObject = function getObject(e, data) {\n      var object = void 0;\n      if (data.doc === this.eDoc) {\n        for (var _iterator = this.customs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var custom = _ref;\n\n          object = custom.testIntersection(e, data);\n          if (object) {\n            break;\n          }\n        }\n      }\n      return object;\n    };\n\n    return CustomEventConverter;\n  }(_EventConverter3.default);\n\n  exports.default = CustomEventConverter;\n\n  /***/\n},\n/* 17 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _Utils = __webpack_require__(4);\n\n  var _Utils2 = _interopRequireDefault(_Utils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Finder = function () {\n    Finder.isDelimetr = function isDelimetr(s) {\n      return s === Finder.DELIMITER;\n    };\n\n    Finder.prototype.merge = function merge() {\n      var as = [],\n          map = [],\n          strs = this.strs;\n      var p = 0;\n      for (var i = 0; i < strs.length; ++i) {\n        if (strs[i].length) {\n          map.push({\n            base: i,\n            offset: p\n          });\n          as.push(strs[i]);\n          p += strs[i].length;\n          if (i < strs.length - 1 && !Finder.isDelimetr(strs[i].charAt(strs[i].length - 1)) && !Finder.isDelimetr(strs[i + 1].charAt(0))) {\n            as.push(Finder.DELIMITER);\n            ++p;\n          }\n        }\n      }\n      this.map = map;\n      this.str = as.join('');\n    };\n\n    Finder.prototype.addHits = function addHits(p) {\n      var info = this.map[_Utils2.default.lowerBound(this.map, { offset: p }, function (a, b) {\n        return a.offset - b.offset;\n      })];\n      var chars = this.pattern.length,\n          i = info.base;\n      p -= info.offset;\n      while (chars) {\n        if (this.strs[i].length) {\n          var delimeter = i < this.strs.length - 1 && !Finder.isDelimetr(this.strs[i].charAt(this.strs[i].length - 1)) && !Finder.isDelimetr(this.strs[i + 1].charAt(0)),\n              length = Math.min(this.strs[i].length + (delimeter ? 1 : 0) - p, chars);\n          if (p < this.strs[i].length) {\n            this.hits.push({\n              index: i,\n              offset: p,\n              length: Math.min(length, this.strs[i].length - p)\n            });\n          }\n          chars -= length;\n          ++i;\n          p = 0;\n        }\n      }\n    };\n\n    Finder.prototype.addContext = function addContext(p) {\n      var f = p,\n          l = p + this.pattern.length - 1,\n          dels = this.props.contextLength,\n          prevDels = dels + 1;\n      while (dels && prevDels - dels) {\n        prevDels = dels;\n        if (dels % 2) {\n          for (var i = f - 2; i >= 0; --i) {\n            if (Finder.isDelimetr(this.str[i]) || i === 0) {\n              f = i === 0 ? 0 : i + 1;\n              --dels;\n              break;\n            }\n          }\n        } else {\n          for (var _i = l + 2; _i < this.str.length; ++_i) {\n            if (Finder.isDelimetr(this.str[_i]) || _i === this.str.length - 1) {\n              l = _i === this.str.length - 1 ? _i === this.str.length - 1 : _i - 1;\n              --dels;\n              break;\n            }\n          }\n        }\n      }\n      this.contexts.push(this.str.substr(f, l - f + 1));\n    };\n\n    Finder.prototype.getHits = function getHits() {\n      return this.hits;\n    };\n\n    Finder.prototype.getContexts = function getContexts() {\n      return this.contexts;\n    };\n\n    function Finder(strs, pattern, props) {\n      _classCallCheck(this, Finder);\n\n      this.props = _extends({}, Finder.defaults, props);\n      this.strs = strs;\n      var data = this.merge(strs);\n      this.hits = [];\n      this.contexts = [];\n      this.pattern = pattern.toLowerCase();\n      this.lstr = this.str.toLowerCase();\n      var p = 0;\n      while (true) {\n        p = this.lstr.indexOf(this.pattern, p);\n        if (p === -1) {\n          break;\n        } else {\n          this.addHits(p);\n          this.addContext(p);\n          p += this.pattern.length;\n        }\n      }\n    }\n\n    return Finder;\n  }();\n\n  Finder.DELIMITER = ' ';\n  Finder.defaults = {\n    contextLength: 7,\n    hits: true,\n    contexts: true\n  };\n  exports.default = Finder;\n\n  /***/\n},\n/* 18 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _Utils = __webpack_require__(4);\n\n  var _Utils2 = _interopRequireDefault(_Utils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  _libs.PDFJS.workerSrc = (window.PDFJS_LOCALE ? PDFJS_LOCALE : { \"pdfJsWorker\": \"js/pdf.worker.js\", \"pdfJsCMapUrl\": \"cmaps/\" }).pdfJsWorker;\n  _libs.PDFJS.cMapUrl = (window.PDFJS_LOCALE ? PDFJS_LOCALE : { \"pdfJsWorker\": \"js/pdf.worker.js\", \"pdfJsCMapUrl\": \"cmaps/\" }).pdfJsCMapUrl;\n  _libs.PDFJS.cMapPacked = true;\n\n  var Pdf = function () {\n    function Pdf(src, loadingProgress) {\n      var _this = this;\n\n      _classCallCheck(this, Pdf);\n\n      this.src = _Utils2.default.normalizeUrl(src);\n      this.handlerQueue = [];\n      this.progresData = { loaded: -1, total: 1 };\n      this.loadingProgress = loadingProgress;\n\n      _libs.PDFJS.getDocument({\n        url: this.src,\n        rangeChunkSize: 512 * 1024\n      }, null, null, function (data) {\n        if (_this.loadingProgress) {\n          var cur = Math.floor(100 * data.loaded / data.total),\n              old = Math.floor(100 * _this.progresData.loaded / _this.progresData.total);\n          if (cur !== old) {\n            cur = isNaN(cur) ? 0 : cur;\n            cur = cur > 100 ? 100 : cur;\n            _this.loadingProgress(cur);\n          }\n        }\n        _this.progresData = data;\n      }).then(function (handler) {\n        if (handler.numPages > 1) {\n          Promise.all([handler.getPage(1), handler.getPage(2)]).then(function (pages) {\n            _this.init(handler, pages);\n          });\n        } else {\n          _this.init(handler);\n        }\n      });\n    }\n\n    Pdf.prototype.init = function init(handler, pages) {\n      this.handler = handler;\n      this.doubledPages = pages ? Math.abs(2 * Pdf.getPageSize(pages[0]).width - Pdf.getPageSize(pages[1]).width) / Pdf.getPageSize(pages[0]).width < 1e-4 : false;\n      var done = Promise.resolve(handler);\n\n      var _loop = function _loop() {\n        if (_isArray) {\n          if (_i >= _iterator.length) return 'break';\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) return 'break';\n          _ref = _i.value;\n        }\n\n        var clb = _ref;\n\n        done = done.then(function (handler) {\n          clb(handler);\n          return handler;\n        });\n      };\n\n      for (var _iterator = this.handlerQueue.reverse(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        var _ret = _loop();\n\n        if (_ret === 'break') break;\n      }\n    };\n\n    Pdf.prototype.getPageType = function getPageType(n) {\n      return !this.doubledPages || n === 0 || n === this.getPagesNum() - 1 ? 'full' : n & 1 ? 'left' : 'right';\n    };\n\n    Pdf.prototype.getPage = function getPage(n) {\n      return this.handler.getPage(this.doubledPages ? Math.ceil(n / 2) + 1 : n + 1);\n    };\n\n    Pdf.prototype.dispose = function dispose() {\n      this.handlerQueue.splice(0, this.handlerQueue.length);\n      delete this.handler;\n    };\n\n    Pdf.prototype.setLoadingProgressClb = function setLoadingProgressClb(clb) {\n      this.loadingProgress = clb;\n    };\n\n    Pdf.prototype.getPagesNum = function getPagesNum() {\n      return this.handler ? this.doubledPages ? 2 * (this.handler.numPages - 1) : this.handler.numPages : undefined;\n    };\n\n    Pdf.getPageSize = function getPageSize(page) {\n      return {\n        width: page.view[2] - page.view[0],\n        height: page.view[3] - page.view[1]\n      };\n    };\n\n    //   if(pages>1) {\n    //   handler.getPage(2).\n    //   then((page)=> {\n    //     const size1 = Pdf.getPageSize(page);\n    //     this.props.doubledPages = 2*size0.width===size1.width;\n    //     this.ready();\n    //   }).\n    //   catch(()=> this.ready());\n    // }\n    // else {\n\n    Pdf.prototype.getHandler = function getHandler(clb) {\n      if (this.handler) {\n        clb(this.handler);\n      } else {\n        this.handlerQueue.push(clb);\n      }\n    };\n\n    return Pdf;\n  }();\n\n  exports.default = Pdf;\n\n  /***/\n},\n/* 19 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var ThreeEventConverterFs = function () {\n    ThreeEventConverterFs.objectsTest = function objectsTest(object1, object2) {\n      return object1 && object2 ? object1.object === object2.object : false;\n    };\n\n    ThreeEventConverterFs.objectsAndFacesTest = function objectsAndFacesTest(object1, object2) {\n      return object1 && object2 ? object1.object === object2.object && object1.face.materialIndex === object2.face.materialIndex : false;\n    };\n\n    function ThreeEventConverterFs(visualWorld) {\n      var test = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ThreeEventConverterFs.objectsAndFacesTest;\n\n      _classCallCheck(this, ThreeEventConverterFs);\n\n      this.visual = visualWorld;\n      this.coords = new _libs.THREE.Vector2();\n      this.raycaster = this.visual.raycaster;\n      this.camera = this.visual.camera;\n      this.threes = [];\n      this.test = test;\n    }\n\n    ThreeEventConverterFs.prototype.addThree = function addThree(three) {\n      this.threes.push(three);\n    };\n\n    ThreeEventConverterFs.prototype.removeThree = function removeThree(three) {\n      var i = this.threes.indexOf(three);\n      if (~i) {\n        this.threes.splice(i, 1);\n      }\n    };\n\n    ThreeEventConverterFs.prototype.getObject = function getObject(e) {\n      this.setCoordsFromEvent(e);\n      this.raycaster.setFromCamera(this.coords, this.camera);\n      var intersects = this.raycaster.intersectObjects(this.threes);\n      return intersects[0];\n    };\n\n    return ThreeEventConverterFs;\n  }();\n\n  exports.default = ThreeEventConverterFs;\n\n  /***/\n},\n/* 20 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _BaseMathUtils = __webpack_require__(2);\n\n  var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var ThreeUtils = function () {\n    function ThreeUtils() {\n      _classCallCheck(this, ThreeUtils);\n    }\n\n    ThreeUtils.vertices2UVs = function vertices2UVs(vertices, indeces, first, last, converClb) {\n      var r = [];\n      for (var i = first; i < last; ++i) {\n        var vis = [indeces[i].a, indeces[i].b, indeces[i].c];\n        for (var j = 0; j < vis.length; ++j) {\n          if (!r[vis[j]]) {\n            r[vis[j]] = converClb(vertices[vis[j]]);\n          }\n        }\n      }\n      return r;\n    };\n\n    ThreeUtils.computeFaceVertexUvs = function computeFaceVertexUvs(geometry, faces) {\n      var uvs = [ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, 0, faces[0], function (p) {\n        return new THREE.Vector2(p.x, 1 - p.z);\n      }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[0], faces[1], function (p) {\n        return new THREE.Vector2(1 - p.x, 1 - p.z);\n      }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[1], faces[2], function (p) {\n        return new THREE.Vector2(p.x, p.y);\n      }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[2], faces[3], function (p) {\n        return new THREE.Vector2(1 - p.x, p.y);\n      }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[3], faces[4], function (p) {\n        return new THREE.Vector2(p.z, p.y);\n      }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[4], geometry.faces.length, function (p) {\n        return new THREE.Vector2(1 - p.z, p.y);\n      })];\n\n      var uvsi = 0;\n      for (var i = 0; i < geometry.faces.length; ++i) {\n        uvsi += faces[uvsi] === i;\n        var f = geometry.faces[i];\n        f.materialIndex = uvsi;\n        geometry.faceVertexUvs[0][i] = [uvs[uvsi][f.a], uvs[uvsi][f.b], uvs[uvsi][f.c]];\n      }\n    };\n\n    ThreeUtils.createMarker = function createMarker(p, c, size) {\n      var marker = new THREE.Mesh(new THREE.SphereGeometry(size), new THREE.MeshPhongMaterial({ color: c }));\n      marker.position.set(p.x, p.y, p.z);\n      return marker;\n    };\n\n    ThreeUtils.findUvTris = function findUvTris(geometry, ps, first, last) {\n      var res = [];\n      for (var _iterator = ps, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var p = _ref;\n\n        var found = false;\n        for (var i = first; i < last && !found; ++i) {\n          var tri = geometry.faceVertexUvs[0][i];\n          if (_BaseMathUtils2.default.isInsideConvPoly(tri, p)) {\n            res.push({\n              coefs: _BaseMathUtils2.default.computeInterpCoefs(tri, p),\n              i: i\n            });\n            found = true;\n          }\n        }\n        if (!found) {\n          console.error('Bad point');\n          res.push(undefined);\n        }\n      }\n      return res;\n    };\n\n    ThreeUtils.findInternalVertices = function findInternalVertices(geometry, ps, first, last) {\n      var res = {};\n      for (var i = first; i < last; ++i) {\n        var tri = geometry.faceVertexUvs[0][i],\n            f = geometry.faces[i],\n            vs = [f.a, f.b, f.c];\n        for (var j = 0; j < tri.length; ++j) {\n          if (res[vs[j]] === undefined && _BaseMathUtils2.default.isInsidePoly(ps, tri[j])) {\n            res[vs[j]] = {\n              p: tri[j],\n              i: vs[j],\n              n: f.vertexNormals[j]\n            };\n          }\n        }\n      }\n      return Object.values(res);\n    };\n\n    return ThreeUtils;\n  }();\n\n  exports.default = ThreeUtils;\n\n  /***/\n},\n/* 21 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  \"use strict\";\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Target = function () {\n    function Target() {\n      _classCallCheck(this, Target);\n    }\n\n    Target.test = function test(object1, object2) {\n      return object1.target === object2.target;\n    };\n\n    return Target;\n  }();\n\n  exports.default = Target;\n\n  /***/\n},\n/* 22 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(1);\n\n  var _Detector = __webpack_require__(45);\n\n  var _Detector2 = _interopRequireDefault(_Detector);\n\n  var _VisualWorld = __webpack_require__(66);\n\n  var _VisualWorld2 = _interopRequireDefault(_VisualWorld);\n\n  var _PdfLinksHandler = __webpack_require__(35);\n\n  var _PdfLinksHandler2 = _interopRequireDefault(_PdfLinksHandler);\n\n  var _Book = __webpack_require__(26);\n\n  var _Book2 = _interopRequireDefault(_Book);\n\n  var _BookView = __webpack_require__(29);\n\n  var _BookView2 = _interopRequireDefault(_BookView);\n\n  var _BookController = __webpack_require__(27);\n\n  var _BookController2 = _interopRequireDefault(_BookController);\n\n  var _PdfBookPropsBuilder = __webpack_require__(34);\n\n  var _PdfBookPropsBuilder2 = _interopRequireDefault(_PdfBookPropsBuilder);\n\n  var _ClbBookPropsBuilder = __webpack_require__(30);\n\n  var _ClbBookPropsBuilder2 = _interopRequireDefault(_ClbBookPropsBuilder);\n\n  var _LoadingController = __webpack_require__(53);\n\n  var _LoadingController2 = _interopRequireDefault(_LoadingController);\n\n  var _Search = __webpack_require__(58);\n\n  var _Search2 = _interopRequireDefault(_Search);\n\n  var _Bookmarks = __webpack_require__(44);\n\n  var _Bookmarks2 = _interopRequireDefault(_Bookmarks);\n\n  var _Thumbnails = __webpack_require__(63);\n\n  var _Thumbnails2 = _interopRequireDefault(_Thumbnails);\n\n  var _TocController = __webpack_require__(40);\n\n  var _TocController2 = _interopRequireDefault(_TocController);\n\n  var _BookPrinter = __webpack_require__(28);\n\n  var _BookPrinter2 = _interopRequireDefault(_BookPrinter);\n\n  var _AutoNavigator = __webpack_require__(24);\n\n  var _AutoNavigator2 = _interopRequireDefault(_AutoNavigator);\n\n  var _SoundsEnviroment = __webpack_require__(39);\n\n  var _SoundsEnviroment2 = _interopRequireDefault(_SoundsEnviroment);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  _libs.$.fn.FlipBook = function (options) {\n    var scene = {\n      dispose: function dispose() {\n        if (this.ready) {\n          !scene.pdfLinksHandler || scene.pdfLinksHandler.dispose();\n          delete scene.pdfLinksHandler;\n          scene.sounds.dispose();\n          delete scene.sounds;\n          scene.tocCtrl.dispose();\n          delete scene.tocCtrl;\n          scene.thumbnails.dispose();\n          delete scene.thumbnails;\n          !scene.bookmarks || scene.bookmarks.dispose();\n          delete scene.bookmarks;\n          scene.ctrl.dispose();\n          delete scene.ctrl;\n          scene.bookPrinter.dispose();\n          delete scene.bookPrinter;\n          scene.book.dispose();\n          delete scene.book;\n          scene.propsBuilder.dispose();\n          delete scene.propsBuilder;\n          delete scene.bookBuilder;\n          scene.visual.dispose();\n          delete scene.visual;\n          scene.view.dispose();\n          delete scene.view;\n          delete scene.dispose;\n        } else {\n          this.pendingDispose = true;\n        }\n      }\n    };\n    options = _extends({}, options);\n    scene.view = new _BookView2.default(this.length ? this[0] : (0, _libs.$)('<div>').appendTo('body'), function () {\n      if (!_Detector2.default.webgl) {\n        _Detector2.default.addGetWebGLMessage({ parent: scene.view.getView() });\n      } else {\n        scene.loadingCtrl = new _LoadingController2.default(scene.view, true, function (progress) {\n          return progress === 0 ? (0, _libs.tr)('Please wait... the Application is Loading') : (0, _libs.tr)('PDF is Loading:') + ' ' + progress + '%';\n        });\n        scene.visual = new _VisualWorld2.default(scene.view.getContainer().ownerDocument.defaultView, scene.view.getContainer().ownerDocument, scene.view.getView());\n        scene.bookBuilder = function (props, sheets, pageCallback) {\n          props.cssLayerProps = _extends({}, props.cssLayerProps, {\n            scene: scene\n          });\n          if (options.propertiesCallback) {\n            props = options.propertiesCallback(props);\n          }\n          scene.book = new _Book2.default(scene.visual, sheets, pageCallback, props);\n          scene.bookPrinter = new _BookPrinter2.default(scene.visual, scene.book, (options.template || {}).printStyle);\n          scene.loadingCtrl.dispose();\n          delete scene.loadingCtrl;\n          scene.ctrl = new _BookController2.default(scene.book, scene.view, options.controlsProps);\n          scene.book.setInjector(function (w) {\n            w.jQuery = w.$ = _libs.$;\n            w.book = scene.book;\n            w.bookCtrl = scene.ctrl;\n            if (props.injector) {\n              props.injector(w);\n            }\n          });\n          scene.view.addHandler(scene.ctrl);\n          scene.ctrl.setPrinter(scene.bookPrinter);\n          var test = pageCallback(0);\n\n          scene.search = new _Search2.default(scene.view.getSearchView(), scene.book.getPages());\n          scene.search.onQuery = scene.book.setQuery.bind(scene.book);\n          scene.book.addEventListener('searchResults', function (e) {\n            scene.search.setResults(e.results, e.lastPage);\n          });\n\n          scene.thumbnails = new _Thumbnails2.default(scene.visual, scene.view.getThumbnailsView(), pageCallback, 2 * (sheets + 2), { kWtoH: props.width / props.height });\n          scene.tocCtrl = new _TocController2.default(scene.view, scene.ctrl);\n          scene.tocCtrl.setThumbnails(scene.thumbnails);\n          scene.tocCtrl.setSearch(scene.search);\n          scene.ctrl.setTocCtrl(scene.tocCtrl);\n          scene.view.addHandler(scene.tocCtrl);\n\n          if (test.type === 'pdf') {\n            scene.pdfLinksHandler = new _PdfLinksHandler2.default(test.src, scene.ctrl, scene.visual.element);\n            scene.book.addEventListener('pdfAnnotation', scene.pdfLinksHandler.handleEvent.bind(scene.pdfLinksHandler));\n            test.src.getHandler(function (handler) {\n              handler.getOutline().then(function (outline) {\n                scene.bookmarks = new _Bookmarks2.default(scene.view.getBookmarksView(), outline);\n                scene.tocCtrl.setBookmarks(scene.bookmarks, test.src);\n              });\n            });\n            if (options.pdfLinks && options.pdfLinks.handler) {\n              scene.pdfLinksHandler.setHandler(options.pdfLinks.handler);\n            }\n          }\n\n          scene.sounds = new _SoundsEnviroment2.default(options.template);\n          scene.ctrl.setSounds(scene.sounds);\n          scene.sounds.subscribeFlips(scene.ctrl);\n\n          scene.ready = true;\n          new _AutoNavigator2.default(scene.visual, scene.ctrl, options.autoNavigation).dispose();\n          if (options.ready) {\n            options.ready(scene);\n          }\n          if (scene.pendingDispose) {\n            scene.dispose();\n          }\n        };\n        if (options.pdf) {\n          scene.propsBuilder = new _PdfBookPropsBuilder2.default(options.pdf, scene.bookBuilder);\n          scene.propsBuilder.pdf.setLoadingProgressClb(scene.loadingCtrl.setProgress.bind(scene.loadingCtrl));\n        } else if (options.pageCallback) {\n          scene.propsBuilder = new _ClbBookPropsBuilder2.default(scene.visual, options.pageCallback, options.pages, scene.bookBuilder);\n        } else {\n          scene.propsBuilder = new _ClbBookPropsBuilder2.default(scene.visual, _Book2.default.pageCallback, 6, scene.bookBuilder);\n        }\n      }\n    }, options.template);\n    return scene;\n  };\n\n  (0, _libs.$)(function () {\n    var containers = (0, _libs.$)('.flip-book-container');\n    for (var i = 0; i < containers.length; ++i) {\n      var jContainer = (0, _libs.$)(containers[i]),\n          src = jContainer.attr('src');\n      if (!!src) {\n        jContainer.FlipBook({ pdf: src });\n      }\n    }\n  });\n\n  window.jQuery = window.$ = _libs.$;\n\n  /***/\n},\n/* 23 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  if (!Array.prototype.fill) {\n    Array.prototype.fill = function (value) {\n\n      // Шаги 1-2.\n      if (this == null) {\n        throw new TypeError('this is null or not defined');\n      }\n\n      var O = Object(this);\n\n      // Шаги 3-5.\n      var len = O.length >>> 0;\n\n      // Шаги 6-7.\n      var start = arguments[1];\n      var relativeStart = start >> 0;\n\n      // Шаг 8.\n      var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);\n\n      // Шаги 9-10.\n      var end = arguments[2];\n      var relativeEnd = end === undefined ? len : end >> 0;\n\n      // Шаг 11.\n      var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len);\n\n      // Шаг 12.\n      while (k < final) {\n        O[k] = value;\n        k++;\n      }\n\n      // Шаг 13.\n      return O;\n    };\n  }\n\n  if (!Array.prototype.find) {\n    Object.defineProperty(Array.prototype, 'find', {\n      value: function value(predicate) {\n        'use strict';\n\n        if (this == null) {\n          throw new TypeError('Array.prototype.find called on null or undefined');\n        }\n        if (typeof predicate !== 'function') {\n          throw new TypeError('predicate must be a function');\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n          value = list[i];\n          if (predicate.call(thisArg, value, i, list)) {\n            return value;\n          }\n        }\n        return undefined;\n      }\n    });\n  }\n\n  if (!Array.prototype.findIndex) {\n    Array.prototype.findIndex = function (predicate) {\n      if (this == null) {\n        throw new TypeError('Array.prototype.findIndex called on null or undefined');\n      }\n      if (typeof predicate !== 'function') {\n        throw new TypeError('predicate must be a function');\n      }\n      var list = Object(this);\n      var length = list.length >>> 0;\n      var thisArg = arguments[1];\n      var value;\n\n      for (var i = 0; i < length; i++) {\n        value = list[i];\n        if (predicate.call(thisArg, value, i, list)) {\n          return i;\n        }\n      }\n      return -1;\n    };\n  }\n\n  if (!Object.values) {\n    Object.values = function values(O) {\n      return Object.keys(O).map(function (name) {\n        return O[name];\n      }) || [];\n    };\n  }\n\n  /***/\n},\n/* 24 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var AutoNavigator = function () {\n    function AutoNavigator(context, bookCtrl) {\n      var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      _classCallCheck(this, AutoNavigator);\n\n      props = _extends({}, props, {\n        urlParam: props.urlParam || 'fb3d-page',\n        navigates: props.navigates === undefined ? 1 : props.navigates\n      });\n      this.props = props;\n      this.context = context;\n      this.bookCtrl = bookCtrl;\n      this.urlParam = props.urlParam;\n      this.wnd = context.wnd;\n\n      this.wnd.fb3d = _extends({}, this.wnd.fb3d);\n      this.wnd.fb3d.navigator = _extends({}, this.wnd.fb3d.navigator);\n      this.navigator = this.wnd.fb3d.navigator[this.urlParam] = _extends({}, this.wnd.fb3d.navigator[this.urlParam]);\n      this.navigator.instances = (this.navigator.instances || 0) + 1;\n\n      if (this.navigator.instances <= this.props.navigates) {\n        this.bookCtrl.goToPage(this.getPageNumber());\n      }\n    }\n\n    AutoNavigator.prototype.dispose = function dispose() {};\n\n    AutoNavigator.prototype.getParameterByName = function getParameterByName(name, url) {\n      if (!url) {\n        url = window.location.href;\n      }\n      name = name.replace(/[\\[\\]]/g, '\\\\$&');\n      var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),\n          results = regex.exec(url);\n      if (!results) return null;\n      if (!results[2]) return '';\n      return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n    };\n\n    AutoNavigator.prototype.getPageNumber = function getPageNumber() {\n      var number = this.getParameterByName(this.urlParam);\n      number = parseInt(number);\n      if (isNaN(number)) {\n        number = 1;\n      }\n      return number - 1;\n    };\n\n    return AutoNavigator;\n  }();\n\n  exports.default = AutoNavigator;\n\n  /***/\n},\n/* 25 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(1);\n\n  var _MathUtils = __webpack_require__(3);\n\n  var _MathUtils2 = _interopRequireDefault(_MathUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Binder = function () {\n    function Binder(visual, p) {\n      var _this = this;\n\n      _classCallCheck(this, Binder);\n\n      this.visual = visual;\n      this.p = _extends({}, p, {\n        backSize: 2 * p.cover.depth + p.sheets * p.page.depth\n      });\n      this.OZ = new _libs.THREE.Vector3(0, 0, 1);\n\n      this.backG = new _libs.THREE.BoxGeometry(p.cover.depth, this.p.backSize, p.cover.height);\n\n      this.materials = [new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color })];\n\n      var backM = new _libs.THREE.Mesh(this.backG, new _libs.THREE.MeshFaceMaterial(this.materials));\n\n      if (p.cover.binderTexture !== '') {\n        this.visual.textureLoader.load(p.cover.binderTexture, function (texture) {\n          _this.materials[1].color.setHex(0xFFFFFF);\n          _this.materials[1].map = texture;\n          texture.minFilter = _libs.THREE.LinearFilter;\n          texture.needsUpdate = true;\n          _this.materials[1].needsUpdate = true;\n        });\n      }\n\n      this.three = new _libs.THREE.Object3D();\n      this.back = new _libs.THREE.Object3D();\n      this.backRT = new _libs.THREE.Object3D();\n      this.backRR = new _libs.THREE.Object3D();\n      this.backLT = new _libs.THREE.Object3D();\n      this.backLR = new _libs.THREE.Object3D();\n      this.leftPivot = new _libs.THREE.Object3D();\n      this.rightPivot = new _libs.THREE.Object3D();\n\n      this.back.add(backM);\n      this.back.add(this.leftPivot);\n      this.back.add(this.rightPivot);\n      this.backRT.add(this.back);\n      this.backRR.add(this.backRT);\n      this.backLT.add(this.backRR);\n      this.backLR.add(this.backLT);\n      this.three.add(this.backLR);\n    }\n\n    Binder.prototype.dispose = function dispose() {\n      for (var _iterator = this.materials, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var m = _ref;\n\n        if (m.map) {\n          m.map = null;\n          m.needsUpdate = true;\n        }\n        m.dispose();\n      }\n      delete this.materials;\n      this.backG.dispose();\n    };\n\n    Binder.prototype.set = function set(angle) {\n      var right = void 0,\n          left = void 0;\n      if (angle > Math.PI / 2) {\n        right = Math.PI / 2;\n        left = angle - Math.PI / 2;\n      } else {\n        right = angle;\n        left = 0;\n      }\n      var p = this.p,\n          tr1 = { x: -0.5 * p.cover.depth, y: 0.5 * p.backSize - p.cover.depth };\n      this.backRT.position.set(tr1.x, tr1.y, 0);\n      this.backRR.position.set(-tr1.x, -tr1.y, 0);\n      this.backRR.quaternion.setFromAxisAngle(this.OZ, right);\n\n      var tr2 = { x: p.backSize - 2 * p.cover.depth - 0.5 * p.cover.depth, y: 0.5 * p.backSize - p.cover.depth };\n      this.backLT.position.set(tr2.x, tr2.y, 0);\n      this.backLR.position.set(-tr2.x, -tr2.y, 0);\n      this.backLR.quaternion.setFromAxisAngle(this.OZ, left);\n    };\n\n    Binder.prototype.setLeft = function setLeft(angle) {\n      var PI = Math.PI;\n      this.leftPivot.position.set(_MathUtils2.default.interpolateLinear([-PI, -PI / 2], [0, this.p.cover.depth], angle), 0.5 * this.p.backSize - 0.5 * this.p.cover.depth, 0);\n      this.leftPivot.quaternion.setFromAxisAngle(this.OZ, angle);\n    };\n\n    Binder.prototype.setRight = function setRight(angle) {\n      var PI = Math.PI;\n      this.rightPivot.position.set(_MathUtils2.default.interpolateLinear([-PI / 2, 0], [this.p.cover.depth, 0], angle), -0.5 * this.p.backSize + 0.5 * this.p.cover.depth, 0);\n      this.rightPivot.quaternion.setFromAxisAngle(this.OZ, angle);\n    };\n\n    Binder.prototype.joinLeftCover = function joinLeftCover(cover) {\n      cover.three.position.set(0, -0.5 * this.p.cover.depth, 0);\n      this.leftPivot.add(cover.three);\n    };\n\n    Binder.prototype.disconnectLeftCover = function disconnectLeftCover(cover) {\n      this.leftPivot.remove(cover.three);\n    };\n\n    Binder.prototype.joinRightCover = function joinRightCover(cover) {\n      cover.three.position.set(0, -0.5 * this.p.cover.depth, 0);\n      this.rightPivot.add(cover.three);\n    };\n\n    Binder.prototype.disconnectRightCover = function disconnectRightCover(cover) {\n      this.rightPivot.remove(cover.three);\n    };\n\n    return Binder;\n  }();\n\n  exports.default = Binder;\n\n  /***/\n},\n/* 26 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(1);\n\n  var _book = __webpack_require__(11);\n\n  var _GraphUtils = __webpack_require__(7);\n\n  var _GraphUtils2 = _interopRequireDefault(_GraphUtils);\n\n  var _Binder = __webpack_require__(25);\n\n  var _Binder2 = _interopRequireDefault(_Binder);\n\n  var _Cover = __webpack_require__(31);\n\n  var _Cover2 = _interopRequireDefault(_Cover);\n\n  var _SheetBlock = __webpack_require__(10);\n\n  var _SheetBlock2 = _interopRequireDefault(_SheetBlock);\n\n  var _SheetPhysics = __webpack_require__(38);\n\n  var _SheetPhysics2 = _interopRequireDefault(_SheetPhysics);\n\n  var _PageManager = __webpack_require__(33);\n\n  var _PageManager2 = _interopRequireDefault(_PageManager);\n\n  var _CSSLayer = __webpack_require__(13);\n\n  var _CSSLayer2 = _interopRequireDefault(_CSSLayer);\n\n  var _CssLayersManager = __webpack_require__(32);\n\n  var _CssLayersManager2 = _interopRequireDefault(_CssLayersManager);\n\n  var _SearchEngine = __webpack_require__(36);\n\n  var _SearchEngine2 = _interopRequireDefault(_SearchEngine);\n\n  var _CustomEventConverter = __webpack_require__(16);\n\n  var _CustomEventConverter2 = _interopRequireDefault(_CustomEventConverter);\n\n  var _CircleTarget = __webpack_require__(68);\n\n  var _CircleTarget2 = _interopRequireDefault(_CircleTarget);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var Book = function (_THREE$EventDispatche) {\n    _inherits(Book, _THREE$EventDispatche);\n\n    // pageCallback samples\n\n    // (n)=> ({\n    //   type: 'image',\n    //   src: 'sample.png',\n    //   interactive: false\n    // });\n    //\n    // (n)=> ({\n    //   type: 'html',\n    //   src: 'sample.html',\n    //   interactive: true\n    // });\n    //\n    // const pdf = new Pdf('sample.pdf');\n    // (n)=> ({\n    //   type: 'pdf',\n    //   src: pdf,\n    //   interactive: false\n    // });\n\n    function Book(visual, sheets, pageCallback, props) {\n      _classCallCheck(this, Book);\n\n      var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));\n\n      sheets = Math.min(3, sheets);\n      visual.jContainer.append('\\n      <style type=\"text/css\">\\n        .demo-msg {\\n          position: absolute;\\n          top: 10px;\\n          right: 10px;\\n          padding: 10px;\\n          background-color: #ffe4e1;\\n          border-radius: 3px;\\n        }\\n      </style>\\n      <div class=\"demo-msg\">\\n        This is the demo version, only 10 pages are available. Use the <a href=\"http://3dflipbook.net/download-jq\" target=\"_blank\">full version</a>.\\n      </div>\\n    ');\n      _this.visual = visual;\n      _this.mouseController = true;\n      _this.p = _extends({}, Book.prepareProps(props), {\n        sheets: sheets,\n        pageCallback: pageCallback,\n        zoom: 1,\n        singlePage: false,\n        autoResolution: {\n          enable: false,\n          k: 1.5\n        }\n      });\n      _this.pageManager = new _PageManager2.default(visual, _this, _this.p);\n      _CSSLayer2.default.init(visual.doc);\n      _this.layerManager = new _CssLayersManager2.default(_this);\n      _this.searchEngine = new _SearchEngine2.default(pageCallback, 2 * (sheets + 2));\n      _this.searchEngine.onPageHitsChanged = function (page, query) {\n        _this.pageManager.refreshPageQuery(page, query);\n        _this.dispatchEvent({\n          type: 'searchResults',\n          results: _this.searchEngine.results,\n          lastPage: page,\n          query: query\n        });\n      };\n\n      _this.three = new _libs.THREE.Object3D();\n\n      _this.binder = new _Binder2.default(visual, _this.p);\n      _this.three.add(_this.binder.three);\n\n      _this.leftCover = new _Cover2.default(visual, _extends({}, _this.p, { setTexture: _this.setLeftCoverTexture.bind(_this) }), Math.PI / 2, 'opened');\n      _this.binder.joinLeftCover(_this.leftCover);\n      _this.subscribeSheetBlock(_this.leftCover, 0);\n      _this.rightCover = new _Cover2.default(visual, _extends({}, _this.p, { setTexture: _this.setRightCoverTexture.bind(_this) }), 0, 'closed');\n      _this.binder.joinRightCover(_this.rightCover);\n      _this.subscribeSheetBlock(_this.rightCover, 2 * (_this.p.sheets + 1));\n\n      _this.threeSheetBlocks = new _libs.THREE.Object3D();\n      _this.three.add(_this.threeSheetBlocks);\n      _this.threeSheetBlocks.position.set(0.5 * _this.p.cover.depth - 0.5 * sheets * _this.p.page.depth, -0.5 * sheets * _this.p.page.depth, 0);\n\n      _this.sheetBlocks = [];\n      if (sheets > 0) {\n        _this.addSheetBlock(0, new _SheetBlock2.default(visual, _extends({}, _this.p, { setTexture: _this.setPageTexture.bind(_this) }), 0, sheets, 0, 'closed'));\n      }\n\n      _this.angle = _this.p.rtl ? Math.PI : 0;\n      _this.closedAngle = 0;\n      _this.set(_this.angle, 0);\n      _this.lastMousePos = {\n        t: 0\n      };\n\n      _this.three.position.set(-0.5 * _this.p.cover.depth + 0.5 * sheets * _this.p.page.depth, 0, 0);\n      _this.sheetPhysics = new _SheetPhysics2.default(_this.p.page.width / _this.p.scale, _this.p.gravity, _this.p.page.cornerDeviation);\n\n      _this.binds = {\n        update: _this.update.bind(_this),\n        lastMousePos: function lastMousePos(e) {\n          _this.lastMousePos = _extends({}, _this.lastMousePos, {\n            pageX: e.pageX,\n            pageY: e.pageY\n          });\n        }\n      };\n      _this.visual.addRenderCallback(_this.binds.update);\n      (0, _libs.$)(_this.visual.element).on('mousemove', _this.binds.lastMousePos);\n\n      _this.binds.onPickCallback = _this.onPickCallback.bind(_this);\n      _this.visual.drag.onPickCallback = _this.binds.onPickCallback;\n      _this.binds.onDragCallback = _this.onDragCallback.bind(_this);\n      _this.visual.drag.onDragCallback = _this.binds.onDragCallback;\n      _this.binds.onReleaseCallback = _this.onReleaseCallback.bind(_this);\n      _this.visual.drag.onReleaseCallback = _this.binds.onReleaseCallback;\n\n      _this.dragAngle = 0.05;\n      _this.tmp = {\n        boxs: [new _libs.THREE.Box3(), new _libs.THREE.Box3()]\n      };\n\n      _this.visual.addObject(_this.three);\n      _this.visual.addEventListener('resize', _this.pageManager.refreshZoom.bind(_this.pageManager));\n\n      setTimeout(function () {\n        _this.notifyBeforeAnimation();\n        _this.notifyAfterAnimation();\n      }, 100);\n      return _this;\n    }\n\n    Book.prototype.dispose = function dispose() {\n      this.visual.removeObject(this.three);\n      this.sheetPhysics.dispose();\n      delete this.visual.drag.onPickCallback;\n      delete this.visual.drag.onDragCallback;\n      delete this.visual.drag.onReleaseCallback;\n      (0, _libs.$)(this.visual.element).off('mousemove', this.binds.lastMousePos);\n      this.visual.removeRenderCallback(this.binds.update);\n      this.removeSheetBlocks(0, this.sheetBlocks.length);\n      this.binder.disconnectLeftCover(this.leftCover);\n      this.removeSheetBlock(this.leftCover);\n      this.binder.disconnectRightCover(this.rightCover);\n      this.removeSheetBlock(this.rightCover);\n      this.binder.dispose();\n      this.layerManager.dispose();\n      _CSSLayer2.default.dispose();\n      this.pageManager.dispose();\n    };\n\n    // publics {\n\n    Book.prototype.setAutoResolution = function setAutoResolution(enable) {\n      var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.5;\n\n      this.p.autoResolution = _extends({}, this.p.autoResolution, {\n        enable: enable,\n        k: k\n      });\n    };\n\n    Book.prototype.setZoom = function setZoom(zoom, singlePage) {\n      if (Math.abs(this.p.zoom - zoom) > 1e-3 || singlePage !== this.p.singlePage) {\n        this.p.zoom = zoom;\n        this.p.singlePage = singlePage;\n        this.pageManager.refreshZoom();\n      }\n    };\n\n    Book.prototype.getPageCallback = function getPageCallback() {\n      return this.p.pageCallback;\n    };\n\n    Book.prototype.setQuery = function setQuery(query) {\n      this.searchEngine.setQuery(query);\n    };\n\n    Book.prototype.isProcessing = function isProcessing() {\n      return this.sheetPhysics.getSize() !== 0;\n    };\n\n    Book.prototype.getPages = function getPages() {\n      return 4 + 2 * this.p.sheets;\n    };\n\n    Book.prototype.setFlipProgressClb = function setFlipProgressClb(clb) {\n      this.p.flipProgressClb = clb;\n    };\n\n    Book.prototype.setInjector = function setInjector(injector) {\n      this.p.injector = injector;\n    };\n\n    Book.prototype.isActivePage = function isActivePage(n) {\n      var res = true;\n      if (n > 1 && n < this.getPages() - 2) {\n        for (var _iterator = this.sheetBlocks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var b = _ref;\n\n          if (n - 2 > 2 * b.p.first && n - 2 < 2 * b.p.last - 1) {\n            res = false;\n            break;\n          }\n        }\n      }\n      return res;\n    };\n\n    Book.prototype.getBlockByPage = function getBlockByPage(n) {\n      var block = void 0;\n      if (n < 2) {\n        block = this.leftCover;\n      } else if (n < 2 * (this.p.sheets + 1)) {\n        for (var _iterator2 = this.sheetBlocks, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n          var _ref2;\n\n          if (_isArray2) {\n            if (_i2 >= _iterator2.length) break;\n            _ref2 = _iterator2[_i2++];\n          } else {\n            _i2 = _iterator2.next();\n            if (_i2.done) break;\n            _ref2 = _i2.value;\n          }\n\n          var b = _ref2;\n\n          if (n - 2 >= 2 * b.p.first && n - 2 < 2 * b.p.last) {\n            block = b;\n            break;\n          }\n        }\n      } else {\n        block = this.rightCover;\n      }\n      return block;\n    };\n\n    Book.prototype.getBlockPages = function getBlockPages(block) {\n      var range = void 0;\n      switch (block) {\n        case this.leftCover:\n          {\n            range = [0, 1];\n            break;\n          }\n        case this.rightCover:\n          {\n            range = [2 * (this.p.sheets + 1), 2 * (this.p.sheets + 1) + 1];\n            break;\n          }\n        default:\n          {\n            range = block ? [2 * (block.p.first + 1), 2 * (block.p.last + 1) - 1] : undefined;\n          }\n      }\n      return range;\n    };\n\n    Book.prototype.getPage = function getPage() {\n      var PI = Math.PI;\n      var p = void 0;\n      if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {\n        for (var _iterator3 = this.sheetBlocks, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n          var _ref3;\n\n          if (_isArray3) {\n            if (_i3 >= _iterator3.length) break;\n            _ref3 = _iterator3[_i3++];\n          } else {\n            _i3 = _iterator3.next();\n            if (_i3.done) break;\n            _ref3 = _i3.value;\n          }\n\n          var block = _ref3;\n\n          if (block.angle <= PI / 2) {\n            p = this.getBlockPages(block)[0] - 1;\n            break;\n          }\n        }\n        if (!p) {\n          p = this.getPages() - 3;\n        }\n      } else if (this.angle < PI / 2) {\n        p = 0;\n      } else if (this.angle > 3 * PI / 2) {\n        p = 1;\n      } else if (this.angle < PI) {\n        p = this.getPages() - 3;\n      } else if (this.angle >= PI) {\n        p = this.getPages() - 1;\n      }\n      return p;\n    };\n\n    Book.prototype.getTopPages = function getTopPages() {\n      var p = this.getPage();\n      return p === 0 || p === this.getPages() - 1 ? [p] : [p, p + 1];\n    };\n\n    Book.prototype.getPageState = function getPageState(n) {\n      return this.pageManager.getPageState(n);\n    };\n\n    Book.prototype.enableLoadingAnimation = function enableLoadingAnimation(enable) {\n      this.pageManager.enableLoadingAnimation(enable);\n    };\n\n    Book.prototype.getLeftFlipping = function getLeftFlipping() {\n      var block = void 0;\n      var left = this.sheetBlocks[0],\n          PI = Math.PI;\n      if (this.angle === PI) {\n        block = this.rightCover;\n      } else {\n        if (left && left.state === 'closed' && left.angle > PI / 2) {\n          block = left;\n        } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {\n          block = this.leftCover;\n        }\n      }\n      return block;\n    };\n\n    Book.prototype.getRightFlipping = function getRightFlipping() {\n      var block = void 0;\n      var right = this.sheetBlocks[this.sheetBlocks.length - 1],\n          PI = Math.PI;\n      if (this.angle === 0) {\n        block = this.leftCover;\n      } else {\n        if (right && right.state === 'closed' && right.angle <= PI / 2) {\n          block = right;\n        } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {\n          block = this.rightCover;\n        }\n      }\n      return block;\n    };\n\n    Book.prototype.getClosedBlockAngle = function getClosedBlockAngle(angle) {\n      var closedAngle = void 0,\n          PI = Math.PI;\n\n      if (this.leftCover.physicId) {\n        var test = void 0;\n        try {\n          test = Math.abs(this.sheetPhysics.getParametr(this.leftCover.physicId, 'angle') - angle);\n        } catch (e) {\n          test = 0;\n        }\n        closedAngle = angle > PI / 2 || test > PI / 6 ? PI / 2 : this.closedAngle;\n      } else if (this.rightCover.physicId) {\n        var _test = void 0;\n        try {\n          _test = Math.abs(this.sheetPhysics.getParametr(this.rightCover.physicId, 'angle') - angle);\n        } catch (e) {\n          _test = 0;\n        }\n        closedAngle = angle < PI / 2 || _test > PI / 6 ? PI / 2 + 1e-7 : this.closedAngle;\n      } else {\n        closedAngle = PI / 2 + (angle !== 0) * 1e-7;\n      }\n\n      return {\n        openedAngle: angle,\n        closedAngle: closedAngle,\n        binderTurn: this.closedAngle\n      };\n    };\n\n    Book.prototype.flipLeft = function flipLeft() {\n      var _this2 = this;\n\n      var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n      var progressClb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.p.flipProgressClb;\n\n      var block = void 0,\n          res = void 0;\n      if (this.sheetPhysics.getSize() < 25) {\n        (function () {\n          var left = _this2.sheetBlocks[0],\n              PI = Math.PI;\n          if (_this2.angle === PI) {\n            res = _this2.connectPhysics(block = _this2.rightCover, _this2.p.cover.mass, PI, -_this2.p.cover.startVelocity, _this2.p.cover.flexibility, 0, function (angle, height) {\n              return _this2.set(3 * PI / 2 - angle / 2, height);\n            }, function (angle, height) {\n              _this2.set(3 * PI / 2 - angle / 2, 0);\n              _this2.setSheetBlocks(angle ? PI : PI / 2 + 1e-7, 'closed');\n            }, progressClb);\n          } else {\n            if (left && left.state === 'closed' && left.angle > PI / 2) {\n              block = size < left.getSize() ? _this2.splitSheetBlock(0, left.getSize() - size)[1] : left;\n              res = _this2.connectPhysics(block, _this2.p.page.mass * block.getSize(), PI, -_this2.p.page.startVelocity, _this2.p.page.flexibility, 0, function (angle, height) {\n                return block.set(_this2.getClosedBlockAngle(angle), 'opened', height);\n              }, Book.finishAnimationClb.bind({ book: _this2, block: block }), progressClb);\n            } else if (_this2.angle === PI / 2 || _this2.angle === 3 * PI / 2) {\n              res = _this2.connectPhysics(block = _this2.leftCover, _this2.p.cover.mass, PI, -_this2.p.cover.startVelocity, _this2.p.cover.flexibility, 0, function (angle, height) {\n                _this2.set(2 * PI - angle / 2, height);\n                if (angle > PI / 2) {\n                  _this2.setSheetBlocks(angle ? PI / 2 : 0, 'closed');\n                }\n              }, function (angle, height) {\n                return _this2.set(angle === 0 ? 0 : 2 * PI - angle / 2, 0);\n              }, progressClb);\n            }\n          }\n        })();\n      }\n      return res;\n    };\n\n    Book.prototype.flipRight = function flipRight() {\n      var _this3 = this;\n\n      var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n      var progressClb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.p.flipProgressClb;\n\n      var block = void 0,\n          res = void 0;\n      if (this.sheetPhysics.getSize() < 25) {\n        (function () {\n          var right = _this3.sheetBlocks[_this3.sheetBlocks.length - 1],\n              PI = Math.PI;\n          if (_this3.angle === 0) {\n            res = _this3.connectPhysics(block = _this3.leftCover, _this3.p.cover.mass, 0, _this3.p.cover.startVelocity, _this3.p.cover.flexibility, 0, function (angle, height) {\n              return _this3.set(angle / 2, height);\n            }, function (angle, height) {\n              _this3.set(angle / 2, 0);\n              _this3.setSheetBlocks(angle ? PI / 2 : 0, 'closed');\n            }, progressClb);\n          } else {\n            if (right && right.state === 'closed' && right.angle <= PI / 2) {\n              block = size < right.getSize() ? _this3.splitSheetBlock(_this3.sheetBlocks.length - 1, size)[0] : right;\n              res = _this3.connectPhysics(block, _this3.p.page.mass * block.getSize(), 0, _this3.p.page.startVelocity, _this3.p.page.flexibility, 0, function (angle, height) {\n                return block.set(_this3.getClosedBlockAngle(angle), 'opened', height);\n              }, Book.finishAnimationClb.bind({ book: _this3, block: block }), progressClb);\n            } else if (_this3.angle === PI / 2 || _this3.angle === 3 * PI / 2) {\n              res = _this3.connectPhysics(block = _this3.rightCover, _this3.p.cover.mass, 0, _this3.p.cover.startVelocity, _this3.p.cover.flexibility, 0, function (angle, height) {\n                _this3.set(PI / 2 + angle / 2, height);\n                if (angle < PI / 2) {\n                  _this3.setSheetBlocks(PI / 2 + 1e-7, 'closed');\n                }\n              }, function (angle, height) {\n                return _this3.set(PI / 2 + angle / 2, 0);\n              }, progressClb);\n            }\n          }\n        })();\n      }\n      return res;\n    };\n\n    // }\n\n    Book.prototype.clearHoverInfo = function clearHoverInfo() {\n      this.pageManager.turnOnEvents();\n      delete this.hoverInfo.block.force;\n      delete this.hoverInfo.block.cornerForce;\n      delete this.hoverInfo;\n    };\n\n    Book.prototype.xSegment = function xSegment() {\n      var boxs = this.tmp.boxs,\n          res = {};\n      if (this.leftCover.physicId) {\n        boxs[0].setFromObject(this.rightCover.three);\n        res.min = -(res.max = boxs[0].max.x);\n      } else if (this.rightCover.physicId) {\n        boxs[0].setFromObject(this.leftCover.three);\n        res.max = -(res.min = boxs[0].min.x);\n      } else {\n        boxs[0].setFromObject(this.leftCover.three);\n        boxs[1].setFromObject(this.rightCover.three);\n        boxs[0].union(boxs[1]);\n        res.min = boxs[0].min.x;\n        res.max = boxs[0].max.x;\n      }\n      return res;\n    };\n\n    Book.prototype.computeTarget = function computeTarget(point) {\n      var x = point.x,\n          y = point.y,\n          seg = this.xSegment(),\n          angle = void 0;\n\n      angle = (seg.max - x) / (seg.max - seg.min) * Math.PI;\n      // angle = Math.acos(x/Math.sqrt(x*x+y*y));\n      return Math.max(this.dragAngle, Math.min(Math.PI - this.dragAngle, angle));\n    };\n\n    Book.prototype.onPickCallback = function onPickCallback(object) {\n      var res = false;\n      var block = object.object.userData.self,\n          p = _extends({}, object.uv),\n          i = object.face.materialIndex;\n      if (i < 2) {\n        p.x = i === 0 ? p.x : 1 - p.x;\n        if (block.cornerTarget.testIntersection(null, p) && block.physicId) {\n          if (this.hoverInfo) {\n            this.clearHoverInfo();\n          }\n          block.force = _SheetPhysics2.default.dragForceClb;\n          block.cornerForce = _SheetPhysics2.default.getDragCornerForceClb(this.computeTarget(object.point));\n          this.dragInfo = {\n            object: object,\n            block: block\n          };\n          res = true;\n          this.pageManager.turnOffEvents();\n        }\n      }\n      return res;\n    };\n\n    Book.prototype.onDragCallback = function onDragCallback(point) {\n      var block = this.dragInfo.block,\n          p = block.getProps();\n      block.force = _SheetPhysics2.default.dragForceClb;\n      block.cornerForce = _SheetPhysics2.default.getDragCornerForceClb(this.computeTarget(point));\n      return true;\n    };\n\n    Book.prototype.onReleaseCallback = function onReleaseCallback() {\n      delete this.dragInfo.block.force;\n      delete this.dragInfo.block.cornerForce;\n      delete this.dragInfo;\n      this.pageManager.turnOnEvents();\n    };\n\n    Book.prototype.getFlipping = function getFlipping(i) {\n      return i ? this.getLeftFlipping() : this.getRightFlipping();\n    };\n\n    Book.prototype.flip = function flip(i) {\n      var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n      return i ? this.flipLeft(size) : this.flipRight(size);\n    };\n\n    Book.prototype.enableMouse = function enableMouse(enable) {\n      this.mouseController = enable;\n    };\n\n    Book.prototype.cornerCallback = function cornerCallback(e, data) {\n      var _this4 = this;\n\n      if (this.mouseController) {\n        (function () {\n          var _data$data = data.data,\n              i = _data$data.i,\n              n = _data$data.n;\n\n          if (e.type === 'mouseover') {\n            if (_this4.hoverInfo && _this4.hoverInfo.pendings !== undefined) {\n              ++_this4.hoverInfo.pendings;\n            } else {\n              if (_this4.hoverInfo) {\n                console.warn('Wrong state: element is already hover');\n                if (_this4.hoverInfo.n !== n) {\n                  _this4.clearHoverInfo();\n                }\n              }\n              if (!_this4.hoverInfo && !_this4.dragInfo) {\n                (function () {\n                  var res = Promise.resolve(undefined);\n                  var hoverAngle = 0.02,\n                      hover = _this4.getBlockByPage(n),\n                      possible = _this4.getFlipping(i);\n                  if (n > 1 && n < 2 * (_this4.p.sheets + 1) && hover.physicId && (hover.angle < hoverAngle || hover.angle > Math.PI - hoverAngle)) {\n                    res = Promise.resolve(hover);\n                  } else if (hover === possible) {\n                    var sheetBlocks = [_this4.leftCover].concat(_this4.sheetBlocks, [_this4.rightCover]);\n                    var j = sheetBlocks.indexOf(hover),\n                        nextBlock = ~j ? sheetBlocks[j + 2 * i - 1] : undefined;\n                    if (!nextBlock || !nextBlock.physicId || nextBlock.angle > hoverAngle && nextBlock.angle < Math.PI - hoverAngle) {\n                      res = _this4.flip(i, 1).then(function (block) {\n                        if (!block) {\n                          delete _this4.hoverInfo;\n                        } else {\n                          _this4.sheetPhysics.setParametr(block.physicId, 'velocity', 0);\n                        }\n                        return block;\n                      });\n                      _this4.hoverInfo = {\n                        pendings: 1\n                      };\n                    }\n                  }\n                  res.then(function (block) {\n                    if (_this4.hoverInfo && _this4.hoverInfo.pendings < 1) {\n                      block = undefined;\n                      delete _this4.hoverInfo;\n                    }\n                    if (block) {\n                      _this4.pageManager.turnOffEvents();\n                      var p = block.getProps();\n                      block.force = _this4.sheetPhysics.getTargetForceClb(p.mass * block.getSize(), i ? Math.PI - hoverAngle : hoverAngle);\n                      block.cornerForce = function () {\n                        return (i ? -1 : 1) * _SheetPhysics2.default.hoverCornerForceClb();\n                      };\n                      _this4.sheetPhysics.setParametr(block.physicId, 'angle', i ? Math.PI - 0.5 * hoverAngle : 0.5 * hoverAngle);\n                      _this4.hoverInfo = {\n                        n: n,\n                        block: block\n                      };\n                      _this4.update(1 / 30);\n                    }\n                  });\n                })();\n              }\n            }\n          } else if (_this4.hoverInfo && e.type === 'mouseout') {\n            if (_this4.hoverInfo.pendings !== undefined) {\n              --_this4.hoverInfo.pendings;\n            } else if (n === _this4.hoverInfo.n) {\n              _this4.clearHoverInfo();\n            }\n          } else if (e.type === 'mousedown') {\n            _this4.cornerClickData = {\n              x: e.pageX,\n              y: e.pageY\n            };\n          } else if (e.type === 'click') {\n            if (Math.sqrt(Math.pow(_this4.cornerClickData.x - e.pageX, 2) + Math.pow(_this4.cornerClickData.y - e.pageY, 2)) < 5) {\n              var hover = _this4.getBlockByPage(n);\n              if (hover.physicId) {\n                var id = hover.physicId,\n                    props = hover.getProps();\n                _this4.sheetPhysics.setParametr(id, 'velocity', (i ? -1 : 1) * props.startVelocity);\n              }\n            }\n            delete _this4.cornerClickData;\n          }\n        })();\n      }\n    };\n\n    Book.prototype.addSheetBlock = function addSheetBlock(p, block) {\n      this.sheetBlocks.splice(p, 0, block);\n      this.subscribeSheetBlock(block, 2);\n      this.threeSheetBlocks.add(block.three);\n    };\n\n    Book.prototype.subscribeSheetBlock = function subscribeSheetBlock(block, offset) {\n      var _this5 = this;\n\n      var eventConverter = new _CustomEventConverter2.default(this.visual.wnd, this.visual.doc, _CircleTarget2.default.test),\n          r = 0.15,\n          target = new _CircleTarget2.default(1 - 0.5 * r, 0.5 * r, r);\n      target.block = block;\n      target.callback = this.cornerCallback.bind(this);\n      eventConverter.addCustom(target);\n      block.cornerTarget = target;\n      block.three.userData.mouseCallback = function (e, data) {\n        var i = data.face.materialIndex;\n        if (i < 2) {\n          var n = i === 0 ? offset + 2 * block.p.first : offset + 2 * block.p.last - 1;\n          eventConverter.convert(e, { x: i === 0 ? data.uv.x : 1 - data.uv.x, y: data.uv.y, i: i, n: n });\n          _this5.pageManager.transferEventToTexture(n, e, data);\n        }\n      };\n      block.three.userData.touchCallback = function (e, data) {\n        var i = data.face.materialIndex;\n        if (i < 2) {\n          var n = i === 0 ? offset + 2 * block.p.first : offset + 2 * block.p.last - 1;\n          _this5.pageManager.transferEventToTexture(n, e, data);\n        }\n      };\n      this.visual.drag.addThree(block.three);\n      this.visual.mouseEvents.addThree(block.three);\n      this.visual.touchEvents.addThree(block.three);\n    };\n\n    Book.prototype.removeSheetBlock = function removeSheetBlock(block) {\n      this.visual.mouseEvents.removeThree(block.three);\n      this.visual.touchEvents.removeThree(block.three);\n      this.visual.drag.removeThree(block.three);\n      this.threeSheetBlocks.remove(block.three);\n      block.dispose();\n    };\n\n    Book.prototype.removeSheetBlocks = function removeSheetBlocks(first, size) {\n      var blocks = this.sheetBlocks.splice(first, size);\n      for (var _iterator4 = blocks, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i4 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i4++];\n        } else {\n          _i4 = _iterator4.next();\n          if (_i4.done) break;\n          _ref4 = _i4.value;\n        }\n\n        var block = _ref4;\n\n        this.removeSheetBlock(block);\n      }\n    };\n\n    Book.prototype.setTexture = function setTexture(material, n) {\n      this.pageManager.setTexture(material, n);\n    };\n\n    Book.prototype.setPageTexture = function setPageTexture(material, n) {\n      this.setTexture(material, n + 2);\n    };\n\n    Book.prototype.setLeftCoverTexture = function setLeftCoverTexture(material, n) {\n      this.setTexture(material, n);\n    };\n\n    Book.prototype.setRightCoverTexture = function setRightCoverTexture(material, n) {\n      this.setTexture(material, n + 2 * (this.p.sheets + 1));\n    };\n\n    Book.finishAnimationClb = function finishAnimationClb(angle) {\n      this.block.set(this.book.getClosedBlockAngle(angle).closedAngle, 'closed', 0);\n      var i = this.book.sheetBlocks.indexOf(this.block);\n      if (~i) {\n        if (angle === 0) {\n          this.book.mergeSheetBlocks(i, this.book.sheetBlocks.length - i);\n        } else {\n          this.book.mergeSheetBlocks(0, i + 1);\n        }\n      }\n    };\n\n    Book.prototype.calcBlockForce = function calcBlockForce(block, object, angle, velocity, cornerHeight) {\n      return block.force ? block.force(object, angle, velocity, cornerHeight) : 0;\n    };\n\n    Book.prototype.calcBlockCornerForce = function calcBlockCornerForce(block, object, angle, velocity, cornerHeight) {\n      return block.cornerForce ? block.cornerForce(object, angle, velocity, cornerHeight) : 0;\n    };\n\n    Book.prototype.notifyBeforeAnimation = function notifyBeforeAnimation() {\n      var res = void 0;\n      if (this.animationNotification) {\n        res = Promise.reject();\n      } else {\n        this.animationNotification = true;\n        this.dispatchEvent({\n          type: 'beforeAnimation'\n        });\n        res = this.layerManager.hide();\n      }\n      return res;\n    };\n\n    Book.prototype.notifyAfterAnimation = function notifyAfterAnimation() {\n      if (this.animationNotification) {\n        delete this.animationNotification;\n        this.layerManager.show();\n        this.dispatchEvent({\n          type: 'afterAnimation'\n        });\n      }\n    };\n\n    Book.prototype.connectPhysics = function connectPhysics(block, mass, angle, velocity, flexibility, coverHeight, simulateClb, removeClb, progressClb) {\n      var _this6 = this;\n\n      var type = function type() {\n        return _this6.hoverInfo ? 'hover' : _this6.dragInfo ? 'drag' : 'free';\n      },\n          res = this.sheetPhysics.getSize() ? Promise.resolve() : this.notifyBeforeAnimation();\n      return res.then(function () {\n        block.physicId = _this6.sheetPhysics.addObject(mass, angle, velocity, flexibility, coverHeight, function (angl, ch) {\n          simulateClb(angl, ch);\n          progressClb(block, Math.abs(angle - angl) / Math.PI, 'process', type());\n        }, function (angl, ch) {\n          removeClb(angl, ch);\n          delete block.physicId;\n          progressClb(block, Math.abs(angle - angl) / Math.PI, 'finish', type());\n          Promise.resolve().then(function () {\n            if (!_this6.sheetPhysics.getSize()) {\n              _this6.notifyAfterAnimation();\n            }\n          });\n        }, function (object, angle, velocity, cornerHeight) {\n          return _this6.calcBlockForce(block, object, angle, velocity, cornerHeight);\n        }, function (object, angle, velocity, cornerHeight) {\n          return _this6.calcBlockCornerForce(block, object, angle, velocity, cornerHeight);\n        });\n        progressClb(block, 0, 'init', type());\n        return block;\n      }).catch(function () {\n        return undefined;\n      });\n    };\n\n    Book.prototype.update = function update(dt) {\n      var _this7 = this;\n\n      this.lastMousePos.t += dt;\n      if (this.isProcessing() && this.lastMousePos.pageX !== undefined && this.lastMousePos.t - (this.lastMousePos.lastT || 0) > 0.25 && !this.hoverInfo && !this.dragInfo) {\n        this.lastMousePos.lastT = this.lastMousePos.t;\n        Promise.resolve().then(function () {\n          (0, _libs.$)(_this7.visual.element).trigger(_libs.$.Event('mousemove', _this7.lastMousePos));\n        });\n      }\n      this.sheetPhysics.simulate(dt);\n    };\n\n    Book.prototype.splitSheetBlock = function splitSheetBlock(i, leftSize) {\n      var block = this.sheetBlocks[i];\n      if (block && leftSize < block.getSize()) {\n        var newBlock = new _SheetBlock2.default(this.visual, _extends({}, this.p, { setTexture: this.setPageTexture.bind(this) }), block.p.first, block.p.first + leftSize, block.angle, block.state);\n        block.set(block.angle, block.state, block.corner.height, block.p.first + leftSize, block.p.last);\n        this.addSheetBlock(i, newBlock);\n        return [newBlock, block];\n      }\n    };\n\n    Book.prototype.mergeSheetBlocks = function mergeSheetBlocks(first, size) {\n      if (first < this.sheetBlocks.length) {\n        size = Math.min(this.sheetBlocks.length - first, size);\n        var firstBlock = this.sheetBlocks[first],\n            lastBlock = this.sheetBlocks[first + size - 1];\n        firstBlock.set(firstBlock.angle, firstBlock.state, firstBlock.corner.height, firstBlock.p.first, lastBlock.p.last);\n        this.removeSheetBlocks(first + 1, size - 1);\n      }\n    };\n\n    Book.prototype.setSheetBlocks = function setSheetBlocks(angle, state) {\n      if (state === 'closed') {\n        this.closedAngle = angle;\n      }\n      this.sheetBlocks.forEach(function (s) {\n        if (!s.physicId) {\n          s.set(angle, state);\n        }\n      });\n    };\n\n    Book.prototype.set = function set(angle) {\n      var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      this.angle = angle;\n      var PI = Math.PI;\n      if (angle < PI / 4) {\n        this.binder.set(0);\n\n        this.binder.setLeft(-PI / 2 + 2 * angle);\n        this.leftCover.set(PI / 2, 'opened', height);\n\n        this.setSheetBlocks(0, 'closed');\n\n        this.binder.setRight(0);\n        this.rightCover.set(0, 'closed', 0);\n      } else if (angle < 2 * PI / 4) {\n        var a = 2 * (angle - PI / 4);\n        this.binder.set(a);\n\n        this.binder.setLeft(-a);\n        this.leftCover.set(PI / 2 + a, 'opened', height);\n\n        this.setSheetBlocks(a, 'closed');\n\n        this.binder.setRight(-a);\n        this.rightCover.set(a, 'closed', 0);\n      } else if (angle < 3 * PI / 4) {\n        var _a = 2 * (angle - PI / 2);\n        this.binder.set(PI / 2);\n\n        this.binder.setLeft(-PI / 2);\n        this.leftCover.set(PI, 'opened', 0);\n\n        this.binder.setRight(-PI / 2);\n        this.rightCover.set(_a, 'opened', height);\n      } else if (angle < 4 * PI / 4) {\n        var _a2 = 2 * (angle - 3 * PI / 4) + PI / 2;\n        this.binder.set(_a2);\n\n        this.binder.setLeft(-_a2);\n        this.leftCover.set(_a2, 'closed', 0);\n\n        this.setSheetBlocks(_a2, 'closed');\n\n        this.binder.setRight(-PI / 2);\n        this.rightCover.set(PI / 2, 'opened', height);\n      } else if (angle < 5 * PI / 4) {\n        this.binder.set(PI);\n\n        this.binder.setLeft(-PI);\n        this.leftCover.set(PI, 'closed', 0);\n\n        this.setSheetBlocks(PI, 'closed');\n\n        this.binder.setRight(-PI / 2 - 2 * (angle - PI));\n        this.rightCover.set(PI / 2, 'opened', height);\n      } else if (angle < 6 * PI / 4) {\n        var _a3 = 2 * (angle - 5 * PI / 4);\n        this.binder.set(PI - _a3);\n\n        this.binder.setLeft(-PI + _a3);\n        this.leftCover.set(PI - _a3, 'closed', 0);\n\n        this.setSheetBlocks(PI - _a3, 'closed');\n\n        this.binder.setRight(-PI + _a3);\n        this.rightCover.set(PI / 2 - _a3, 'opened', height);\n      } else if (angle < 7 * PI / 4) {\n        var _a4 = 2 * (angle - 6 * PI / 4);\n        this.binder.set(PI / 2);\n\n        this.binder.setLeft(-PI / 2);\n        this.leftCover.set(PI - _a4, 'opened', height);\n\n        this.binder.setRight(-PI / 2);\n        this.rightCover.set(0, 'opened', 0);\n      } else if (angle < 8 * PI / 4) {\n        var _a5 = 2 * (angle - 7 * PI / 4);\n        this.binder.set(PI / 2 - _a5);\n\n        this.binder.setLeft(-PI / 2);\n        this.leftCover.set(PI / 2, 'opened', height);\n\n        this.setSheetBlocks(PI / 2 - _a5, 'closed');\n\n        this.binder.setRight(-PI / 2 + _a5);\n        this.rightCover.set(PI / 2 - _a5, 'closed', 0);\n      }\n    };\n\n    Book.createSideTexture = function createSideTexture(color) {\n      var jC = (0, _libs.$)('<canvas width=\"8\" height=\"8\"></canvas>');\n      var ctx = jC[0].getContext('2d');\n      ctx.beginPath();\n      ctx.fillStyle = _GraphUtils2.default.color2Rgba(color, 1);\n      ctx.rect(0, 0, 8, 7);\n      ctx.fill();\n      ctx.beginPath();\n      ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(color, 0.5), 1);\n      ctx.rect(0, 7, 8, 1);\n      ctx.fill();\n      return jC[0];\n    };\n\n    Book.prepareProps = function prepareProps(props) {\n      return Book.calcProps(Book.mergeProps((0, _book.props)(), props));\n    };\n\n    Book.mergeProps = function mergeProps(first, second) {\n      second = second || {};\n      return _extends({}, first, second, {\n        sheet: _extends({}, first.sheet, second.sheet),\n        cover: _extends({}, first.cover, second.cover),\n        page: _extends({}, first.page, second.page),\n        cssLayerProps: _extends({}, first.cssLayerProps, second.cssLayerProps)\n      });\n    };\n\n    Book.calcProps = function calcProps(props) {\n      var p = _extends({}, props, {\n        sheet: _extends({}, props.sheet),\n        cover: _extends({}, props.sheet, props.cover),\n        page: _extends({}, props.sheet, props.page),\n        cssLayerProps: _extends({}, props.cssLayerProps, {\n          $: _libs.$\n        })\n      }),\n          scale = 10,\n          height = scale * p.height,\n          width = scale * p.width,\n          flipProgressClb = function flipProgressClb() {\n        return undefined;\n      },\n          sheet = {\n        sideTexture: p.sheet.sideTexture || Book.createSideTexture(p.sheet.color)\n      },\n          cover = _extends({}, sheet, p.cover, {\n        depth: scale * p.cover.depth,\n        width: width,\n        height: height,\n        padding: scale * p.cover.padding\n      }),\n          page = _extends({}, sheet, p.page, {\n        depth: scale * p.page.depth,\n        width: cover.width - cover.padding,\n        height: cover.height - 2 * cover.padding\n      }),\n          marker = {\n        use: false,\n        color: 0XFF0000,\n        size: scale * 0.001\n      };\n      if (cover.color !== sheet.color && !p.cover.sideTexture) {\n        cover.sideTexture = Book.createSideTexture(cover.color);\n      }\n      if (page.color !== sheet.color && !p.page.sideTexture) {\n        page.sideTexture = Book.createSideTexture(page.color);\n      }\n      return _extends({}, p, { scale: scale, height: height, width: width, flipProgressClb: flipProgressClb, cover: cover, page: page, marker: marker });\n    };\n\n    return Book;\n  }(_libs.THREE.EventDispatcher);\n\n  exports.default = Book;\n\n  /***/\n},\n/* 27 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _typeof = typeof Symbol === \"function\" && _typeof2(Symbol.iterator) === \"symbol\" ? function (obj) {\n    return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n  } : function (obj) {\n    return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);\n  };\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(1);\n\n  var _Controller2 = __webpack_require__(15);\n\n  var _Controller3 = _interopRequireDefault(_Controller2);\n\n  var _bookController = __webpack_require__(42);\n\n  var _EventsToActions = __webpack_require__(49);\n\n  var _EventsToActions2 = _interopRequireDefault(_EventsToActions);\n\n  var _stats = __webpack_require__(70);\n\n  var _stats2 = _interopRequireDefault(_stats);\n\n  var _Object3DWatcher = __webpack_require__(55);\n\n  var _Object3DWatcher2 = _interopRequireDefault(_Object3DWatcher);\n\n  var _FullScreen = __webpack_require__(50);\n\n  var _FullScreen2 = _interopRequireDefault(_FullScreen);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var BookController = function (_Controller) {\n    _inherits(BookController, _Controller);\n\n    function BookController(book, view, props) {\n      _classCallCheck(this, BookController);\n\n      var _this = _possibleConstructorReturn(this, _Controller.call(this));\n\n      _this.navigationControls = true;\n      _this.book = book;\n      _this.visual = book.visual;\n      _this.p = BookController.prepareProps(props);\n      _this.p.rtl = book.p.rtl;\n      _this.devicePixelRatio = _this.visual.wnd.devicePixelRatio || 1;\n\n      _this.orbit = book.visual.getOrbit();\n      book.setFlipProgressClb(_this.updateViewIfState.bind(_this));\n      _this.view = view;\n      _this.bindActions();\n\n      _this.state = {\n        smartPan: !_this.actions['cmdSmartPan'].active,\n        singlePage: _this.actions['cmdSinglePage'].active || _this.actions['cmdSinglePage'].activeForMobile && _this.devicePixelRatio > 1,\n        stats: _this.actions['cmdStats'].active,\n        lighting: _this.p.lighting.default,\n        activeSide: 1\n      };\n\n      _this.boxs = [new _libs.THREE.Box3(), new _libs.THREE.Box3()];\n      _this.bookWatcher = new _Object3DWatcher2.default(_this.visual, function () {\n        if (_this.state.singlePage) {\n          if (_this.state.activeSide) {\n            _this.boxs[0].setFromObject(book.rightCover.three);\n          } else {\n            _this.boxs[0].setFromObject(book.leftCover.three);\n          }\n        } else {\n          _this.boxs[0].setFromObject(book.leftCover.three);\n          _this.boxs[1].setFromObject(book.rightCover.three);\n          _this.boxs[0].union(_this.boxs[1]);\n        }\n        return _this.boxs[0];\n      });\n      _this.bookWatcher.scale = _this.p.scale.default;\n      _this.book.setZoom(_this.bookWatcher.scale, _this.state.singlePage);\n\n      _this.Stats = new _stats2.default();\n      _this.Stats.domElement.style.position = 'absolute';\n      _this.Stats.domElement.style.top = '0px';\n\n      _this.visual.setExtraLighting(_this.state.lighting);\n      _this.binds = {\n        onScreenModeChanged: _this.onScreenModeChanged.bind(_this),\n        stats: _this.Stats.update.bind(_this.Stats),\n        onUpdateView: _this.updateView.bind(_this)\n      };\n      _FullScreen2.default.addEventListener(_this.view.getParentContainer().ownerDocument, _this.binds.onScreenModeChanged);\n\n      _this.cmdSmartPan();\n\n      if (_this.view.templateObject.appLoaded) {\n        Promise.resolve().then(_this.view.templateObject.appLoaded);\n      }\n\n      _this.book.enableLoadingAnimation(_this.p.loadingAnimation.book);\n      if (_this.p.loadingAnimation.skin) {\n        _this.initLoadingAnimation();\n      }\n\n      _this.book.enableLoadingAnimation(_this.p.loadingAnimation.book);\n      _this.book.setAutoResolution(_this.p.autoResolution.enabled, _this.p.autoResolution.coefficient);\n      return _this;\n    }\n\n    BookController.prototype.dispose = function dispose() {\n      _FullScreen2.default.removeEventListener(this.view.getParentContainer().ownerDocument, this.binds.onScreenModeChanged);\n      delete this.book;\n      delete this.view;\n      delete this.visual;\n    };\n\n    BookController.prototype.initLoadingAnimation = function initLoadingAnimation() {\n      var _this2 = this;\n\n      var handler = function handler() {\n        var pages = _this2.book.getTopPages();\n        var visible = false;\n        for (var _iterator = pages, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var n = _ref;\n\n          var state = _this2.book.getPageState(n);\n          visible = state === undefined || state === 'loading';\n          if (visible) {\n            break;\n          }\n        }\n        _this2.view.setState('widLoading', {\n          visible: visible\n        });\n      };\n      this.book.addEventListener('beforeAnimation', handler);\n      this.book.addEventListener('afterAnimation', handler);\n      this.book.addEventListener('loadPage', handler);\n      this.book.addEventListener('loadedPage', handler);\n    };\n\n    BookController.prototype.enableNavigation = function enableNavigation(enable) {\n      this.navigationControls = enable;\n    };\n\n    BookController.prototype.setTocCtrl = function setTocCtrl(tocCtrl) {\n      this.tocCtrl = tocCtrl;\n      this.tocCtrl.onChange = this.updateView.bind(this);\n      this.updateView();\n    };\n\n    BookController.prototype.setPrinter = function setPrinter(printer) {\n      this.printer = printer;\n      this.updateView();\n    };\n\n    BookController.prototype.setSounds = function setSounds(sounds) {\n      this.sounds = sounds;\n      sounds.setEnabled(this.actions['cmdSounds'].active);\n      this.updateView();\n    };\n\n    BookController.prototype.onScreenModeChanged = function onScreenModeChanged(e) {\n      this.updateView();\n    };\n\n    BookController.prototype.canZoomIn = function canZoomIn() {\n      return !this.state.smartPan || Math.abs(this.bookWatcher.scale - this.p.scale.max) > this.p.eps;\n    };\n\n    BookController.prototype.canZoomOut = function canZoomOut() {\n      return !this.state.smartPan || Math.abs(this.bookWatcher.scale - this.p.scale.min) > this.p.eps;\n    };\n\n    BookController.prototype.canDefaultZoom = function canDefaultZoom() {\n      return this.state.smartPan;\n    };\n\n    BookController.prototype.setBookZoom = function setBookZoom(scale) {\n      var _this3 = this;\n\n      setTimeout(function () {\n        if (_this3.bookWatcher.scale === scale) {\n          _this3.book.setZoom(scale, _this3.state.singlePage);\n        }\n      }, 1000);\n    };\n\n    BookController.prototype.cmdZoomIn = function cmdZoomIn() {\n      if (this.state.smartPan) {\n        this.bookWatcher.scale = Math.min(this.p.scale.max, this.bookWatcher.scale + this.p.scale.delta);\n        this.setBookZoom(this.bookWatcher.scale);\n      } else {\n        this.orbit.zoomIn(6.6 * this.p.scale.delta / 0.32);\n      }\n      this.updateView();\n    };\n\n    BookController.prototype.cmdZoomOut = function cmdZoomOut() {\n      if (this.state.smartPan) {\n        this.bookWatcher.scale = Math.max(this.p.scale.min, this.bookWatcher.scale - this.p.scale.delta);\n        this.setBookZoom(this.bookWatcher.scale);\n      } else {\n        this.orbit.zoomOut(6.6 * this.p.scale.delta / 0.32);\n      }\n      this.updateView();\n    };\n\n    BookController.prototype.cmdDefaultZoom = function cmdDefaultZoom() {\n      if (this.state.smartPan) {\n        this.bookWatcher.scale = this.p.scale.default;\n        this.setBookZoom(this.bookWatcher.scale);\n        this.updateView();\n      }\n    };\n\n    BookController.prototype.cmdToc = function cmdToc() {\n      if (this.tocCtrl) {\n        this.tocCtrl.togle();\n      }\n    };\n\n    BookController.prototype.cmdFastBackward = function cmdFastBackward() {\n      this.startFlip(this.book.flipLeft(5));\n    };\n\n    BookController.prototype.cmdBackward = function cmdBackward() {\n      var _this4 = this;\n\n      if (this.state.singlePage) {\n        this.state.activeSide = (this.getPage() + 1) % 2;\n        if (this.state.activeSide) {\n          this.state.activeSide = 0;\n          this.updateView();\n        } else {\n          this.startFlip(this.book.flipLeft(1)).then(function (block) {\n            if (block) {\n              _this4.state.activeSide = 1;\n            }\n          });\n        }\n      } else {\n        this.startFlip(this.book.flipLeft(1));\n      }\n    };\n\n    BookController.prototype.cmdForward = function cmdForward() {\n      var _this5 = this;\n\n      if (this.state.singlePage) {\n        this.state.activeSide = (this.getPage() + 1) % 2;\n        if (!this.state.activeSide) {\n          this.state.activeSide = 1;\n          this.updateView();\n        } else {\n          this.startFlip(this.book.flipRight(1)).then(function (block) {\n            if (block) {\n              _this5.state.activeSide = 0;\n            }\n          });\n        }\n      } else {\n        this.startFlip(this.book.flipRight(1));\n      }\n    };\n\n    BookController.prototype.cmdFastForward = function cmdFastForward() {\n      this.startFlip(this.book.flipRight(5));\n    };\n\n    BookController.prototype.cmdSave = function cmdSave() {\n      window.open(this.p.downloadURL, '_blank');\n    };\n\n    BookController.prototype.cmdPrint = function cmdPrint() {\n      this.printer.print();\n    };\n\n    BookController.prototype.cmdFullScreen = function cmdFullScreen() {\n      if (!_FullScreen2.default.activated()) {\n        _FullScreen2.default.request(this.view.getParentContainer());\n      } else {\n        _FullScreen2.default.cancel();\n      }\n    };\n\n    BookController.prototype.cmdSmartPan = function cmdSmartPan() {\n      this.state.smartPan = !this.state.smartPan;\n      if (this.state.smartPan) {\n        this.orbit.minAzimuthAngle = 0;\n        this.orbit.maxAzimuthAngle = 0;\n        this.orbit.minPolarAngle = 0;\n        this.orbit.maxPolarAngle = Math.PI / 4;\n        this.bookWatcher.enabled = true;\n      } else {\n        this.orbit.minAzimuthAngle = -Infinity;\n        this.orbit.maxAzimuthAngle = Infinity;\n        this.orbit.minPolarAngle = 0;\n        this.orbit.maxPolarAngle = Math.PI;\n        this.bookWatcher.enabled = false;\n      }\n      this.updateView();\n    };\n\n    BookController.prototype.cmdSinglePage = function cmdSinglePage() {\n      this.state.singlePage = !this.state.singlePage;\n      this.setBookZoom(this.bookWatcher.scale);\n      this.updateView();\n    };\n\n    BookController.prototype.cmdSounds = function cmdSounds() {\n      if (this.sounds) {\n        this.sounds.togle();\n      }\n      this.updateView();\n    };\n\n    BookController.prototype.cmdStats = function cmdStats() {\n      this.state.stats = !this.state.stats;\n      if (this.state.stats) {\n        (0, _libs.$)(this.view.getContainer()).append(this.Stats.domElement);\n        this.visual.addRenderCallback(this.binds.stats);\n      } else {\n        (0, _libs.$)(this.view.getContainer()).find(this.Stats.domElement).remove();\n        this.visual.removeRenderCallback(this.binds.stats);\n      }\n      this.updateView();\n    };\n\n    BookController.prototype.cmdLightingUp = function cmdLightingUp() {\n      this.state.lighting = Math.min(this.state.lighting + this.p.lighting.delta, this.p.lighting.max);\n      this.visual.setExtraLighting(this.state.lighting);\n      this.updateView();\n    };\n\n    BookController.prototype.cmdLightingDown = function cmdLightingDown() {\n      this.state.lighting = Math.max(this.state.lighting - this.p.lighting.delta, this.p.lighting.min);\n      this.visual.setExtraLighting(this.state.lighting);\n      this.updateView();\n    };\n\n    BookController.prototype.goToPage = function goToPage(page) {\n      var _this6 = this;\n\n      if (this.p.rtl) {\n        page = this.book.getPages() - 1 - page;\n      }\n      var pageNum = Math.max(Math.min(page, this.book.getPages() - 1), 0);\n      this.state.activeSide = (pageNum + 1) % 2;\n      var target = Math.max(Math.min(page - 1 + page % 2, this.book.getPages() - 1), 0),\n          current = this.book.getPage(),\n          flips = [],\n          covs = 0;;\n      if (target != current) {\n        if (current === 0) {\n          flips.push(1);\n          current += 1;\n          ++covs;\n        } else if (current === this.book.getPages() - 1) {\n          flips.push(-1);\n          current -= 2;\n          ++covs;\n        }\n        var cv = 0;\n        if (target === 0) {\n          cv = -1;\n          target += 1;\n          ++covs;\n        } else if (target === this.book.getPages() - 1) {\n          cv = 1;\n          target -= 2;\n          ++covs;\n        }\n        if (target - current) {\n          flips.push(Math.ceil((target - current) / 2));\n        }\n        if (cv) {\n          flips.push(cv);\n        }\n      }\n\n      var setClb = function setClb(fl, time, clb) {\n        setTimeout(function () {\n          if (fl < 0) {\n            _this6.startFlip(_this6.book.flipLeft(-fl, clb));\n          } else {\n            _this6.startFlip(_this6.book.flipRight(fl, clb));\n          }\n        }, time);\n      };\n\n      if (covs === 2) {\n        setClb(flips[0], 0, function (block, progress, state) {\n          if (state == 'finish' && progress == 1) {\n            setClb(flips[flips.length - 1], 0);\n          }\n        });\n        setClb(flips[1], 500);\n      } else {\n        var time = 0;\n        for (var _iterator2 = flips, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n          var _ref2;\n\n          if (_isArray2) {\n            if (_i2 >= _iterator2.length) break;\n            _ref2 = _iterator2[_i2++];\n          } else {\n            _i2 = _iterator2.next();\n            if (_i2.done) break;\n            _ref2 = _i2.value;\n          }\n\n          var fl = _ref2;\n\n          setClb(fl, time);\n          time += 250;\n        }\n      }\n    };\n\n    BookController.prototype.startFlip = function startFlip(flipRes) {\n      var _this7 = this;\n\n      return flipRes ? flipRes.then(function (block) {\n        if (block) {\n          _this7.dispatchAsync({\n            type: 'startFlip'\n          });\n        }\n        return block;\n      }) : Promise.resolve(undefined);\n    };\n\n    BookController.prototype.endFlip = function endFlip(block) {\n      this.dispatchAsync({\n        type: 'endFlip'\n      });\n      return block;\n    };\n\n    BookController.prototype.getPage = function getPage() {\n      var page = this.book.getPage();\n      return page ? Math.min(this.book.getPage() + this.state.activeSide, this.book.getPages() - 1) : 0;\n    };\n\n    BookController.prototype.getPageForGUI = function getPageForGUI() {\n      var n = (this.state.singlePage ? this.getPage() : this.book.getPage()) + 1;\n      if (this.p.rtl) {\n        n = this.book.getPages() - n + 1;\n      }\n      return n;\n    };\n\n    BookController.prototype.inpPage = function inpPage(e, data) {\n      this.goToPage(data - 1);\n    };\n\n    BookController.prototype.updateViewIfState = function updateViewIfState(block, progress, state, type) {\n      if (state === 'init' || state === 'finish') {\n        setTimeout(this.updateView.bind(this), 100);\n      }\n      if (state === 'finish') {\n        this.endFlip(block);\n      }\n    };\n\n    BookController.prototype.updateViewState = function updateViewState() {\n      this.viewState = {\n        'cmdZoomIn': {\n          enable: this.canZoomIn(),\n          visible: this.actions['cmdZoomIn'].enabled,\n          active: false\n        },\n        'cmdZoomOut': {\n          enable: this.canZoomOut(),\n          visible: this.actions['cmdZoomOut'].enabled,\n          active: false\n        },\n        'cmdDefaultZoom': {\n          enable: this.canDefaultZoom(),\n          visible: this.actions['cmdDefaultZoom'].enabled,\n          active: this.canDefaultZoom() && Math.abs(this.bookWatcher.scale - this.p.scale.default) < this.p.eps\n        },\n        'cmdToc': {\n          enable: !!this.tocCtrl,\n          visible: this.actions['cmdToc'].enabled && this.tocCtrl,\n          active: this.tocCtrl && this.tocCtrl.visible\n        },\n        'inpPages': {\n          visible: true,\n          value: this.book.getPages()\n        },\n        'inpPage': {\n          visible: true,\n          enable: !this.book.isProcessing() && this.navigationControls,\n          value: this.getPageForGUI()\n        },\n        'cmdSave': {\n          enable: true,\n          visible: this.actions['cmdSave'].enabled && !!this.p.downloadURL,\n          active: false\n        },\n        'cmdPrint': {\n          enable: true,\n          visible: this.actions['cmdPrint'].enabled && !!this.printer,\n          active: false\n        },\n        'cmdFullScreen': {\n          enable: _FullScreen2.default.available(),\n          visible: this.actions['cmdFullScreen'].enabled,\n          active: _FullScreen2.default.available() && _FullScreen2.default.activated()\n        },\n        'widSettings': {\n          enable: true,\n          visible: this.actions['widSettings'].enabled,\n          active: false\n        },\n        'cmdSmartPan': {\n          enable: true,\n          visible: this.actions['cmdSmartPan'].enabled,\n          active: this.state.smartPan\n        },\n        'cmdSinglePage': {\n          enable: true,\n          visible: this.actions['cmdSinglePage'].enabled,\n          active: this.state.singlePage\n        },\n        'cmdSounds': {\n          enable: true,\n          visible: this.actions['cmdSounds'].enabled && !!this.sounds,\n          active: !!this.sounds && this.sounds.enabled\n        },\n        'cmdStats': {\n          enable: true,\n          visible: this.actions['cmdStats'].enabled,\n          active: this.state.stats\n        },\n        'cmdLightingUp': {\n          enable: Math.abs(this.state.lighting - this.p.lighting.max) > this.p.eps,\n          visible: this.actions['cmdLightingUp'].enabled,\n          active: false\n        },\n        'cmdLightingDown': {\n          enable: Math.abs(this.state.lighting - this.p.lighting.min) > this.p.eps,\n          visible: this.actions['cmdLightingDown'].enabled,\n          active: false\n        }\n      };\n\n      var left = this.book.getLeftFlipping(),\n          right = this.book.getRightFlipping();\n      var flippersEnable = {\n        cmdFastBackward: !!left && this.navigationControls,\n        cmdBackward: !!left && this.navigationControls,\n        cmdForward: !!right && this.navigationControls,\n        cmdFastForward: !!right && this.navigationControls\n      };\n      for (var _iterator3 = Object.keys(flippersEnable), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) break;\n          _ref3 = _i3.value;\n        }\n\n        var name = _ref3;\n\n        this.viewState[name] = {\n          enable: flippersEnable[name],\n          visible: this.actions[name].enabled,\n          active: false\n        };\n      };\n    };\n\n    BookController.prototype.updateView = function updateView() {\n      if (this.view) {\n        this.updateViewState();\n        for (var _iterator4 = Object.keys(this.viewState), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n          var _ref4;\n\n          if (_isArray4) {\n            if (_i4 >= _iterator4.length) break;\n            _ref4 = _iterator4[_i4++];\n          } else {\n            _i4 = _iterator4.next();\n            if (_i4.done) break;\n            _ref4 = _i4.value;\n          }\n\n          var name = _ref4;\n\n          this.view.setState(name, this.viewState[name]);\n        }\n      }\n    };\n\n    BookController.prototype.getActions = function getActions() {\n      var _this8 = this;\n\n      var isSwipping = function isSwipping(name) {\n        return _this8.actions.touchCmdSwipe.enabled && _this8.actions.touchCmdSwipe.code === _this8.actions[name].code && _this8.state.smartPan && _this8.bookWatcher.scale <= 1;\n      },\n          cmds = {};\n\n      var _loop = function _loop(name) {\n        if (name.indexOf('cmd') === 0) {\n          cmds[name] = {\n            activate: function activate() {\n              if (_this8.viewState && _this8.viewState[name].enable) {\n                _this8[name].apply(_this8, arguments);\n              }\n            }\n          };\n        }\n      };\n\n      for (var name in this) {\n        _loop(name);\n      }\n\n      return _extends({}, cmds, {\n        cmdPanLeft: {\n          activate: function activate(e) {\n            return _this8.orbit.actions.pan(e, {\n              state: 'move',\n              dx: -_this8.p.pan.speed,\n              dy: 0\n            });\n          }\n        },\n        cmdPanRight: {\n          activate: function activate(e) {\n            return _this8.orbit.actions.pan(e, {\n              state: 'move',\n              dx: _this8.p.pan.speed,\n              dy: 0\n            });\n          }\n        },\n        cmdPanUp: {\n          activate: function activate(e) {\n            return _this8.orbit.actions.pan(e, {\n              state: 'move',\n              dx: 0,\n              dy: -_this8.p.pan.speed\n            });\n          }\n        },\n        cmdPanDown: {\n          activate: function activate(e) {\n            return _this8.orbit.actions.pan(e, {\n              state: 'move',\n              dx: 0,\n              dy: _this8.p.pan.speed\n            });\n          }\n        },\n        mouseCmdRotate: {\n          activate: this.orbit.actions.rotate\n        },\n        mouseCmdDragZoom: {\n          activate: function activate(e, data) {\n            if (data.dy > 0) {\n              _this8.cmdZoomOut();\n            } else if (data.dy < 0) {\n              _this8.cmdZoomIn();\n            }\n          }\n        },\n        mouseCmdPan: {\n          activate: this.orbit.actions.pan\n        },\n        mouseCmdWheelZoom: {\n          activate: function activate(e) {\n            e.preventDefault();\n            if (e.deltaY < 0) {\n              _this8.cmdZoomOut();\n            } else if (e.deltaY > 0) {\n              _this8.cmdZoomIn();\n            }\n          }\n        },\n        touchCmdRotate: {\n          activate: function activate(e, data) {\n            if (!isSwipping('touchCmdRotate')) {\n              e.preventDefault();\n              _this8.orbit.actions.rotate(e, data);\n            }\n          }\n        },\n        touchCmdZoom: {\n          activate: function activate(e, data) {\n            if (!isSwipping('touchCmdZoom')) {\n              e.preventDefault();\n              if (data.dy > 0) {\n                _this8.cmdZoomOut();\n              } else if (data.dy < 0) {\n                _this8.cmdZoomIn();\n              }\n            }\n          }\n        },\n        touchCmdPan: {\n          activate: function activate(e, data) {\n            if (!isSwipping('touchCmdPan')) {\n              e.preventDefault();\n              _this8.orbit.actions.pan(e, data);\n            }\n          }\n        },\n        touchCmdSwipe: {\n          activate: function activate(e, data) {\n            if (isSwipping('touchCmdSwipe')) {\n              e.preventDefault();\n              if (data.state === 'start') {\n                var touch = (e.touches || e.originalEvent.touches)[_this8.actions.touchCmdSwipe.code - 1];\n                _this8.swipeData = {\n                  handled: false,\n                  x0: touch.pageX,\n                  y0: touch.pageY,\n                  x: touch.pageX,\n                  y: touch.pageY\n                };\n              } else if (data.state === 'move') {\n                if (!_this8.swipeData.handled) {\n                  _this8.swipeData = _extends({}, _this8.swipeData, {\n                    x: _this8.swipeData.x + data.dx,\n                    y: _this8.swipeData.y + data.dy\n                  });\n                  if (Math.abs(_this8.swipeData.x0 - _this8.swipeData.x) > 100) {\n                    _this8.swipeData.x0 > _this8.swipeData.x ? _this8.cmdForward() : _this8.cmdBackward();\n                    _this8.swipeData.handled = true;\n                  }\n                }\n              } else {\n                delete _this8.swipeData;\n              }\n            }\n          }\n        },\n        widSettings: {\n          activate: function activate() {\n            return undefined;\n          }\n        }\n      });\n    };\n\n    BookController.prototype.bindActions = function bindActions() {\n      this.eToA = new _EventsToActions2.default((0, _libs.$)(this.visual.element));\n      this.eToA.addAction(function (e) {\n        return e.preventDefault();\n      }, 'contextmenu', _EventsToActions2.default.mouseButtons.Right, 0);\n\n      this.actions = this.getActions();\n      for (var _iterator5 = Object.keys(this.actions), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n        var _ref5;\n\n        if (_isArray5) {\n          if (_i5 >= _iterator5.length) break;\n          _ref5 = _iterator5[_i5++];\n        } else {\n          _i5 = _iterator5.next();\n          if (_i5.done) break;\n          _ref5 = _i5.value;\n        }\n\n        var name = _ref5;\n\n        var action = _extends({}, this.actions[name], this.p.actions[name]);\n        this.actions[name] = action;\n        if (action.enabled) {\n          var flags = action.flags || 0;\n          if (action.type) {\n            this.eToA.addAction(action.activate, action.type, action.code, flags);\n          } else if (action.code !== undefined) {\n            this.eToA.addAction(action.activate, 'keydown', action.code, flags);\n          }\n        }\n      }\n    };\n\n    BookController.prepareProps = function prepareProps(props) {\n      return BookController.calcProps(BookController.mergeProps((0, _bookController.props)(), props));\n    };\n\n    BookController.setActions = function setActions(props, actions) {\n      for (var _iterator6 = Object.keys(actions || {}), _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n        var _ref6;\n\n        if (_isArray6) {\n          if (_i6 >= _iterator6.length) break;\n          _ref6 = _iterator6[_i6++];\n        } else {\n          _i6 = _iterator6.next();\n          if (_i6.done) break;\n          _ref6 = _i6.value;\n        }\n\n        var name = _ref6;\n\n        props.actions[name] = _extends({}, props.actions[name], actions[name]);\n      }\n    };\n\n    BookController.mergeProps = function mergeProps(first, second) {\n      second = second || {};\n      function merge(first, second) {\n        second = second || {};\n        var props = _extends({}, first, second);\n        for (var _iterator7 = Object.keys(first), _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n          var _ref7;\n\n          if (_isArray7) {\n            if (_i7 >= _iterator7.length) break;\n            _ref7 = _iterator7[_i7++];\n          } else {\n            _i7 = _iterator7.next();\n            if (_i7.done) break;\n            _ref7 = _i7.value;\n          }\n\n          var name = _ref7;\n\n          if (_typeof(first[name]) === 'object') {\n            props[name] = merge(first[name], second[name]);\n          }\n        }\n        return props;\n      }\n      var props = merge(first, second);\n      BookController.setActions(props, first.actions);\n      BookController.setActions(props, second.actions);\n      return props;\n    };\n\n    BookController.calcProps = function calcProps(props) {\n      props.scale.delta = (props.scale.max - props.scale.min) / props.scale.levels;\n      props.lighting.delta = (props.lighting.max - props.lighting.min) / props.lighting.levels;\n      return props;\n    };\n\n    return BookController;\n  }(_Controller3.default);\n\n  exports.default = BookController;\n\n  /***/\n},\n/* 28 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(1);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var BookPrinter = function () {\n    function BookPrinter(context, book, styleSheet) {\n      _classCallCheck(this, BookPrinter);\n\n      this.book = book;\n      this.styleSheet = styleSheet;\n      this.wnd = context.wnd;\n      this.doc = context.doc;\n      this.pageCallback = book.getPageCallback();\n      var test = this.pageCallback(0);\n      this.type = test.type;\n      if (this.type === 'pdf') {\n        this.pdfSrc = test.src.src;\n      }\n    }\n\n    BookPrinter.prototype.cancel = function cancel() {\n      this.canceled = true;\n    };\n\n    BookPrinter.prototype.dispose = function dispose() {\n      if (this.frame) {\n        this.frame.remove();\n        delete this.frame;\n      }\n    };\n\n    BookPrinter.prototype.print = function print() {\n      var _this = this;\n\n      delete this.canceled;\n      if (this.type === 'pdf') {\n        (function () {\n          var printWnd = void 0,\n              callManually = false;\n          if (_this.useIFrame()) {\n            callManually = !!_this.frame;\n            if (!_this.frame) {\n              _this.frame = (0, _libs.$)('<iframe src=\"' + _this.pdfSrc + '\" style=\"display: none;\"></iframe>').appendTo(_this.doc.body);\n            }\n            printWnd = _this.frame[0].contentWindow;\n          } else {\n            printWnd = _this.wnd.open(_this.pdfSrc);\n          }\n          if (callManually) {\n            printWnd.print();\n          } else {\n            (0, _libs.$)(printWnd).on('load', function () {\n              try {\n                printWnd.print();\n              } catch (e) {\n                console.error(e);\n              }\n            });\n          }\n        })();\n      } else {\n        this.renderContent().then(function (content) {\n          var printWnd = _this.wnd.open(),\n              printDoc = printWnd.document,\n              html = '\\n            <!DOCTYPE html>\\n            <html>\\n              <head>\\n                <meta charset=\"utf-8\">\\n                <title>3D FlipBook - Printing</title>\\n                ' + content.head + '\\n                <script type=\"text/javascript\">\\n                  function printDocument() {\\n                    window.print();\\n                    window.close();\\n                  }\\n                  function init() {\\n                    setTimeout(printDocument, 100);\\n                  }\\n                </script>\\n              </head>\\n              <body onload=\"init()\">\\n                ' + content.body + '\\n              </body>\\n            </html>\\n          ';\n          printDoc.open();\n          printDoc.write(html);\n          printDoc.close();\n        }).catch(function (e) {\n          return console.warn('3D FlipBook - Printing was canceled');\n        });\n      }\n    };\n\n    BookPrinter.prototype.progress = function progress(v) {\n      if (this.canceled) {\n        throw 'Cancel Printing';\n      }\n      if (this.onProgress) {\n        this.onProgress(Math.floor(v * 100));\n      }\n    };\n\n    BookPrinter.prototype.renderContent = function renderContent() {\n      var _this2 = this;\n\n      var pages = this.book.getPages(),\n          head = new Set(),\n          body = [];\n      var done = Promise.resolve();\n\n      var _loop = function _loop(page) {\n        var info = _this2.pageCallback(page);\n        if (info.type === 'image') {\n          done = done.then(function () {\n            _this2.progress(page / pages);\n            return _this2.renderImage(head, body, info.src);\n          });\n        } else if (info.type === 'html') {\n          done = done.then(function () {\n            _this2.progress(page / pages);\n            return _this2.renderHtml(head, body, info.src);\n          });\n        }\n      };\n\n      for (var page = 0; page < pages; ++page) {\n        _loop(page);\n      }\n      return done.then(function () {\n        _this2.progress(1);\n        return { head: _this2.renderHead(head), body: body.join('\\n') };\n      });\n    };\n\n    BookPrinter.wrap = function wrap(content) {\n      return '<div class=\"fb3d-printer-page\">' + content + '</div>';\n    };\n\n    BookPrinter.prototype.renderImage = function renderImage(head, body, src) {\n      body.push(BookPrinter.wrap('<img src=\"' + src + '\" />'));\n    };\n\n    BookPrinter.prototype.renderHtml = function renderHtml(head, body, src) {\n      return new Promise(function (resolve, reject) {\n        _libs.$.get(src, function (html) {\n          var links = html.match(/<link.*?>/ig) || [];\n          for (var _iterator = links, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n              if (_i >= _iterator.length) break;\n              _ref = _iterator[_i++];\n            } else {\n              _i = _iterator.next();\n              if (_i.done) break;\n              _ref = _i.value;\n            }\n\n            var link = _ref;\n\n            if (link.match(/stylesheet/i)) {\n              var href = link.match(/href\\s*=\\s*['\"](.*)['\"]/i);\n              if (href) {\n                head.add(href[1]);\n              }\n            }\n          }\n          var content = html.match(/<body.*?>([\\S\\s]*)<\\/body>/i);\n          if (content) {\n            body.push(BookPrinter.wrap(content[1]));\n          }\n          resolve();\n        }).fail(function (e) {\n          console.error(e.responseText);\n          reject();\n        });\n      });\n    };\n\n    BookPrinter.prototype.renderHead = function renderHead(head) {\n      var content = [];\n      head.forEach(function (k) {\n        return content.push('<link rel=\"stylesheet\" href=\"' + k + '\">');\n      });\n      content.push(this.styleSheet ? '<link rel=\"stylesheet\" href=\"' + this.styleSheet + '\">' : BookPrinter.defaultStyleSheet());\n      return content.join('\\n');\n    };\n\n    BookPrinter.prototype.useIFrame = function useIFrame() {\n      var isChromium = this.wnd.chrome,\n          winNav = this.wnd.navigator,\n          vendorName = winNav.vendor,\n          isIEedge = winNav.userAgent.indexOf(\"Edge\") > -1,\n          isIOSChrome = winNav.userAgent.match(\"CriOS\");\n      var use = void 0;\n      if (isIOSChrome) {\n        use = true;\n      } else if (isChromium && vendorName === 'Google Inc.' && !isIEedge) {\n        use = true;\n      } else {\n        use = false;\n      }\n      return use;\n    };\n\n    BookPrinter.defaultStyleSheet = function defaultStyleSheet() {\n      return '\\n      <style type=\"text/css\">\\n        body {\\n          margin: 0;\\n          padding: 0;\\n        }\\n        .fb3d-printer-page {\\n          page-break-after: always;\\n        }\\n      </style>\\n    ';\n    };\n\n    return BookPrinter;\n  }();\n\n  exports.default = BookPrinter;\n\n  /***/\n},\n/* 29 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(1);\n\n  var _View2 = __webpack_require__(65);\n\n  var _View3 = _interopRequireDefault(_View2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var BookView = function (_View) {\n    _inherits(BookView, _View);\n\n    function BookView(container, onLoad, template, handler) {\n      _classCallCheck(this, BookView);\n\n      return _possibleConstructorReturn(this, _View.call(this, container, onLoad, template, handler));\n    }\n\n    BookView.prototype.initView = function initView() {\n      this.view = this.container.find('.view');\n      this.bookmarksView = this.container.find('.widBookmarks');\n      this.thumbnailsView = this.container.find('.widThumbnails');\n      this.searchView = this.container.find('.widSearch');\n    };\n\n    BookView.prototype.getHandlers = function getHandlers(id) {\n      var _this2 = this;\n\n      var handlers = void 0;\n      if (id === 'inpPage') {\n        handlers = [{\n          inpPage: function inpPage(e, data) {\n            return _this2.callLater(_View.prototype.getHandlers.call(_this2, id), id, e, data, BookView.PAGE_HANDLER_DELAY);\n          }\n        }];\n      } else {\n        handlers = _View.prototype.getHandlers.call(this, id);\n      }\n      return handlers;\n    };\n\n    BookView.prototype.onItemStateChanged = function onItemStateChanged(id, state) {\n      if (id === 'cmdFullScreen') {\n        if (state.active) {\n          this.parentContainer.addClass('fullscreen');\n        } else {\n          this.parentContainer.removeClass('fullscreen');\n        }\n      }\n    };\n\n    BookView.prototype.getView = function getView() {\n      return this.view;\n    };\n\n    BookView.prototype.getBookmarksView = function getBookmarksView() {\n      return this.bookmarksView;\n    };\n\n    BookView.prototype.getThumbnailsView = function getThumbnailsView() {\n      return this.thumbnailsView;\n    };\n\n    BookView.prototype.getSearchView = function getSearchView() {\n      return this.searchView;\n    };\n\n    BookView.prototype.getForms = function getForms() {\n      return [];\n    };\n\n    BookView.prototype.getLinks = function getLinks() {\n      return ['cmdZoomIn', 'cmdZoomOut', 'cmdDefaultZoom', 'cmdToc', 'cmdFastBackward', 'cmdBackward', 'cmdForward', 'cmdFastForward', 'cmdSave', 'cmdPrint', 'cmdFullScreen', 'cmdSmartPan', 'cmdSinglePage', 'cmdSounds', 'cmdStats', 'cmdLightingUp', 'cmdLightingDown', 'cmdCloseToc', 'cmdBookmarks', 'cmdSearch', 'cmdThumbnails'];\n    };\n\n    BookView.prototype.getWidgets = function getWidgets() {\n      return ['widLoadingProgress', 'widFloatWnd', 'widTocMenu', 'widBookmarks', 'widThumbnails', 'widSearch', 'widSettings', 'widLoading'];\n    };\n\n    BookView.prototype.getInputs = function getInputs() {\n      return ['inpPage', 'inpPages'];\n    };\n\n    BookView.prototype.getTexts = function getTexts() {\n      return ['txtLoadingProgress'];\n    };\n\n    BookView.prototype.getTemplate = function getTemplate() {\n      return {\n        html: 'templates/default-book-view.html',\n        styles: ['css/black-book-view.css'],\n        links: [{\n          rel: 'stylesheet',\n          href: 'css/font-awesome.min.css'\n        }],\n        script: 'js/default-book-view.js'\n      };\n    };\n\n    return BookView;\n  }(_View3.default);\n\n  BookView.PAGE_HANDLER_DELAY = 1000;\n  exports.default = BookView;\n\n  /***/\n},\n/* 30 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _BookPropsBuilder2 = __webpack_require__(9);\n\n  var _BookPropsBuilder3 = _interopRequireDefault(_BookPropsBuilder2);\n\n  var _ImageFactory = __webpack_require__(8);\n\n  var _ImageFactory2 = _interopRequireDefault(_ImageFactory);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var ClbBookPropsBuilder = function (_BookPropsBuilder) {\n    _inherits(ClbBookPropsBuilder, _BookPropsBuilder);\n\n    function ClbBookPropsBuilder(context, pageCallback, pages, onReady) {\n      _classCallCheck(this, ClbBookPropsBuilder);\n\n      var _this = _possibleConstructorReturn(this, _BookPropsBuilder.call(this, onReady));\n\n      _this.calcSheets(pages);\n      _this.pageCallback = pageCallback;\n      _this.binds = {\n        pageCallback: pageCallback.bind(_this)\n      };\n      _this.imageFactory = new _ImageFactory2.default(context);\n\n      if (pages > 0) {\n        (function () {\n          var test = _this.imageFactory.build(pageCallback(0), 0, _this.defaults.sheet.widthTexels, _this.defaults.sheet.heightTexels, _this.defaults.sheet.color);\n          test.onLoad = function () {\n            _this.calcProps(test.width, test.height);\n            test.dispose();\n            _this.ready();\n          };\n        })();\n      } else {\n        _this.props = _this.defaults;\n        _this.ready();\n      }\n      return _this;\n    }\n\n    return ClbBookPropsBuilder;\n  }(_BookPropsBuilder3.default);\n\n  exports.default = ClbBookPropsBuilder;\n\n  /***/\n},\n/* 31 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _SheetBlock2 = __webpack_require__(10);\n\n  var _SheetBlock3 = _interopRequireDefault(_SheetBlock2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var Cover = function (_SheetBlock) {\n    _inherits(Cover, _SheetBlock);\n\n    function Cover(visual, p, angle, state) {\n      _classCallCheck(this, Cover);\n\n      return _possibleConstructorReturn(this, _SheetBlock.call(this, visual, p, 0, 1, angle, state));\n    }\n\n    Cover.prototype.getProps = function getProps() {\n      return _extends({}, this.p.cover, {\n        sheets: 1\n      });\n    };\n\n    Cover.prototype.loadPoints = function loadPoints() {\n      var openedInterpolationIndeces = [[2, 3, 4], [2, 3, 4, 5, 6]],\n          closedInterpolationIndeces = [[0, 1, 2], [0, 1, 2]],\n          interpolationPoints = [{\n        x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0, 0.2831, 0.6256, 0.8082, 0.9909], [0, 0.2603, 0.5936, 0.7763, 0.9589], [0, 0.1370, 0.3881, 0.5342, 0.6758], [0, 0, 0, 0, 0]],\n        y: [[0, 0, 0, 0, 0], [0, 0.02, 0.005, -0.001, -0.0025], [0, 0.04, 0.01, -0.002, -0.005], [0, 0.2466, 0.4795, 0.5708, 0.6758], [0, 0.2877, 0.6347, 0.8174, 1.0000]]\n      }, {\n        x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0, 0.2831, 0.6256, 0.8082, 0.9909], [0, 0.2603, 0.5936, 0.7763, 0.9589], [0.000, 0.233, 0.563, 0.746, 0.927], [0.000, 0.144, 0.433, 0.613, 0.796], [0.000, 0.070, 0.288, 0.455, 0.626], [0, 0, 0, 0, 0]],\n        y: [[0, 0, 0, 0, 0], [0, 0.02, 0.005, -0.001, -0.0025], [0, 0.04, 0.01, -0.002, -0.005], [0.000, 0.168, 0.269, 0.270, 0.255], [0.000, 0.245, 0.435, 0.458, 0.460], [0.000, 0.278, 0.544, 0.614, 0.673], [0, 0.2877, 0.6347, 0.8174, 1.0000]]\n      }];\n      return {\n        interpolationPoints: interpolationPoints,\n        openedInterpolationIndeces: openedInterpolationIndeces,\n        closedInterpolationIndeces: closedInterpolationIndeces\n      };\n    };\n\n    return Cover;\n  }(_SheetBlock3.default);\n\n  exports.default = Cover;\n\n  /***/\n},\n/* 32 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _SheetCssLayer = __webpack_require__(37);\n\n  var _SheetCssLayer2 = _interopRequireDefault(_SheetCssLayer);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var CssLayersManager = function () {\n    function CssLayersManager(book) {\n      _classCallCheck(this, CssLayersManager);\n\n      this.book = book;\n      this.props = book.p.cssLayerProps;\n      this.visual = book.visual;\n      this.pageManager = book.pageManager;\n      this.wrappers = {};\n    }\n\n    CssLayersManager.prototype.getActives = function getActives() {\n      var page = this.book.getPage(),\n          pages = this.book.getPages();\n      return page === 0 || page === pages - 1 ? [page] : [page, page + 1];\n    };\n\n    CssLayersManager.prototype.dispose = function dispose() {\n      for (var _iterator = Object.values(this.wrappers), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var w = _ref;\n\n        w.layers.forEach(function (l) {\n          return l.dispose();\n        });\n      }\n      delete this.wrappers;\n    };\n\n    CssLayersManager.prototype.show = function show() {\n      var _this = this;\n\n      this.hidden = false;\n\n      var _loop = function _loop() {\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) return 'break';\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) return 'break';\n          _ref2 = _i2.value;\n        }\n\n        var n = _ref2;\n\n        var w = _this.wrappers[n];\n        if (w) {\n          if (w.state === 'ready' && w.layers.length) {\n            (function () {\n              var block = _this.book.getBlockByPage(n);\n              w.layers.forEach(function (l) {\n                if (l.isHidden()) {\n                  l.update(block);\n                  l.show();\n                }\n              });\n            })();\n          }\n        } else {\n          (function () {\n            var w = _this.wrappers[n] = {\n              state: 'loading',\n              layers: []\n            };\n            Promise.resolve().then(function () {\n              _this.pageManager.getLayers(n, function (layers) {\n                if (layers.length && _this.wrappers) {\n                  var block = _this.book.getBlockByPage(n);\n                  for (var _iterator3 = layers, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n                    var _ref3;\n\n                    if (_isArray3) {\n                      if (_i3 >= _iterator3.length) break;\n                      _ref3 = _iterator3[_i3++];\n                    } else {\n                      _i3 = _iterator3.next();\n                      if (_i3.done) break;\n                      _ref3 = _i3.value;\n                    }\n\n                    var l = _ref3;\n\n                    var sl = new _SheetCssLayer2.default(_this.visual, block, _this.props);\n                    w.layers.push(sl);\n                    sl.set(l.css, l.html, l.js);\n                  }\n                  setTimeout(function () {\n                    if (!_this.hidden && ~_this.getActives().indexOf(n)) {\n                      w.layers.forEach(function (l) {\n                        return l.show();\n                      });\n                    }\n                  }, 10);\n                }\n                w.state = 'ready';\n              });\n            });\n          })();\n        }\n      };\n\n      for (var _iterator2 = this.getActives(), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        var _ret = _loop();\n\n        if (_ret === 'break') break;\n      }\n    };\n\n    CssLayersManager.prototype.hide = function hide() {\n      this.hidden = true;\n      var wait = [];\n      for (var _iterator4 = Object.values(this.wrappers), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i4 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i4++];\n        } else {\n          _i4 = _iterator4.next();\n          if (_i4.done) break;\n          _ref4 = _i4.value;\n        }\n\n        var _w = _ref4;\n\n        _w.layers.forEach(function (l) {\n          return wait.push(l.hide());\n        });\n      }\n      return Promise.all(wait);\n    };\n\n    return CssLayersManager;\n  }();\n\n  exports.default = CssLayersManager;\n\n  /***/\n},\n/* 33 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(1);\n\n  var _Cache = __webpack_require__(14);\n\n  var _Cache2 = _interopRequireDefault(_Cache);\n\n  var _LoadingAnimation = __webpack_require__(52);\n\n  var _LoadingAnimation2 = _interopRequireDefault(_LoadingAnimation);\n\n  var _ImageFactory = __webpack_require__(8);\n\n  var _ImageFactory2 = _interopRequireDefault(_ImageFactory);\n\n  var _BaseMathUtils = __webpack_require__(2);\n\n  var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\n  var _TextureAnimator = __webpack_require__(60);\n\n  var _TextureAnimator2 = _interopRequireDefault(_TextureAnimator);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var PageManager = function () {\n    function PageManager(visual, book, p) {\n      _classCallCheck(this, PageManager);\n\n      this.visual = visual;\n      this.book = book;\n      this.pageQuery = '';\n      this.p = p;\n      this.pageCache = new _Cache2.default(p.cachedPages);\n      this.resourcesCache = new _Cache2.default();\n      this.canvas = (0, _libs.$)('<canvas>')[0];\n      this.imageFactory = new _ImageFactory2.default(_extends({}, visual, { dispatchEvent: book.dispatchEvent.bind(book), renderCanvas: this.canvas, renderCanvasCtx: this.canvas.getContext('2d') }), this.resourcesCache);\n\n      this.loadings = [];\n      this.renderQueue = [];\n      this.pageRequests = [];\n      this.predictedRequests = [];\n\n      this.tmpMaterial = new _libs.THREE.MeshBasicMaterial();\n      visual.addObject(new _libs.THREE.Mesh(new _libs.THREE.PlaneGeometry(0, 0), this.tmpMaterial));\n\n      this.loadingAnimation = true;\n      this.loading = {};\n      this.loading[p.cover.color] = this.createLoadingTexture(p.cover);\n      if (p.page.color !== p.cover.color) {\n        this.loading[p.page.color] = this.createLoadingTexture(p.page);\n      }\n\n      this.turnOnEvents();\n\n      visual.addRenderCallback(this.update.bind(this));\n\n      setTimeout(this.updateRenderQueue.bind(this), 250);\n    }\n\n    PageManager.prototype.createLoadingTexture = function createLoadingTexture(p) {\n      var spriteTiles = 6,\n          scale = Math.sqrt(4.5 * 210 * 4.5 * 297 / (p.widthTexels * p.heightTexels)),\n          animation = new _LoadingAnimation2.default(scale * p.widthTexels, scale * p.heightTexels, p.color),\n          animator = new _TextureAnimator2.default(animation.createSprite(spriteTiles), spriteTiles, 1, spriteTiles, 0.2);\n      animation.dispose();\n      return animator;\n    };\n\n    PageManager.prototype.dispose = function dispose() {\n      this.turnOffEvents();\n      for (var _iterator = Object.keys(this.loading), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var color = _ref;\n\n        this.loading[color].dispose();\n      }\n      delete this.loading;\n      this.resourcesCache.dispose();\n      this.pageCache.dispose();\n      this.canvas.height = this.canvas.width = 0;\n      delete this.canvas;\n    };\n\n    PageManager.prototype.isCover = function isCover(n) {\n      return n < 2 || n >= 2 * (this.p.sheets + 1);\n    };\n\n    PageManager.prototype.isMobile = function isMobile() {\n      return (this.visual.wnd.devicePixelRatio || 1) > 1;\n    };\n\n    PageManager.prototype.getPageState = function getPageState(n) {\n      var object = this.pageCache.get(n);\n      return object ? object.state : undefined;\n    };\n\n    PageManager.prototype.enableLoadingAnimation = function enableLoadingAnimation(enable) {\n      this.loadingAnimation = enable;\n      for (var _iterator2 = this.loadings, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var o = _ref2;\n\n        this.setupMaterial(o);\n      }\n    };\n\n    PageManager.prototype.update = function update(dt) {\n      if (this.loadingAnimation) {\n        var loading = {};\n        for (var _iterator3 = this.loadings, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n          var _ref3;\n\n          if (_isArray3) {\n            if (_i3 >= _iterator3.length) break;\n            _ref3 = _iterator3[_i3++];\n          } else {\n            _i3 = _iterator3.next();\n            if (_i3.done) break;\n            _ref3 = _i3.value;\n          }\n\n          var o = _ref3;\n\n          if (o.isActive()) {\n            loading[o.color] = true;;\n          }\n        }\n        for (var _iterator4 = Object.keys(loading), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n          var _ref4;\n\n          if (_isArray4) {\n            if (_i4 >= _iterator4.length) break;\n            _ref4 = _iterator4[_i4++];\n          } else {\n            _i4 = _iterator4.next();\n            if (_i4.done) break;\n            _ref4 = _i4.value;\n          }\n\n          var color = _ref4;\n\n          this.loading[color].update(dt);\n        }\n      }\n    };\n\n    PageManager.prototype.removeFromLoadings = function removeFromLoadings(o) {\n      var i = this.loadings.indexOf(o);\n      if (~i) {\n        this.loadings.splice(i, 1);\n      }\n    };\n\n    PageManager.prototype.removeFromRenderQueue = function removeFromRenderQueue(o) {\n      var i = this.renderQueue.indexOf(o);\n      if (~i) {\n        this.renderQueue.splice(i, 1);\n      }\n    };\n\n    PageManager.prototype.refreshPageQuery = function refreshPageQuery(n) {\n      var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n      this.pageQuery = query;\n      var object = this.pageCache.get(n);\n      if (object && object.wrapper && object.wrapper.setQuery) {\n        if (!this.pageCache.remove(n)) {\n          object.wrapper.setQuery(query);\n          this.pushInRenderQueue(object);\n        }\n      }\n    };\n\n    PageManager.prototype.refreshZoom = function refreshZoom() {\n      var _this = this;\n\n      if (this.p.autoResolution.enable) {\n        (function () {\n          var es = [];\n          _this.pageCache.forEach(function (e) {\n            es.push(e);\n          });\n          es.forEach(function (e) {\n            var object = e[1];\n            if (object && object.wrapper) {\n              if (!_this.pageCache.remove(e[0])) {\n                _this.pushInRenderQueue(object);\n              }\n            }\n          });\n        })();\n      }\n    };\n\n    PageManager.prototype.getLayers = function getLayers(n, clb) {\n      var _this2 = this;\n\n      if (this.p.cssLayersLoader) {\n        this.p.cssLayersLoader(n, function () {\n          for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n            args[_key] = arguments[_key];\n          }\n\n          var object = _this2.pageCache.get(n);\n          if (object) {\n            if (object.state !== 'active') {\n              object.pendings.push({ clb: clb, args: args });\n            } else {\n              clb.apply(undefined, args);\n            }\n          }\n        });\n      } else {\n        clb([]);\n      }\n    };\n\n    PageManager.prototype.resolvePendings = function resolvePendings(pendings) {\n      for (var _iterator5 = pendings, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n        var _ref5;\n\n        if (_isArray5) {\n          if (_i5 >= _iterator5.length) break;\n          _ref5 = _iterator5[_i5++];\n        } else {\n          _i5 = _iterator5.next();\n          if (_i5.done) break;\n          _ref5 = _i5.value;\n        }\n\n        var p = _ref5;\n\n        try {\n          p.clb.apply(p, p.args);\n        } catch (e) {\n          console.error(e);\n        }\n      }\n      pendings.splice(0, pendings.length);\n    };\n\n    PageManager.prototype.rtlPageN = function rtlPageN(n) {\n      return this.p.rtl ? 2 * (this.p.sheets + 2) - 1 - n : n;\n    };\n\n    PageManager.prototype.load = function load(material, n) {\n      var _this3 = this;\n\n      var pi = this.p.pageCallback(this.rtlPageN(n)),\n          p = this.isCover(n) ? this.p.cover : this.p.page;\n      var o = {\n        n: n,\n        texture: new _libs.THREE.Texture(),\n        wrapper: null,\n        state: 'loading',\n        locked: function locked(n) {\n          return o.state === 'loading' || o.state === 'rendering' || _this3.book.isActivePage(n);\n        },\n        color: p.color,\n        isActive: function isActive() {\n          return _this3.book.isActivePage(n);\n        },\n        isTop: function isTop() {\n          return ~_this3.book.getTopPages().indexOf(n);\n        },\n        dispose: function dispose() {\n          _this3.removeFromLoadings(o);\n          _this3.removeFromRenderQueue(o);\n          if (o.wrapper && o.wrapper.dispose) {\n            o.wrapper.dispose();\n          }\n          o.texture.dispose();\n          delete o.texture;\n          delete o.wrapper;\n        },\n        pendings: []\n      };\n      o.texture.minFilter = _libs.THREE.LinearFilter;\n      this.loadings.push(o);\n      this.setMaterial(o, material);\n\n      Promise.resolve().then(function () {\n        if (o.texture) {\n          o.widthTexels = pi.widthTexels || p.widthTexels;\n          o.heightTexels = pi.heightTexels || p.heightTexels;\n          var res = _this3.calcResolution(o);\n          o.wrapper = _this3.imageFactory.build(pi, pi.number === undefined ? n : pi.number, res.width, res.height, p.color, _this3.p.injector);\n          if (o.wrapper.setQuery) {\n            o.wrapper.setQuery(_this3.pageQuery);\n          }\n          o.simulate = pi.interactive ? (o.wrapper.simulate || function () {\n            return undefined;\n          }).bind(o.wrapper) : undefined;\n          o.wrapper.onLoad = function () {\n            _this3.pushInRenderQueue(o);\n            _this3.book.dispatchEvent({\n              type: 'loadedPage',\n              page: n\n            });\n          };\n          o.wrapper.onChange = function (image) {\n            if (o.texture) {\n              _this3.removeFromLoadings(o);\n              if (o.material) {\n                o.material.map = o.texture;\n                o.material.color = new _libs.THREE.Color(0xFFFFFF);\n                o.material.needsUpdate = true;\n              }\n              o.texture.image = image;\n              o.texture.needsUpdate = true;\n              o.texture.onUpdate = function () {\n                if (o.state !== 'queuedForRender') {\n                  o.state = 'active';\n                  _this3.resolvePendings(o.pendings);\n                }\n                delete _this3.rendering;\n                //this.updateRenderQueue();\n              };\n              _this3.tmpMaterial.map = o.texture;\n              _this3.tmpMaterial.needsUpdate = true;\n            }\n          };\n        }\n      });\n      this.book.dispatchEvent({\n        type: 'loadPage',\n        page: n\n      });\n      return this.pageCache.put(n, o);\n    };\n\n    PageManager.prototype.isSinglePage = function isSinglePage(o) {\n      return this.p.singlePage || !o.n || o.n === this.book.getPages() - 1;\n    };\n\n    PageManager.prototype.calcResolution = function calcResolution(o) {\n      var res = void 0;\n      if (this.p.autoResolution.enable) {\n        var k = Math.min((this.isSinglePage(o) ? 1 : 0.5) * this.visual.width() / o.widthTexels, this.visual.height() / o.heightTexels);\n        res = {\n          width: this.p.autoResolution.k * this.p.zoom * k * o.widthTexels,\n          height: this.p.autoResolution.k * this.p.zoom * k * o.heightTexels\n        };\n      } else {\n        res = {\n          width: o.widthTexels,\n          height: o.heightTexels\n        };\n      }\n      return res;\n    };\n\n    PageManager.prototype.pushInRenderQueue = function pushInRenderQueue(o) {\n      if (o.state !== 'queuedForRender') {\n        o.state = 'queuedForRender';\n        this.renderQueue.push(o);\n        // this.updateRenderQueue();\n      }\n    };\n\n    PageManager.prototype.updateRenderQueue = function updateRenderQueue() {\n      if (this.canvas) {\n        var p = this.p;\n        if (!this.rendering && (p.renderWhileFlipping || !this.book.isProcessing())) {\n          var active = void 0,\n              top = void 0;\n          for (var _iterator6 = this.renderQueue, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n            var _ref6;\n\n            if (_isArray6) {\n              if (_i6 >= _iterator6.length) break;\n              _ref6 = _iterator6[_i6++];\n            } else {\n              _i6 = _iterator6.next();\n              if (_i6.done) break;\n              _ref6 = _i6.value;\n            }\n\n            var o = _ref6;\n\n            if (!active && o.isActive()) {\n              active = o;\n            }\n            if (o.isTop()) {\n              top = o;\n              break;\n            }\n          }\n          this.rendering = top || active;\n          if (this.isMobile() && p.renderInactivePagesOnMobile || !this.isMobile() && p.renderInactivePages) {\n            this.rendering = this.rendering || this.renderQueue[0];\n          }\n          if (this.rendering) {\n            if (this.rendering.wrapper.startRender) {\n              this.removeFromRenderQueue(this.rendering);\n              this.rendering.state = 'rendering';\n              this.rendering.wrapper.setResolution(this.calcResolution(this.rendering));\n              this.rendering.wrapper.startRender();\n            } else {\n              delete this.rendering;\n            }\n          }\n        }\n        setTimeout(this.updateRenderQueue.bind(this), 250);\n      }\n    };\n\n    PageManager.prototype.turnOnEvents = function turnOnEvents() {\n      this.transferEvents = true;\n    };\n\n    PageManager.prototype.turnOffEvents = function turnOffEvents() {\n      var mouseup = _libs.$.Event('mouseup'),\n          mouseout = _libs.$.Event('mouseout');\n      this.pageCache.forEach(function (ent) {\n        var object = ent[1];\n        if (object.simulate) {\n          object.simulate(mouseup, undefined, 0, 0);\n          object.simulate(mouseout, undefined, 0, 0);\n        }\n      });\n      this.transferEvents = false;\n    };\n\n    PageManager.prototype.transferEventToTexture = function transferEventToTexture(n, e, data) {\n      var _this4 = this;\n\n      if (this.transferEvents) {\n        var toObject = this.getOrLoadTextureObject(undefined, n);\n        if (toObject.wrapper) {\n          (function () {\n            var uv = data.uv,\n                toDoc = toObject.wrapper.getSimulatedDoc();\n            _this4.pageCache.forEach(function (ent) {\n              var object = ent[1];\n              if (object.simulate) {\n                object.simulate(e, toDoc, uv.x, uv.y);\n              }\n            });\n          })();\n        }\n      }\n    };\n\n    PageManager.prototype.loadPredictedPages = function loadPredictedPages() {\n      this.predictedRequests = _BaseMathUtils2.default.predict(this.pageRequests, this.p.preloadPages);\n      for (var _iterator7 = this.predictedRequests, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n        var _ref7;\n\n        if (_isArray7) {\n          if (_i7 >= _iterator7.length) break;\n          _ref7 = _iterator7[_i7++];\n        } else {\n          _i7 = _iterator7.next();\n          if (_i7.done) break;\n          _ref7 = _i7.value;\n        }\n\n        var p = _ref7;\n\n        if (p < this.book.getPages() && !this.pageCache.get(p)) {\n          this.load(undefined, p);\n        }\n      }\n    };\n\n    PageManager.prototype.addPageRequest = function addPageRequest(n) {\n      this.pageRequests.push(n);\n      if (this.pageRequests.length > this.p.pagesForPredicting) {\n        this.pageRequests.shift();\n      }\n      Promise.resolve().then(this.loadPredictedPages.bind(this));\n    };\n\n    PageManager.prototype.setMaterial = function setMaterial(o, material) {\n      this.pageCache.forEach(function (e) {\n        var ob = e[1];\n        if (o !== ob && ob.material === material) {\n          delete ob.material;\n        }\n      });\n      if (material && material !== o.material) {\n        o.material = material;\n        this.setupMaterial(o);\n      }\n    };\n\n    PageManager.prototype.setupMaterial = function setupMaterial(o) {\n      o.material.map = o.texture.image ? o.texture : this.loadingAnimation ? this.loading[o.color].texture : null;\n      if (!o.material.map) {\n        o.material.color = new _libs.THREE.Color(o.color);\n      }\n      o.material.needsUpdate = true;\n    };\n\n    PageManager.prototype.getOrLoadTextureObject = function getOrLoadTextureObject(material, n) {\n      var object = this.pageCache.get(n);\n      if (!object) {\n        object = this.load(material, n);\n        this.addPageRequest(n);\n      } else {\n        this.setMaterial(object, material);\n      }\n\n      return object;\n    };\n\n    PageManager.prototype.setTexture = function setTexture(material, n) {\n      if (~this.predictedRequests.indexOf(n)) {\n        this.addPageRequest(n);\n      }\n      this.getOrLoadTextureObject(material, n);\n    };\n\n    return PageManager;\n  }();\n\n  exports.default = PageManager;\n\n  /***/\n},\n/* 34 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _BookPropsBuilder2 = __webpack_require__(9);\n\n  var _BookPropsBuilder3 = _interopRequireDefault(_BookPropsBuilder2);\n\n  var _Pdf = __webpack_require__(18);\n\n  var _Pdf2 = _interopRequireDefault(_Pdf);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var PdfBookPropsBuilder = function (_BookPropsBuilder) {\n    _inherits(PdfBookPropsBuilder, _BookPropsBuilder);\n\n    function PdfBookPropsBuilder(src, onReady) {\n      _classCallCheck(this, PdfBookPropsBuilder);\n\n      var _this = _possibleConstructorReturn(this, _BookPropsBuilder.call(this, onReady));\n\n      _this.pdf = new _Pdf2.default(src);\n      _this.pageDescription = {\n        type: 'pdf',\n        src: _this.pdf,\n        interactive: true\n      };\n      _this.binds = {\n        pageCallback: _this.pageCallback.bind(_this)\n      };\n      _this.pdf.getHandler(_this.init.bind(_this));\n      return _this;\n    }\n\n    PdfBookPropsBuilder.prototype.dispose = function dispose() {\n      this.pdf.dispose();\n      _BookPropsBuilder.prototype.dispose.call(this);\n    };\n\n    PdfBookPropsBuilder.prototype.init = function init(handler) {\n      var _this2 = this;\n\n      var pages = this.pdf.getPagesNum();\n      this.calcSheets(pages);\n      if (pages > 0) {\n        handler.getPage(1).then(function (page) {\n          var size = _Pdf2.default.getPageSize(page);\n          _this2.calcProps(size.width, size.height);\n          _this2.ready();\n        }).catch(function (e) {\n          console.error(e);\n        });\n      } else {\n        this.props = this.defaults;\n        this.ready();\n      }\n    };\n\n    PdfBookPropsBuilder.prototype.pageCallback = function pageCallback(n) {\n      return this.pageDescription;\n    };\n\n    return PdfBookPropsBuilder;\n  }(_BookPropsBuilder3.default);\n\n  exports.default = PdfBookPropsBuilder;\n\n  /***/\n},\n/* 35 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(1);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var PdfLinksHandler = function () {\n    function PdfLinksHandler(pdf, ctrl, element) {\n      _classCallCheck(this, PdfLinksHandler);\n\n      this.pdf = pdf;\n      this.ctrl = ctrl;\n      this.element = (0, _libs.$)(element);\n      this.cursors = [];\n    }\n\n    PdfLinksHandler.prototype.dispose = function dispose() {};\n\n    PdfLinksHandler.prototype.setHandler = function setHandler(handler) {\n      this.handler = handler;\n    };\n\n    PdfLinksHandler.prototype.defaultHandler = function defaultHandler(type, destination) {\n      if (type === 'internal') {\n        this.ctrl.goToPage(destination);\n      } else if (type === 'external') {\n        window.open(destination, '_blank');\n      }\n    };\n\n    PdfLinksHandler.prototype.callHandlers = function callHandlers(type, destination) {\n      if (!this.handler || !this.handler(type, destination)) {\n        this.defaultHandler(type, destination);\n      }\n    };\n\n    PdfLinksHandler.prototype.handleEvent = function handleEvent(data) {\n      var _this = this;\n\n      var e = data.event,\n          anno = data.annotation;\n      switch (e.type) {\n        case 'mouseover':\n          {\n            this.cursors.push(this.element.css('cursor'));\n            this.element.css('cursor', 'pointer');\n            break;\n          }\n        case 'mouseout':\n          {\n            this.element.css('cursor', this.cursors.pop() || '');\n            break;\n          }\n        case 'touchtap':\n        case 'click':\n          {\n            if (anno.url) {\n              this.callHandlers('external', anno.url);\n            } else if (anno.dest) {\n              var destPromise = void 0;\n              if (typeof anno.dest === 'string') {\n                destPromise = this.pdf.handler.getDestination(anno.dest);\n              } else {\n                destPromise = Promise.resolve(anno.dest);\n              }\n              destPromise.then(function (dest) {\n                return typeof dest[0] === 'number' ? dest[0] : _this.pdf.handler.getPageIndex(dest[0]);\n              }).then(function (number) {\n                return _this.callHandlers('internal', number);\n              }).catch(function () {\n                return console.error('Bad link');\n              });\n            }\n            break;\n          }\n      }\n    };\n\n    return PdfLinksHandler;\n  }();\n\n  exports.default = PdfLinksHandler;\n\n  /***/\n},\n/* 36 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _Finder = __webpack_require__(17);\n\n  var _Finder2 = _interopRequireDefault(_Finder);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var SearchEngine = function () {\n    function SearchEngine(pageCallback, pages) {\n      _classCallCheck(this, SearchEngine);\n\n      this.pageCallback = pageCallback;\n      this.pages = pages;\n      this.results = [];\n    }\n\n    SearchEngine.prototype.setQuery = function setQuery(query) {\n      this.query = query;\n      this.update = true;\n      this.process();\n    };\n\n    SearchEngine.prototype.process = function process() {\n      var _this = this;\n\n      if (this.update) {\n        var results = this.results;\n        this.results = [];\n        if (this.onPageHitsChanged) {\n          for (var _iterator = results, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n              if (_i >= _iterator.length) break;\n              _ref = _iterator[_i++];\n            } else {\n              _i = _iterator.next();\n              if (_i.done) break;\n              _ref = _i.value;\n            }\n\n            var res = _ref;\n\n            this.onPageHitsChanged(undefined, '');\n          }\n        }\n        this.update = false;\n        this.page = 0;\n        this.stamp = Date.now();\n        if (this.query.length > 1) {\n          this.process();\n        }\n      } else {\n        if (this.page < this.pages) {\n          (function () {\n            var stamp = _this.stamp;\n            _this.find(_this.pageCallback(_this.page)).then(function (contexts) {\n              if (stamp === _this.stamp) {\n                if (contexts.length) {\n                  _this.results.push({\n                    page: _this.page,\n                    contexts: contexts\n                  });\n                }\n                ++_this.page;\n                if (_this.onPageHitsChanged) {\n                  _this.onPageHitsChanged(_this.page, _this.query);\n                }\n                _this.process();\n              }\n            });\n          })();\n        }\n      }\n    };\n\n    SearchEngine.prototype.find = function find(pi) {\n      var _this2 = this;\n\n      var next = void 0;\n      if (pi.type === 'pdf') {\n        next = new Promise(function (resolve) {\n          pi.src.getHandler(function () {\n            var n = pi.number === undefined ? _this2.page : pi.number;\n            if (pi.src.getPageType(n) === 'right') {\n              resolve([]);\n            } else {\n              pi.src.getPage(n).then(function (page) {\n                page.getTextContent().then(function (textContent) {\n                  resolve(new _Finder2.default(textContent.items.map(function (item) {\n                    return item.str;\n                  }), _this2.query, { hits: false }).getContexts());\n                });\n              }).catch(function () {\n                return resolve([]);\n              });\n            }\n          });\n        });\n      } else {\n        next = Promise.resolve([]);\n      }\n      return next;\n    };\n\n    return SearchEngine;\n  }();\n\n  exports.default = SearchEngine;\n\n  /***/\n},\n/* 37 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _CSSLayer = __webpack_require__(13);\n\n  var _CSSLayer2 = _interopRequireDefault(_CSSLayer);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var SheetCssLayer = function () {\n    function SheetCssLayer(visual, block, props) {\n      _classCallCheck(this, SheetCssLayer);\n\n      this.visual = visual;\n      var size = block.getTopSize();\n      this.layer = new _CSSLayer2.default(size.width, size.height, props);\n\n      this.update(block);\n      this.visual.addCssObject(this.layer);\n    }\n\n    SheetCssLayer.prototype.dispose = function dispose() {\n      this.layer.dispose();\n      this.visual.removeCssObject(this.layer);\n    };\n\n    SheetCssLayer.prototype.isHidden = function isHidden() {\n      return this.layer.isHidden();\n    };\n\n    SheetCssLayer.prototype.hide = function hide() {\n      return this.layer.hide();\n    };\n\n    SheetCssLayer.prototype.show = function show() {\n      return this.layer.show();\n    };\n\n    SheetCssLayer.prototype.set = function set(css, html, js) {\n      this.layer.setData(css, html, js);\n    };\n\n    SheetCssLayer.prototype.update = function update(block) {\n      this.block = block;\n      this.block.getTopWorldRotation(this.layer.rotation);\n      this.block.getTopWorldPosition(this.layer.position);\n    };\n\n    return SheetCssLayer;\n  }();\n\n  exports.default = SheetCssLayer;\n\n  /***/\n},\n/* 38 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _MathUtils = __webpack_require__(3);\n\n  var _MathUtils2 = _interopRequireDefault(_MathUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var SheetPhysics = function () {\n    SheetPhysics.targetForceClb = function targetForceClb(o, a, v, ch) {\n      var l = a * this.r;\n      return 100 * this.m * this.g * (2 / (1 + Math.exp(10 * (l - this.tl))) - 1) - this.m * 40 * v;\n    };\n\n    SheetPhysics.hoverCornerForceClb = function hoverCornerForceClb(o, v, l, ch) {\n      return 5;\n    };\n\n    SheetPhysics.prototype.getTargetForceClb = function getTargetForceClb(mass, targetAngle) {\n      return SheetPhysics.targetForceClb.bind({\n        g: this.p.gravity,\n        m: mass,\n        tl: targetAngle * this.p.r,\n        r: this.p.r\n      });\n    };\n\n    SheetPhysics.dragForceClb = function dragForceClb(o, a, v, ch) {\n      return o.flbt * o.m * (10 * o.g * ch - 50 * v / (1 + Math.exp(3.5 * Math.abs(ch))));\n    };\n\n    SheetPhysics.dragCornerForceClb = function dragCornerForceClb(o, a, v, ch) {\n      return 15 * (2 / (1 + Math.exp(10 * (a - this.ta) * o.r)) - 1);\n    };\n\n    SheetPhysics.getDragCornerForceClb = function getDragCornerForceClb(targetAngle) {\n      return SheetPhysics.dragCornerForceClb.bind({\n        ta: targetAngle\n      });\n    };\n\n    function SheetPhysics() {\n      var r = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n      var gravity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      var cornerDeviation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.15;\n      var fps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 240;\n\n      _classCallCheck(this, SheetPhysics);\n\n      this.p = {\n        r: r,\n        cornerDeviation: cornerDeviation,\n        l: Math.PI * r,\n        startDt: 1 / fps,\n        gravity: gravity,\n        margin: 0.002 * r,\n        infM: 1e4,\n        attempts: 16,\n        maxIterations: 100\n      };\n      this.os = [];\n    }\n\n    SheetPhysics.prototype.dispose = function dispose() {\n      this.os = [];\n    };\n\n    SheetPhysics.prototype.getSize = function getSize() {\n      return this.os.length;\n    };\n\n    SheetPhysics.prototype.addObject = function addObject(mass, angle, velocity, flexibility, cornerHeight, simulateClb, removeClb) {\n      var forceClb = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : function () {\n        return 0;\n      };\n      var cornerForceClb = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : function () {\n        return 0;\n      };\n\n      var no = {\n        id: _MathUtils2.default.getUnique(),\n        m: mass,\n        v: velocity,\n        l: angle * this.p.r,\n        f: forceClb,\n        cf: cornerForceClb,\n        ch: cornerHeight,\n        flbt: flexibility,\n        simulateClb: simulateClb,\n        removeClb: removeClb\n      };\n      var i = this.os.findIndex(function (o) {\n        return no.l <= o.l;\n      });\n      i = ~i ? i : this.os.length;\n      this.os.splice(i, 0, no);\n      return no.id;\n    };\n\n    SheetPhysics.prototype.getParametrMap = function getParametrMap(name) {\n      var map = {\n        mass: 'm',\n        velocity: 'v',\n        flexibility: 'flbt',\n        cornerHeight: 'ch',\n        simulateClb: 'simulateClb',\n        removeClb: 'removeClb',\n        forceClb: 'f',\n        cornerForceClb: 'cf'\n      };\n      return map[name];\n    };\n\n    SheetPhysics.prototype.setParametr = function setParametr(id, name, value) {\n      var o = this.os.find(function (o) {\n        return o.id === id;\n      });\n      if (name === 'angle') {\n        o.l = value * this.p.r;\n      } else {\n        o[this.getParametrMap(name)] = value;\n      }\n    };\n\n    SheetPhysics.prototype.getParametr = function getParametr(id, name) {\n      var o = this.os.find(function (o) {\n        return o.id === id;\n      });\n      var value = void 0;\n      if (name === 'angle') {\n        value = o.l / this.p.r;\n      } else {\n        value = o[this.getParametrMap(name)];\n      }\n      return value;\n    };\n\n    SheetPhysics.prototype.simulate = function simulate(T) {\n      var t = 0,\n          dt = this.p.startDt,\n          attempt = 0,\n          it = 0;\n\n      while (t < T && it < this.p.maxIterations) {\n        if (dt > T - t) {\n          dt = T - t;\n        }\n        var nos = this.integrate(this.os, dt),\n            ci = this.findCollisions(nos);\n        if (ci.num > 1 && attempt < this.p.attempts) {\n          dt /= 2;\n          ++attempt;\n        } else {\n          if (ci.num === 1) {\n            var scos = this.solveCollision(nos[ci.last - 1], nos[ci.last]);\n            nos[ci.last - 1] = scos[0];\n            nos[ci.last] = scos[1];\n          } else if (ci.num > 1) {\n            var gs = [];\n            var last = -2;\n            for (var _iterator = ci.all, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n              var _ref;\n\n              if (_isArray) {\n                if (_i >= _iterator.length) break;\n                _ref = _iterator[_i++];\n              } else {\n                _i = _iterator.next();\n                if (_i.done) break;\n                _ref = _i.value;\n              }\n\n              var i = _ref;\n\n              if (i - last > 1) {\n                gs.push([]);\n              }\n              gs[gs.length - 1].push(i);\n              last = i;\n            }\n            for (var _iterator2 = gs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n              var _ref2;\n\n              if (_isArray2) {\n                if (_i2 >= _iterator2.length) break;\n                _ref2 = _iterator2[_i2++];\n              } else {\n                _i2 = _iterator2.next();\n                if (_i2.done) break;\n                _ref2 = _i2.value;\n              }\n\n              var g = _ref2;\n\n              var sg = void 0,\n                  i0 = void 0;\n              if (nos[g[0]].l > Math.PI / 2 * this.p.r) {\n                sg = -1;\n                i0 = g[g.length - 1];\n              } else {\n                sg = 1;\n                i0 = g[0];\n              }\n              for (var _i3 = i0; _i3 < nos.length && _i3 > -1; _i3 += sg) {\n                var o = nos[_i3 + sg];\n                if (o && sg * (o.l - nos[_i3].l) <= this.p.margin) {\n                  o.l = nos[_i3].l + sg * 2 * this.p.margin;\n                  if (o.l > this.p.l || o.l < 0) {\n                    o.l = o.l > this.p.l ? this.p.l : 0;\n                    o.ch = 0;\n                    o.v = 0;\n                    console.error('Bad collision');\n                  }\n                } else {\n                  break;\n                }\n              }\n            }\n          }\n          this.os = nos;\n          this.findAndSolveCornerCollisions();\n          t += dt;\n          dt = this.p.startDt;\n          attempt = 0;\n        }\n        ++it;\n      }\n\n      this.removeStatics();\n    };\n\n    SheetPhysics.prototype.removeStatics = function removeStatics() {\n      var nos = [],\n          notify = [[], []];\n      for (var _iterator3 = this.os, _isArray3 = Array.isArray(_iterator3), _i4 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i4 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i4++];\n        } else {\n          _i4 = _iterator3.next();\n          if (_i4.done) break;\n          _ref3 = _i4.value;\n        }\n\n        var o = _ref3;\n\n        if (o.simulateClb) {\n          o.simulateClb(o.l / this.p.r, o.ch);\n        }\n        if ((o.l === this.p.l || o.l === 0) && o.v === 0) {\n          if (o.removeClb !== undefined) {\n            notify[(o.l !== this.p.l) + 0].push(o);\n          }\n        } else {\n          nos.push(o);\n        }\n      }\n      this.os = nos;\n      for (var _iterator4 = notify[0].reverse(), _isArray4 = Array.isArray(_iterator4), _i5 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i5 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i5++];\n        } else {\n          _i5 = _iterator4.next();\n          if (_i5.done) break;\n          _ref4 = _i5.value;\n        }\n\n        var _o = _ref4;\n\n        _o.removeClb(Math.PI, _o.ch);\n      }\n      for (var _iterator5 = notify[1], _isArray5 = Array.isArray(_iterator5), _i6 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n        var _ref5;\n\n        if (_isArray5) {\n          if (_i6 >= _iterator5.length) break;\n          _ref5 = _iterator5[_i6++];\n        } else {\n          _i6 = _iterator5.next();\n          if (_i6.done) break;\n          _ref5 = _i6.value;\n        }\n\n        var _o2 = _ref5;\n\n        _o2.removeClb(0, _o2.ch);\n      }\n    };\n\n    SheetPhysics.prototype.findAndSolveCornerCollisions = function findAndSolveCornerCollisions() {\n      if (this.os.length) {\n        var os = [_extends({}, this.os[0], {\n          l: 0,\n          m: this.p.infM,\n          ch: 0\n        })].concat(this.os, [_extends({}, this.os[0], {\n          l: 1.05 * this.p.l,\n          m: this.p.infM,\n          ch: 0\n        })]);\n\n        for (var i = 1; i < os.length; ++i) {\n          var a = os[i - 1],\n              b = os[i],\n              al = a.l + this.p.cornerDeviation * a.ch * this.p.r,\n              bl = b.l + this.p.cornerDeviation * b.ch * this.p.r;\n          if (1.05 * al > bl && a.ch > b.ch) {\n            var dCh = a.ch - b.ch,\n                dv = a.m / a.flbt + b.m / b.flbt,\n                ka = a.m / a.flbt / dv,\n                kb = b.m / b.flbt / dv;\n            a.ch = a.ch - kb * dCh;\n            b.ch = b.ch + ka * dCh;\n          }\n        }\n      }\n    };\n\n    SheetPhysics.prototype.solveCollision = function solveCollision(a, b) {\n      var mm = b.m + a.m,\n          av = (-a.v * b.m + a.m * a.v + 2 * b.m * b.v) / mm,\n          bv = (b.m * b.v - b.v * a.m + 2 * a.m * a.v) / mm;\n      return [_extends({}, a, { v: av }), _extends({}, b, { v: bv })];\n    };\n\n    SheetPhysics.prototype.findCollisions = function findCollisions(os) {\n      var ci = {\n        num: 0,\n        last: 0,\n        all: []\n      };\n      for (var i = 1; i < os.length && ci.num < 2; ++i) {\n        if (os[i - 1].l > os[i].l || this.isCollision(os[i - 1], os[i])) {\n          if (os[i - 1].l > os[i].l) {\n            ++ci.num;\n          }\n          ++ci.num;\n          ci.last = i;\n          if (ci.all.indexOf(i - 1) === -1) {\n            ci.all.push(i - 1);\n          }\n          if (ci.all.indexOf(i) === -1) {\n            ci.all.push(i);\n          }\n        }\n      }\n      return ci;\n    };\n\n    SheetPhysics.prototype.isCollision = function isCollision(a, b) {\n      return Math.abs(a.l - b.l) < this.p.margin && a.v > b.v;\n    };\n\n    SheetPhysics.prototype.integrate = function integrate(os, dt) {\n      var nos = [];\n      for (var _iterator6 = os, _isArray6 = Array.isArray(_iterator6), _i7 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n        var _ref6;\n\n        if (_isArray6) {\n          if (_i7 >= _iterator6.length) break;\n          _ref6 = _iterator6[_i7++];\n        } else {\n          _i7 = _iterator6.next();\n          if (_i7.done) break;\n          _ref6 = _i7.value;\n        }\n\n        var o = _ref6;\n\n        var vl = _MathUtils2.default.rk4(this.dy.bind({\n          g: this.p.gravity,\n          r: this.p.r,\n          m: o.m,\n          f: o.f,\n          cf: o.cf,\n          ch: o.ch,\n          flbt: o.flbt\n        }), 0, dt, [o.v, o.l, o.ch]);\n        var no = _extends({}, o, {\n          v: vl[0],\n          l: vl[1],\n          ch: vl[2]\n        });\n        if (no.l <= 0 || no.l >= this.p.l) {\n          no.l = no.l <= 0 ? 0 : this.p.l;\n          no.v = 0;\n          no.ch = 0;\n        }\n        nos.push(no);\n      }\n      return nos;\n    };\n\n    SheetPhysics.prototype.dy = function dy(t, y) {\n      var v = y[0],\n          l = y[1],\n          ch = y[2],\n          f = this.f(this, l / this.r, v, ch),\n          cf = this.cf(this, l / this.r, v, ch);\n      return [(-this.g * Math.cos(l / this.r) * this.m + f) / this.m, v + 0.01 * (Math.random() - 0.5), this.flbt * ((2 / (1 + Math.exp(-0.2 * cf)) - 1) * (1 - 2 / (1 + Math.exp(-5 * (Math.abs(ch) - 2)))) - ch)];\n    };\n\n    return SheetPhysics;\n  }();\n\n  exports.default = SheetPhysics;\n\n  /***/\n},\n/* 39 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var SoundsEnviroment = function () {\n    function SoundsEnviroment() {\n      var template = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      _classCallCheck(this, SoundsEnviroment);\n\n      this.sounds = template.sounds || {};\n      this.audio = {};\n      if (this.sounds.startFlip) {\n        this.audio.startFlip = new Audio(this.sounds.startFlip);\n      }\n      if (this.sounds.endFlip) {\n        this.audio.endFlip = new Audio(this.sounds.endFlip);\n      }\n    }\n\n    SoundsEnviroment.prototype.setEnabled = function setEnabled(enabled) {\n      this.enabled = enabled;\n    };\n\n    SoundsEnviroment.prototype.togle = function togle() {\n      this.enabled = !this.enabled;\n    };\n\n    SoundsEnviroment.prototype.dispose = function dispose() {\n      delete this.audio.startFlip;\n      delete this.audio.endFlip;\n    };\n\n    SoundsEnviroment.prototype.startFlip = function startFlip() {\n      if (this.enabled && this.audio.startFlip) {\n        this.audio.startFlip.play();\n      }\n    };\n\n    SoundsEnviroment.prototype.endFlip = function endFlip() {\n      if (this.enabled && this.audio.startFlip) {\n        this.audio.startFlip.pause();\n        this.audio.startFlip.currentTime = 0;\n      }\n      if (this.enabled && this.audio.endFlip) {\n        this.audio.endFlip.play();\n      }\n    };\n\n    SoundsEnviroment.prototype.subscribeFlips = function subscribeFlips(emitter) {\n      emitter.addEventListener('startFlip', this.startFlip.bind(this));\n      emitter.addEventListener('endFlip', this.endFlip.bind(this));\n    };\n\n    return SoundsEnviroment;\n  }();\n\n  exports.default = SoundsEnviroment;\n\n  /***/\n},\n/* 40 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _WidgetController2 = __webpack_require__(67);\n\n  var _WidgetController3 = _interopRequireDefault(_WidgetController2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var TocController = function (_WidgetController) {\n    _inherits(TocController, _WidgetController);\n\n    function TocController(view, bookCtrl) {\n      _classCallCheck(this, TocController);\n\n      var _this = _possibleConstructorReturn(this, _WidgetController.call(this, view));\n\n      _this.bookCtrl = bookCtrl;\n      _this.tab = 'none';\n      return _this;\n    }\n\n    TocController.prototype.setThumbnails = function setThumbnails(thumbnails) {\n      this.thumbnails = thumbnails;\n      thumbnails.onNavigate = this.navigateThumbnails.bind(this);\n      if (this.tab === 'none') {\n        this.tab = 'thumbnails';\n      }\n      this.fireChange();\n    };\n\n    TocController.prototype.setSearch = function setSearch(search) {\n      this.search = search;\n      search.onNavigate = this.navigateSearch.bind(this);\n      this.fireChange();\n    };\n\n    TocController.prototype.setBookmarks = function setBookmarks(bookmarks, pdf) {\n      this.bookmarks = bookmarks;\n      this.pdf = pdf;\n      bookmarks.onNavigate = this.navigateBookmarks.bind(this);\n      if (bookmarks.getSize()) {\n        this.tab = 'bookmarks';\n        this.isBookmarks = true;\n      }\n      this.fireChange();\n    };\n\n    TocController.prototype.cmdBookmarks = function cmdBookmarks() {\n      this.tab = 'bookmarks';\n      this.fireChange();\n    };\n\n    TocController.prototype.cmdThumbnails = function cmdThumbnails() {\n      this.tab = 'thumbnails';\n      this.fireChange();\n    };\n\n    TocController.prototype.cmdSearch = function cmdSearch() {\n      this.tab = 'search';\n      this.fireChange();\n    };\n\n    TocController.prototype.cmdCloseToc = function cmdCloseToc() {\n      this.hide();\n    };\n\n    TocController.prototype.navigateThumbnails = function navigateThumbnails(number) {\n      this.bookCtrl.goToPage(number);\n    };\n\n    TocController.prototype.navigateSearch = function navigateSearch(number) {\n      this.bookCtrl.goToPage(number);\n    };\n\n    TocController.prototype.navigateBookmarks = function navigateBookmarks(item) {\n      var _this2 = this;\n\n      if (item.url) {\n        window.open(item.url, '_blank');\n      } else if (item.dest) {\n        var destPromise = void 0;\n        if (typeof item.dest === 'string') {\n          destPromise = this.pdf.handler.getDestination(item.dest);\n        } else {\n          destPromise = Promise.resolve(item.dest);\n        }\n        destPromise.then(function (dest) {\n          return _this2.pdf.handler.getPageIndex(dest[0]);\n        }).then(function (number) {\n          return _this2.bookCtrl.goToPage(number);\n        }).catch(function () {\n          return console.error('Bad bookmark');\n        });\n      }\n    };\n\n    TocController.prototype.updateView = function updateView() {\n      var _this3 = this;\n\n      if (this.view) {\n        this.view.setState('widTocMenu', {\n          enable: true,\n          visible: true,\n          active: false\n        });\n        this.view.setState('widThumbnails', {\n          enable: true,\n          visible: this.tab === 'thumbnails',\n          active: false\n        });\n        this.view.setState('widSearch', {\n          enable: true,\n          visible: this.tab === 'search',\n          active: false\n        });\n        this.view.setState('widBookmarks', {\n          enable: true,\n          visible: this.tab === 'bookmarks',\n          active: false\n        });\n        this.view.setState('cmdBookmarks', {\n          enable: true,\n          visible: true,\n          active: this.tab === 'bookmarks'\n        });\n        this.view.setState('cmdCloseToc', {\n          enable: true,\n          visible: true,\n          active: false\n        });\n        this.view.setState('cmdThumbnails', {\n          enable: true,\n          visible: true,\n          active: this.tab === 'thumbnails'\n        });\n        this.view.setState('cmdSearch', {\n          enable: true,\n          visible: true,\n          active: this.tab === 'search'\n        });\n        Promise.resolve().then(function () {\n          return _this3.thumbnails.setEnable(_this3.visible && _this3.tab === 'thumbnails');\n        });\n        _WidgetController.prototype.updateView.call(this);\n      }\n    };\n\n    return TocController;\n  }(_WidgetController3.default);\n\n  exports.default = TocController;\n\n  /***/\n},\n/* 41 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(1);\n\n  var _ThreeUtils = __webpack_require__(20);\n\n  var _ThreeUtils2 = _interopRequireDefault(_ThreeUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  var resX = 11,\n      resY = 2,\n      resZ = 15,\n      scale = 1,\n      faces = [];\n\n  var frontGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resY - 1);\n  frontGeometry.translate(0.5 * scale, 0.5 * scale, scale);\n  var backGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resY - 1);\n  backGeometry.rotateY(Math.PI);\n  backGeometry.translate(0.5 * scale, 0.5 * scale, 0);\n  var leftGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resZ - 1, resY - 1);\n  leftGeometry.rotateY(-Math.PI / 2);\n  leftGeometry.translate(0, 0.5 * scale, 0.5 * scale);\n  var rightGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resZ - 1, resY - 1);\n  rightGeometry.rotateY(Math.PI / 2);\n  rightGeometry.translate(scale, 0.5 * scale, 0.5 * scale);\n  var topGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resZ - 1);\n  topGeometry.rotateX(-Math.PI / 2);\n  topGeometry.translate(0.5 * scale, scale, 0.5 * scale);\n  var bottomGeometry = topGeometry.clone();\n  bottomGeometry.translate(0, -scale, 0);\n  for (var _iterator = bottomGeometry.faces, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n    var _ref;\n\n    if (_isArray) {\n      if (_i >= _iterator.length) break;\n      _ref = _iterator[_i++];\n    } else {\n      _i = _iterator.next();\n      if (_i.done) break;\n      _ref = _i.value;\n    }\n\n    var f = _ref;\n    var _ref3 = [f.b, f.a];\n    f.a = _ref3[0];\n    f.b = _ref3[1];\n  }\n\n  var geometry = new _libs.THREE.Geometry();\n  geometry.vertices = [].concat(bottomGeometry.vertices, topGeometry.vertices);\n\n  var addFaces = function addFaces(fs, map) {\n    for (var _iterator2 = fs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      if (_isArray2) {\n        if (_i2 >= _iterator2.length) break;\n        _ref2 = _iterator2[_i2++];\n      } else {\n        _i2 = _iterator2.next();\n        if (_i2.done) break;\n        _ref2 = _i2.value;\n      }\n\n      var f = _ref2;\n\n      geometry.faces.push(new _libs.THREE.Face3(map(f.a), map(f.b), map(f.c)));\n    }\n    faces.push(geometry.faces.length);\n  };\n\n  var mapVertices = function mapVertices(src, dst) {\n    var map = [];\n    var eq = function eq(a, b) {\n      return Math.abs(a.x - b.x) + Math.abs(a.y - b.y) + Math.abs(a.z - b.z) < 1e-4;\n    };\n    for (var i = 0; i < src.length; ++i) {\n      for (var j = 0; j < dst.length; ++j) {\n        if (eq(src[i], dst[j])) {\n          map[i] = j;\n          break;\n        }\n      }\n    }\n    return map;\n  };\n\n  var frontMap = mapVertices(frontGeometry.vertices, geometry.vertices);\n  var backMap = mapVertices(backGeometry.vertices, geometry.vertices);\n  var leftMap = mapVertices(leftGeometry.vertices, geometry.vertices);\n  var rightMap = mapVertices(rightGeometry.vertices, geometry.vertices);\n\n  addFaces(topGeometry.faces, function (i) {\n    return i + bottomGeometry.vertices.length;\n  });\n  addFaces(bottomGeometry.faces, function (i) {\n    return i;\n  });\n  addFaces(frontGeometry.faces, function (i) {\n    return frontMap[i];\n  });\n  addFaces(backGeometry.faces, function (i) {\n    return backMap[i];\n  });\n  addFaces(leftGeometry.faces, function (i) {\n    return leftMap[i];\n  });\n  addFaces(rightGeometry.faces, function (i) {\n    return rightMap[i];\n  });\n  faces.pop();\n\n  _ThreeUtils2.default.computeFaceVertexUvs(geometry, faces);\n\n  geometry.computeVertexNormals();\n  //geometry.computeFaceNormals();\n  geometry.computeBoundingSphere();\n  //geometry.computeBoundingBox();\n  geometry.verticesNeedUpdate = true;\n\n  exports.default = {\n    resX: resX,\n    resY: resY,\n    resZ: resZ,\n    faces: faces,\n    geometry: geometry\n  };\n\n  /***/\n},\n/* 42 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n  exports.props = props;\n  var mouseButtons = {\n    Left: 0,\n    Middle: 1,\n    Right: 2\n  };\n\n  function props() {\n    return {\n      eps: 1e-4,\n      skin: {\n        default: 'short-white-book-view'\n      },\n      scale: {\n        default: 0.9,\n        min: 0.9,\n        max: 2.5,\n        levels: 7\n      },\n      lighting: {\n        default: 0.7,\n        min: 0,\n        max: 1,\n        levels: 7\n      },\n      pan: {\n        speed: 50\n      },\n      loadingAnimation: {\n        skin: false,\n        book: true\n      },\n      autoResolution: {\n        enabled: true,\n        coefficient: 1.5\n      },\n      actions: {\n        cmdZoomIn: {\n          enabled: true\n        },\n        cmdZoomOut: {\n          enabled: true\n        },\n        cmdDefaultZoom: {\n          enabled: true,\n          type: 'dblclick',\n          code: 0\n        },\n        cmdToc: {\n          enabled: true\n        },\n        cmdFastBackward: {\n          enabled: false\n        },\n        cmdBackward: {\n          enabled: true\n        },\n        cmdForward: {\n          enabled: true\n        },\n        cmdFastForward: {\n          enabled: false\n        },\n        cmdSave: {\n          enabled: true\n        },\n        cmdPrint: {\n          enabled: true\n        },\n        cmdFullScreen: {\n          enabled: true\n        },\n        widSettings: {\n          enabled: true\n        },\n        cmdSmartPan: {\n          enabled: true,\n          active: true\n        },\n        cmdSinglePage: {\n          enabled: true,\n          active: false,\n          activeForMobile: false\n        },\n        cmdSounds: {\n          enabled: true,\n          active: true\n        },\n        cmdStats: {\n          enabled: true,\n          active: false\n        },\n        cmdLightingUp: {\n          enabled: true\n        },\n        cmdLightingDown: {\n          enabled: true\n        },\n        cmdPanLeft: {\n          enabled: false\n        },\n        cmdPanRight: {\n          enabled: false\n        },\n        cmdPanUp: {\n          enabled: false\n        },\n        cmdPanDown: {\n          enabled: false\n        },\n        mouseCmdRotate: {\n          enabled: true,\n          type: 'mousedrag',\n          code: mouseButtons.Right\n        },\n        mouseCmdDragZoom: {\n          enabled: true,\n          type: 'mousedrag',\n          code: mouseButtons.Middle\n        },\n        mouseCmdPan: {\n          enabled: true,\n          type: 'mousedrag',\n          code: mouseButtons.Left\n        },\n        mouseCmdWheelZoom: {\n          enabled: true,\n          type: 'mousewheel',\n          code: 0\n        },\n        touchCmdRotate: {\n          enabled: true,\n          type: 'touchdrag',\n          code: 3\n        },\n        touchCmdZoom: {\n          enabled: true,\n          type: 'touchdrag',\n          code: 2\n        },\n        touchCmdPan: {\n          enabled: true,\n          type: 'touchdrag',\n          code: 1\n        },\n        touchCmdSwipe: {\n          enabled: true,\n          type: 'touchdrag',\n          code: 1\n        }\n      }\n    };\n  };\n\n  /***/\n},\n/* 43 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _ImageBase2 = __webpack_require__(5);\n\n  var _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var BlankImage = function (_ImageBase) {\n    _inherits(BlankImage, _ImageBase);\n\n    function BlankImage(context, width, height, color) {\n      _classCallCheck(this, BlankImage);\n\n      var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n      Promise.resolve().then(function () {\n        _this.startRender = function () {\n          _this.renderBlankPage();\n          _this.finishRender();\n        };\n        _this.finishLoad();\n      });\n      return _this;\n    }\n\n    return BlankImage;\n  }(_ImageBase3.default);\n\n  exports.default = BlankImage;\n\n  /***/\n},\n/* 44 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Bookmarks = function () {\n    function Bookmarks(container, items) {\n      var _this = this;\n\n      var getTitle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (i) {\n        return i.title;\n      };\n      var getItems = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (i) {\n        return i.items;\n      };\n\n      _classCallCheck(this, Bookmarks);\n\n      this.container = container;\n      this.map = [];\n      this.getTitle = getTitle;\n      this.getItems = getItems;\n      this.nodes = this.mapNodes(items, this.map);\n\n      this.binds = {\n        togle: function togle(e) {\n          e.preventDefault();\n          var li = (0, _libs.$)(e.target);\n          while (li[0] && li[0] !== container[0] && !li.hasClass('item')) {\n            li = (0, _libs.$)(li[0].parentNode);\n          }\n          if (li.hasClass('item')) {\n            var cmd = (0, _libs.$)(e.target);\n            while (cmd[0] && cmd[0] !== li[0] && !cmd.hasClass('cmd')) {\n              cmd = (0, _libs.$)(cmd[0].parentNode);\n            }\n            if (cmd.hasClass('cmd')) {\n              var node = _this.map[li.attr('data-id')];\n              if (cmd.hasClass('togle')) {\n                node.minimized = !node.minimized;\n                if (node.minimized) {\n                  li.find('ul').remove();\n                  li.find('.togle').addClass('minimized');\n                } else {\n                  li.find('.togle').removeClass('minimized');\n                  li.append((_this.renderNode(node).match(/<ul.*<\\/ul>/) || [''])[0]);\n                }\n              } else {\n                if (_this.onNavigate) {\n                  _this.onNavigate(node.item);\n                }\n              }\n            }\n          }\n        }\n      };\n\n      container.on('click', this.binds.togle);\n      this.update();\n    }\n\n    Bookmarks.prototype.getSize = function getSize() {\n      return this.map.length;\n    };\n\n    Bookmarks.prototype.dispose = function dispose() {\n      this.container.off('click', this.binds.togle);\n      this.container.html('');\n    };\n\n    Bookmarks.prototype.update = function update() {\n      this.container.html(this.renderNodes(this.nodes));\n    };\n\n    Bookmarks.prototype.forEach = function forEach(f) {\n      var nodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.nodes;\n\n      for (var _iterator = nodes || [], _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var node = _ref;\n\n        f(node);\n        this.forEach(f, node.children);\n      }\n    };\n\n    Bookmarks.prototype.expand = function expand() {\n      this.forEach(function (n) {\n        return n.minimized = false;\n      });\n      this.update();\n    };\n\n    Bookmarks.prototype.minimize = function minimize() {\n      this.forEach(function (n) {\n        return n.minimized = true;\n      });\n      this.update();\n    };\n\n    Bookmarks.prototype.renderNode = function renderNode(node) {\n      return ['<div class=\"area\">', node.children ? '<a href=\"#\" class=\"cmd togle' + (node.minimized ? ' minimized' : '') + '\"><i class=\"fa fa-angle-right\"></i></a> ' : '<i class=\"white-space\"></i> ', '<a class=\"cmd\" title=\"', node.title, '\" href=\"#\">', node.title, '</a></div>', node.minimized ? '' : this.renderNodes(node.children)].join('');\n    };\n\n    Bookmarks.prototype.renderNodes = function renderNodes(nodes) {\n      var res = ['<div class=\"bookmarks\">'];\n      if (nodes && nodes.length) {\n        res.push('<ul class=\"level-', nodes[0].level, '\">');\n        for (var _iterator2 = nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n          var _ref2;\n\n          if (_isArray2) {\n            if (_i2 >= _iterator2.length) break;\n            _ref2 = _iterator2[_i2++];\n          } else {\n            _i2 = _iterator2.next();\n            if (_i2.done) break;\n            _ref2 = _i2.value;\n          }\n\n          var node = _ref2;\n\n          res.push(['<li class=\"item\" data-id=\"', node.id, '\">', this.renderNode(node), '</li>'].join(''));\n        }\n        res.push('</ul>');\n      }\n      res.push('</div>');\n      return res.join('');\n    };\n\n    Bookmarks.prototype.mapNodes = function mapNodes(items) {\n      var map = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n      var nodes = null;\n      if (items && items.length) {\n        nodes = [];\n        for (var _iterator3 = items, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n          var _ref3;\n\n          if (_isArray3) {\n            if (_i3 >= _iterator3.length) break;\n            _ref3 = _iterator3[_i3++];\n          } else {\n            _i3 = _iterator3.next();\n            if (_i3.done) break;\n            _ref3 = _i3.value;\n          }\n\n          var item = _ref3;\n\n          var id = map.length;\n          map.push(undefined);\n          var node = {\n            id: id,\n            title: this.getTitle(item),\n            level: level,\n            item: item,\n            minimized: true,\n            children: this.mapNodes(this.getItems(item), map, level + 1)\n          };\n          nodes.push(node);\n          map[id] = node;\n        }\n      }\n      return nodes;\n    };\n\n    return Bookmarks;\n  }();\n\n  exports.default = Bookmarks;\n\n  /***/\n},\n/* 45 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Detector = function () {\n    function Detector() {\n      _classCallCheck(this, Detector);\n    }\n\n    Detector.getWebGLErrorMessage = function getWebGLErrorMessage() {\n      var element = document.createElement('div');\n      element.id = 'webgl-error-message';\n      element.style.fontFamily = 'monospace';\n      element.style.fontSize = '13px';\n      element.style.fontWeight = 'normal';\n      element.style.textAlign = 'center';\n      element.style.background = '#fff';\n      element.style.color = '#000';\n      element.style.padding = '1.5em';\n      element.style.width = '400px';\n      element.style.margin = '5em auto 0';\n\n      if (!Detector.webgl) {\n        element.innerHTML = window.WebGLRenderingContext ? ['Your graphics card does not seem to support <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#000\">WebGL</a>.<br />', 'Find out how to get it <a href=\"http://get.webgl.org/\" style=\"color:#000\">here</a>.'].join('\\n') : ['Your browser does not seem to support <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#000\">WebGL</a>.<br/>', 'Find out how to get it <a href=\"http://get.webgl.org/\" style=\"color:#000\">here</a>.'].join('\\n');\n      }\n      return element;\n    };\n\n    Detector.addGetWebGLMessage = function addGetWebGLMessage(parameters) {\n      var parent = void 0,\n          id = void 0,\n          element = void 0;\n      parameters = parameters || {};\n\n      parent = parameters.parent || (0, _libs.$)(document.body);\n      id = parameters.id || 'oldie';\n\n      element = Detector.getWebGLErrorMessage();\n      //element.id = id;\n\n      parent.append(element);\n    };\n\n    return Detector;\n  }();\n\n  Detector.canvas = !!window.CanvasRenderingContext2D;\n\n  Detector.webgl = function () {\n    try {\n      var canvas = document.createElement('canvas');\n      return !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\n    } catch (e) {\n      return false;\n    }\n  }();\n\n  Detector.workers = !!window.Worker;\n  Detector.fileapi = window.File && window.FileReader && window.FileList && window.Blob;\n  exports.default = Detector;\n\n  /***/\n},\n/* 46 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var DocMouseSimulator = function () {\n    function DocMouseSimulator(jFrame, element) {\n      var bElement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document.body;\n\n      _classCallCheck(this, DocMouseSimulator);\n\n      this.jFrame = jFrame;\n      this.wnd = jFrame[0].contentWindow;\n      this.doc = jFrame[0].contentDocument;\n      this.element = element || doc.body;\n      this.bElement = bElement;\n      this.resendProperties = this.getDefaultResendProperties();\n      this.undefinedProperties = this.getDefaultUndefinedProperties();\n      this.cursors = [];\n      this.onDocChangeClbs = [];\n      var terms = [{\n        find: ':hover',\n        replace: '.' + DocMouseSimulator.HOVER\n      }, {\n        find: ':active',\n        replace: '.' + DocMouseSimulator.ACTIVE\n      }];\n      var style = ['<style type=\"text/css\">'];\n      for (var i = 0; i < this.doc.styleSheets.length; ++i) {\n        var ss = this.doc.styleSheets[i];\n        for (var j = 0; j < ss.cssRules.length; ++j) {\n          var r = ss.cssRules[j],\n              cssText = void 0;\n          for (var _iterator = terms, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n              if (_i >= _iterator.length) break;\n              _ref = _iterator[_i++];\n            } else {\n              _i = _iterator.next();\n              if (_i.done) break;\n              _ref = _i.value;\n            }\n\n            var term = _ref;\n\n            if (~r.selectorText.indexOf(term.find)) {\n              cssText = (cssText || r.cssText).replace(new RegExp(term.find, 'g'), term.replace);\n            }\n          }\n          if (cssText) {\n            style.push(cssText);\n          }\n        }\n      }\n      style.push('</style>');\n      (0, _libs.$)(this.doc.head).append((0, _libs.$)(style.join('')));\n    }\n\n    DocMouseSimulator.prototype.convertCoords = function convertCoords(x, y) {\n      var jElement = (0, _libs.$)(this.element);\n      var offset = jElement.offset();\n      return {\n        x: offset.left + jElement.width() * x,\n        y: offset.top + jElement.height() * (1 - y)\n      };\n    };\n\n    DocMouseSimulator.prototype.triggerEvent = function triggerEvent(element, e, p, type, advancedProps) {\n      var props = {};\n      for (var _iterator2 = this.resendProperties, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var _n = _ref2;\n\n        props[_n] = e[_n];\n      }\n      for (var _iterator3 = this.undefinedProperties, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) break;\n          _ref3 = _i3.value;\n        }\n\n        var _n2 = _ref3;\n\n        props[_n2] = undefined;\n      }\n      for (var n in advancedProps) {\n        if (advancedProps.hasOwnProperty(n)) {\n          props[n] = advancedProps[n];\n        }\n      }\n      props.view = this.wnd;\n      props.pageX = p.x;\n      props.pageY = p.y;\n      var jE = _libs.$.Event(type, props);\n      jE.timeStamp = e.timeStamp;\n      (0, _libs.$)(element).trigger(jE);\n    };\n\n    DocMouseSimulator.prototype.addClass = function addClass(element, name) {\n      (0, _libs.$)(element).addClass(name);\n      var style = this.wnd.getComputedStyle(element);\n      this.cursors.push((0, _libs.$)(this.bElement).css('cursor'));\n      (0, _libs.$)(this.bElement).css('cursor', style.getPropertyValue('cursor'));\n    };\n\n    DocMouseSimulator.prototype.removeClass = function removeClass(element, name) {\n      (0, _libs.$)(element).removeClass(name);\n      (0, _libs.$)(this.bElement).css('cursor', this.cursors.pop());\n    };\n\n    DocMouseSimulator.prototype.enterElement = function enterElement(element) {\n      this.addClass(element, DocMouseSimulator.HOVER);\n    };\n\n    DocMouseSimulator.prototype.leaveElement = function leaveElement(element) {\n      this.removeClass(element, DocMouseSimulator.HOVER);\n    };\n\n    DocMouseSimulator.prototype.activateElement = function activateElement(element) {\n      this.addClass(element, DocMouseSimulator.ACTIVE);\n    };\n\n    DocMouseSimulator.prototype.deactivateElement = function deactivateElement(element) {\n      this.removeClass(element, DocMouseSimulator.ACTIVE);\n    };\n\n    DocMouseSimulator.prototype.addDocChangeClb = function addDocChangeClb(clb) {\n      this.onDocChangeClbs.push(clb);\n    };\n\n    DocMouseSimulator.prototype.notify = function notify() {\n      for (var _iterator4 = this.onDocChangeClbs, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i4 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i4++];\n        } else {\n          _i4 = _iterator4.next();\n          if (_i4.done) break;\n          _ref4 = _i4.value;\n        }\n\n        var clb = _ref4;\n\n        clb(this.wnd, this.doc);\n      }\n    };\n\n    DocMouseSimulator.prototype.elementFromPoint = function elementFromPoint(p) {\n      var node = this.doc.body,\n          next = true;\n      while (next) {\n        next = false;\n        for (var i = 0; i < node.childNodes.length; ++i) {\n          var child = node.childNodes[i];\n          if (child instanceof this.wnd.Element) {\n            var jC = (0, _libs.$)(child),\n                offset = jC.offset(),\n                height = jC.height(),\n                width = jC.width();\n            if (p.x > offset.left && p.x < offset.left + width && p.y > offset.top && p.y < offset.top + height) {\n              node = child;\n              next = true;\n              break;\n            }\n          }\n        }\n      }\n      return node;\n    };\n\n    DocMouseSimulator.prototype.getElement = function getElement(p) {\n      var off0 = this.jFrame.offset();\n      this.jFrame.offset({ left: 0.5 * window.innerWidth - p.x, top: 0.5 * window.innerHeight - p.y });\n      var element = this.doc.elementFromPoint(p.x, p.y);\n      if (!element) {\n        // it isn't a joke it's IE\n        element = this.doc.elementFromPoint(p.x, p.y);\n      }\n      this.jFrame.offset(off0);\n      return element ? element : this.elementFromPoint(p);\n    };\n\n    DocMouseSimulator.prototype.simulate = function simulate(e, doc, x, y) {\n      var p = this.convertCoords(x, y),\n          element = doc === this.doc ? this.getElement(p) : undefined;\n      var trigger = element !== undefined,\n          notify = false;\n\n      switch (e.type) {\n        case 'mousedown':\n          {\n            if (this.capElement) {\n              this.deactivateElement(this.capElement);\n              notify = true;\n            }\n            this.capElement = element;\n            if (this.capElement) {\n              this.activateElement(this.capElement);\n              notify = true;\n            }\n            break;\n          }\n        case 'mouseup':\n          {\n            if (this.capElement) {\n              this.deactivateElement(this.capElement);\n              notify = true;\n            }\n            this.timeStamp = e.timeStamp;\n            break;\n          }\n        case 'click':\n          {\n            trigger = element && this.capElement === element && e.timeStamp === this.timeStamp;\n            this.capElement = undefined;\n            break;\n          }\n        case 'mouseenter':\n        case 'mouseover':\n        case 'mousemove':\n          {\n            var leaved = null;\n            if (this.hovElement !== element && this.hovElement) {\n              this.triggerEvent(this.hovElement, e, p, 'mouseout', { relatedTarget: element ? element : null });\n              this.leaveElement(this.hovElement);\n              leaved = this.hovElement;\n              this.hovElement = undefined;\n              notify = true;\n            }\n            if (!this.hovElement && element) {\n              this.triggerEvent(element, e, p, 'mouseover', { relatedTarget: leaved });\n              this.enterElement(element);\n              this.hovElement = element;\n              notify = true;\n            }\n            trigger = element && e.type === 'mousemove';\n            break;\n          }\n        case 'mouseleave':\n        case 'mouseout':\n          {\n            if (this.hovElement) {\n              this.triggerEvent(this.hovElement, e, p, 'mouseout', { relatedTarget: e.relatedTarget });\n              this.leaveElement(this.hovElement);\n              this.hovElement = undefined;\n              notify = true;\n            }\n            trigger = false;\n            break;\n          }\n      }\n      if (trigger) {\n        this.triggerEvent(element, e, p, e.type);\n      }\n      if (notify) {\n        this.notify();\n      }\n    };\n\n    DocMouseSimulator.prototype.getDefaultUndefinedProperties = function getDefaultUndefinedProperties() {\n      return ['clientX', 'clientY', 'offsetX', 'offsetY', 'screenX', 'screenY'];\n    };\n\n    DocMouseSimulator.prototype.getDefaultResendProperties = function getDefaultResendProperties() {\n      return ['altKey', 'bubbles', 'button', 'buttons', 'cancelable', 'changedTouches', 'char', 'charCode', 'ctrlKey', 'data', 'detail', 'eventPhase', 'isDefaultPrevented', 'key', 'keyCode', 'metaKey', 'pointerId', 'pointerType', 'shiftKey', 'targetTouches', 'touches', 'which'];\n    };\n\n    return DocMouseSimulator;\n  }();\n\n  /*\n  altKey,\n  bubbles,\n  button,\n  buttons,\n  cancelable,\n  changedTouches,\n  char,\n  charCode,\n  clientX,\n  clientY,\n  ctrlKey,\n  currentTarget,\n  data,\n  delegateTarget,\n  detail,\n  eventPhase,\n  handleObj,\n  isDefaultPrevented,\n  key,\n  keyCode,\n  metaKey,\n  offsetX,\n  offsetY,\n  originalEvent,\n  pageX,\n  pageY,\n  pointerId,\n  pointerType,\n  relatedTarget,\n  screenX,\n  screenY,\n  shiftKey,\n  target,\n  targetTouches,\n  timeStamp,\n  toElement,\n  touches,\n  type,\n  view,\n  which\n  */\n\n  DocMouseSimulator.HOVER = 'SIMULATED-HOVER';\n  DocMouseSimulator.ACTIVE = 'SIMULATED-ACTIVE';\n  exports.default = DocMouseSimulator;\n\n  /***/\n},\n/* 47 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Dom2Image = function Dom2Image(wnd, doc, cache) {\n    _classCallCheck(this, Dom2Image);\n\n    var self = this;\n    this.window = wnd;\n    this.document = doc;\n    this.cache = cache;\n\n    var util = newUtil();\n    var inliner = newInliner();\n    var fontFaces = newFontFaces();\n    var images = newImages();\n\n    this.toSvg = toSvg;\n    this.toPng = toPng;\n    this.toJpeg = toJpeg;\n    this.toBlob = toBlob;\n    this.toPixelData = toPixelData;\n    this.impl = {\n      fontFaces: fontFaces,\n      images: images,\n      util: util,\n      inliner: inliner\n    };\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options\n     * @param {Function} options.filter - Should return true if passed node should be included in the output\n     *          (excluding node means excluding it's children as well). Not called on the root node.\n     * @param {String} options.bgcolor - color for the background, any valid CSS color value.\n     * @param {Number} options.width - width to be applied to node before rendering.\n     * @param {Number} options.height - height to be applied to node before rendering.\n     * @param {Object} options.style - an object whose properties to be copied to node's style before rendering.\n     * @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only),\n                defaults to 1.0.\n     * @return {Promise} - A promise that is fulfilled with a SVG image data URL\n     * */\n\n    function toSvg(node, options) {\n      options = options || {};\n      return Promise.resolve(node).then(function (node) {\n        return cloneNode(node, options.filter, true);\n      }).then(embedFonts).then(inlineImages).then(applyOptions).then(function (clone) {\n        return makeSvgDataUri(clone, options.width || util.width(node), options.height || util.height(node));\n      });\n\n      function applyOptions(clone) {\n        if (options.bgcolor) clone.style.backgroundColor = options.bgcolor;\n\n        if (options.width) clone.style.width = options.width + 'px';\n        if (options.height) clone.style.height = options.height + 'px';\n\n        if (options.style) self.window.Object.keys(options.style).forEach(function (property) {\n          clone.style[property] = options.style[property];\n        });\n\n        return clone;\n      }\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.\n     * */\n    function toPixelData(node, options) {\n      return draw(node, options || {}).then(function (canvas) {\n        return canvas.getContext('2d').getImageData(0, 0, util.width(node), util.height(node)).data;\n      });\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a PNG image data URL\n     * */\n    function toPng(node, options) {\n      return draw(node, options || {}).then(function (canvas) {\n        return canvas.toDataURL();\n      });\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a JPEG image data URL\n     * */\n    function toJpeg(node, options) {\n      options = options || {};\n      return draw(node, options).then(function (canvas) {\n        return canvas.toDataURL('image/jpeg', options.quality || 1.0);\n      });\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a PNG image blob\n     * */\n    function toBlob(node, options) {\n      return draw(node, options || {}).then(util.canvasToBlob);\n    }\n\n    function draw(domNode, options) {\n      return toSvg(domNode, options).then(util.makeImage).then(util.delay(100)).then(function (image) {\n        var canvas = newCanvas(domNode);\n        canvas.getContext('2d').drawImage(image, 0, 0);\n        return canvas;\n      });\n\n      function newCanvas(domNode) {\n        var canvas = self.document.createElement('canvas');\n        canvas.width = options.width || util.width(domNode);\n        canvas.height = options.height || util.height(domNode);\n\n        if (options.bgcolor) {\n          var ctx = canvas.getContext('2d');\n          ctx.fillStyle = options.bgcolor;\n          ctx.fillRect(0, 0, canvas.width, canvas.height);\n        }\n\n        return canvas;\n      }\n    }\n\n    function cloneNode(node, filter, root) {\n      if (!root && filter && !filter(node)) return Promise.resolve();\n\n      return Promise.resolve(node).then(makeNodeCopy).then(function (clone) {\n        return cloneChildren(node, clone, filter);\n      }).then(function (clone) {\n        return processClone(node, clone);\n      });\n\n      function makeNodeCopy(node) {\n        if (util.isCanvas(node)) return util.makeImage(node.toDataURL());\n        return node.cloneNode(false);\n      }\n\n      function cloneChildren(original, clone, filter) {\n        var children = original.childNodes;\n        if (children.length === 0) return Promise.resolve(clone);\n\n        return cloneChildrenInOrder(clone, util.asArray(children), filter).then(function () {\n          return clone;\n        });\n\n        function cloneChildrenInOrder(parent, children, filter) {\n          var done = Promise.resolve();\n          children.forEach(function (child) {\n            done = done.then(function () {\n              return cloneNode(child, filter);\n            }).then(function (childClone) {\n              if (childClone) parent.appendChild(childClone);\n            });\n          });\n          return done;\n        }\n      }\n\n      function processClone(original, clone) {\n        if (!util.isElement(clone)) return clone;\n\n        return Promise.resolve().then(cloneStyle).then(clonePseudoElements).then(copyUserInput).then(fixSvg).then(function () {\n          return clone;\n        });\n\n        function cloneStyle() {\n          copyStyle(self.window.getComputedStyle(original), clone.style);\n\n          function copyStyle(source, target) {\n            if (source.cssText) target.cssText = source.cssText;else copyProperties(source, target);\n\n            function copyProperties(source, target) {\n              util.asArray(source).forEach(function (name) {\n                target.setProperty(name, source.getPropertyValue(name), source.getPropertyPriority(name));\n              });\n            }\n          }\n        }\n\n        function clonePseudoElements() {\n          [':before', ':after'].forEach(function (element) {\n            clonePseudoElement(element);\n          });\n\n          function clonePseudoElement(element) {\n            var style = self.window.getComputedStyle(original, element);\n            var content = style.getPropertyValue('content');\n\n            if (content === '' || content === 'none') return;\n\n            var className = util.uid();\n            clone.className = clone.className + ' ' + className;\n            var styleElement = self.document.createElement('style');\n            styleElement.appendChild(formatPseudoElementStyle(className, element, style));\n            clone.appendChild(styleElement);\n\n            function formatPseudoElementStyle(className, element, style) {\n              var selector = '.' + className + ':' + element;\n              var cssText = style.cssText ? formatCssText(style) : formatCssProperties(style);\n              return self.document.createTextNode(selector + '{' + cssText + '}');\n\n              function formatCssText(style) {\n                var content = style.getPropertyValue('content');\n                return style.cssText + ' content: ' + content + ';';\n              }\n\n              function formatCssProperties(style) {\n\n                return util.asArray(style).map(formatProperty).join('; ') + ';';\n\n                function formatProperty(name) {\n                  return name + ': ' + style.getPropertyValue(name) + (style.getPropertyPriority(name) ? ' !important' : '');\n                }\n              }\n            }\n          }\n        }\n\n        function copyUserInput() {\n          if (util.isTextArea(original)) clone.innerHTML = original.value;\n          if (util.isInput(original)) clone.setAttribute(\"value\", original.value);\n        }\n\n        function fixSvg() {\n          if (!util.isSVG(clone)) return;\n          clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n          if (!util.isSVGRect(clone)) return;\n          ['width', 'height'].forEach(function (attribute) {\n            var value = clone.getAttribute(attribute);\n            if (!value) return;\n\n            clone.style.setProperty(attribute, value);\n          });\n        }\n      }\n    }\n\n    function embedFonts(node) {\n      return fontFaces.resolveAll().then(function (cssText) {\n        var styleNode = self.document.createElement('style');\n        node.appendChild(styleNode);\n        styleNode.appendChild(self.document.createTextNode(cssText));\n        return node;\n      });\n    }\n\n    function inlineImages(node) {\n      return images.inlineAll(node).then(function () {\n        return node;\n      });\n    }\n\n    function makeSvgDataUri(node, width, height) {\n      return Promise.resolve(node).then(function (node) {\n        node.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n        return new self.window.XMLSerializer().serializeToString(node);\n      }).then(util.escapeXhtml).then(function (xhtml) {\n        return ['data:image/svg+xml;charset=utf-8,', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"', width, '\" height=\"', height, '\">', '<foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">', xhtml, '</foreignObject>', '</svg>'].join('');\n      });\n    }\n\n    function newUtil() {\n      return {\n        escape: escape,\n        parseExtension: parseExtension,\n        mimeType: mimeType,\n        dataAsUrl: dataAsUrl,\n        isDataUrl: isDataUrl,\n        canvasToBlob: canvasToBlob,\n        resolveUrl: resolveUrl,\n        getAndEncode: getAndEncode,\n        uid: uid(),\n        delay: delay,\n        asArray: asArray,\n        escapeXhtml: escapeXhtml,\n        makeImage: makeImage,\n        width: width,\n        height: height,\n\n        isElement: isElement,\n        isCanvas: isCanvas,\n        isTextArea: isTextArea,\n        isInput: isInput,\n        isSVG: isSVG,\n        isSVGRect: isSVGRect,\n        isImage: isImage\n      };\n\n      function mimes() {\n        /*\n         * Only WOFF and EOT mime types for fonts are 'real'\n         * see http://www.iana.org/assignments/media-types/media-types.xhtml\n         */\n        var WOFF = 'application/font-woff';\n        var JPEG = 'image/jpeg';\n\n        return {\n          'woff': WOFF,\n          'woff2': WOFF,\n          'ttf': 'application/font-truetype',\n          'eot': 'application/vnd.ms-fontobject',\n          'png': 'image/png',\n          'jpg': JPEG,\n          'jpeg': JPEG,\n          'gif': 'image/gif',\n          'tiff': 'image/tiff',\n          'svg': 'image/svg+xml'\n        };\n      }\n\n      function parseExtension(url) {\n        var match = /\\.([^\\.\\/]*?)$/g.exec(url);\n        if (match) return match[1];else return '';\n      }\n\n      function mimeType(url) {\n        var extension = parseExtension(url).toLowerCase();\n        return mimes()[extension] || '';\n      }\n\n      function isDataUrl(url) {\n        return url.search(/^(data:)/) !== -1;\n      }\n\n      function toBlob(canvas) {\n        return new Promise(function (resolve) {\n          var binaryString = self.window.atob(canvas.toDataURL().split(',')[1]);\n          var length = binaryString.length;\n          var binaryArray = new self.window.Uint8Array(length);\n\n          for (var i = 0; i < length; i++) {\n            binaryArray[i] = binaryString.charCodeAt(i);\n          }resolve(new self.window.Blob([binaryArray], {\n            type: 'image/png'\n          }));\n        });\n      }\n\n      function canvasToBlob(canvas) {\n        if (canvas.toBlob) return new Promise(function (resolve) {\n          canvas.toBlob(resolve);\n        });\n\n        return toBlob(canvas);\n      }\n\n      function resolveUrl(url, baseUrl) {\n        var doc = self.document.implementation.createHTMLDocument();\n        var base = doc.createElement('base');\n        doc.head.appendChild(base);\n        var a = doc.createElement('a');\n        doc.body.appendChild(a);\n        base.href = baseUrl;\n        a.href = url;\n        return a.href;\n      }\n\n      function uid() {\n        var index = 0;\n\n        return function () {\n          return 'u' + fourRandomChars() + index++;\n\n          function fourRandomChars() {\n            /* see http://stackoverflow.com/a/6248722/2519373 */\n            return ('0000' + (self.window.Math.random() * self.window.Math.pow(36, 4) << 0).toString(36)).slice(-4);\n          }\n        };\n      }\n\n      function makeImage(uri) {\n        return new Promise(function (resolve, reject) {\n          var image = new self.window.Image();\n          image.onload = function () {\n            resolve(image);\n          };\n          image.onerror = reject;\n          image.src = uri;\n        });\n      }\n\n      function getAndEncode(url) {\n        var data = self.cache.get(url);\n        if (data) {\n          if (data.content) {\n            return data.content;\n          } else {\n            return new Promise(function (resolve) {\n              if (data.content) {\n                resolve(data.content);\n              } else {\n                data.pendings.push(resolve);\n              }\n            });\n          }\n        } else {\n          data = self.cache.put(url, { pendings: [] });\n\n          var TIMEOUT = 30000;\n\n          return new Promise(function (resolve) {\n            var request = new self.window.XMLHttpRequest();\n\n            request.onreadystatechange = done;\n            request.ontimeout = timeout;\n            request.responseType = 'blob';\n            request.timeout = TIMEOUT;\n            request.open('GET', url, true);\n            request.send();\n\n            function done() {\n              if (request.readyState !== 4) return;\n\n              if (request.status !== 200) {\n                fail('cannot fetch resource: ' + url + ', status: ' + request.status);\n                return;\n              }\n\n              var encoder = new self.window.FileReader();\n              encoder.onloadend = function () {\n                data.content = encoder.result.split(/,/)[1];\n                for (var _iterator = data.pendings, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n                  var _ref;\n\n                  if (_isArray) {\n                    if (_i >= _iterator.length) break;\n                    _ref = _iterator[_i++];\n                  } else {\n                    _i = _iterator.next();\n                    if (_i.done) break;\n                    _ref = _i.value;\n                  }\n\n                  var _resolve = _ref;\n\n                  _resolve(data.content);\n                }\n                data.pendings = [];\n                resolve(data.content);\n              };\n              encoder.readAsDataURL(request.response);\n            }\n\n            function timeout() {\n              fail('timeout of ' + TIMEOUT + 'ms occured while fetching resource: ' + url);\n            }\n\n            function fail(message) {\n              console.error(message);\n              resolve('');\n            }\n          });\n        }\n      }\n\n      function dataAsUrl(content, type) {\n        return ['data:', type, ';base64,', content].join('');\n      }\n\n      function escape(string) {\n        return string.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n      }\n\n      function delay(ms) {\n        return function (arg) {\n          return new Promise(function (resolve) {\n            setTimeout(function () {\n              resolve(arg);\n            }, ms);\n          });\n        };\n      }\n\n      function asArray(arrayLike) {\n        var array = [];\n        var length = arrayLike.length;\n        for (var i = 0; i < length; i++) {\n          array.push(arrayLike[i]);\n        }return array;\n      }\n\n      function escapeXhtml(string) {\n        return string.replace(/(#|\\n)/g, function (c) {\n          return c === '#' ? '%23' : '%0A';\n        });\n      }\n\n      function width(node) {\n        var leftBorder = px(node, 'border-left-width');\n        var rightBorder = px(node, 'border-right-width');\n        return node.scrollWidth + leftBorder + rightBorder;\n      }\n\n      function height(node) {\n        var topBorder = px(node, 'border-top-width');\n        var bottomBorder = px(node, 'border-bottom-width');\n        return node.scrollHeight + topBorder + bottomBorder;\n      }\n\n      function px(node, styleProperty) {\n        var value = self.window.getComputedStyle(node).getPropertyValue(styleProperty);\n        return parseFloat(value.replace('px', ''));\n      }\n\n      function isElement(node) {\n        return node instanceof self.window.Element;\n      }\n\n      function isCanvas(node) {\n        return node instanceof self.window.HTMLCanvasElement;\n      }\n\n      function isTextArea(node) {\n        return node instanceof self.window.HTMLTextAreaElement;\n      }\n\n      function isInput(node) {\n        return node instanceof self.window.HTMLInputElement;\n      }\n\n      function isSVG(node) {\n        return node instanceof self.window.SVGElement;\n      }\n\n      function isSVGRect(node) {\n        return node instanceof self.window.SVGRectElement;\n      }\n\n      function isImage(node) {\n        return node instanceof self.window.HTMLImageElement;\n      }\n    }\n\n    function newInliner() {\n      var URL_REGEX = /url\\(['\"]?([^'\"]+?)['\"]?\\)/g;\n\n      return {\n        inlineAll: inlineAll,\n        shouldProcess: shouldProcess,\n        impl: {\n          readUrls: readUrls,\n          inline: inline\n        }\n      };\n\n      function shouldProcess(string) {\n        return string.search(URL_REGEX) !== -1;\n      }\n\n      function readUrls(string) {\n        var result = [];\n        var match = void 0;\n        while ((match = URL_REGEX.exec(string)) !== null) {\n          result.push(match[1]);\n        }\n        return result.filter(function (url) {\n          return !util.isDataUrl(url);\n        });\n      }\n\n      function inline(string, url, baseUrl, get) {\n        return Promise.resolve(url).then(function (url) {\n          return baseUrl ? util.resolveUrl(url, baseUrl) : url;\n        }).then(get || util.getAndEncode).then(function (data) {\n          return util.dataAsUrl(data, util.mimeType(url));\n        }).then(function (dataUrl) {\n          return string.replace(urlAsRegex(url), ['$1', dataUrl, '$3'].join(''));\n        });\n\n        function urlAsRegex(url) {\n          return new self.window.RegExp(['(url\\\\([\\'\"]?)(', util.escape(url), ')([\\'\"]?\\\\))'].join(''), 'g');\n        }\n      }\n\n      function inlineAll(string, baseUrl, get) {\n        if (nothingToInline()) return Promise.resolve(string);\n\n        return Promise.resolve(string).then(readUrls).then(function (urls) {\n          var done = Promise.resolve(string);\n          urls.forEach(function (url) {\n            done = done.then(function (string) {\n              return inline(string, url, baseUrl, get);\n            });\n          });\n          return done;\n        });\n\n        function nothingToInline() {\n          return !shouldProcess(string);\n        }\n      }\n    }\n\n    function newFontFaces() {\n      return {\n        resolveAll: resolveAll,\n        impl: {\n          readAll: readAll\n        }\n      };\n\n      function resolveAll() {\n        return readAll(self.document).then(function (webFonts) {\n          return Promise.all(webFonts.map(function (webFont) {\n            return webFont.resolve();\n          }));\n        }).then(function (cssStrings) {\n          return cssStrings.join('\\n');\n        });\n      }\n\n      function readAll() {\n        return Promise.resolve(util.asArray(self.document.styleSheets)).then(getCssRules).then(selectWebFontRules).then(function (rules) {\n          return rules.map(newWebFont);\n        });\n\n        function selectWebFontRules(cssRules) {\n          return cssRules.filter(function (rule) {\n            return rule.type === CSSRule.FONT_FACE_RULE;\n          }).filter(function (rule) {\n            return inliner.shouldProcess(rule.style.getPropertyValue('src'));\n          });\n        }\n\n        function getCssRules(styleSheets) {\n          var cssRules = [];\n          styleSheets.forEach(function (sheet) {\n            try {\n              util.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));\n            } catch (e) {\n              console.log('Error while reading CSS rules from ' + sheet.href, e.toString());\n            }\n          });\n          return cssRules;\n        }\n\n        function newWebFont(webFontRule) {\n          return {\n            resolve: function resolve() {\n              var baseUrl = (webFontRule.parentStyleSheet || {}).href;\n              return inliner.inlineAll(webFontRule.cssText, baseUrl);\n            },\n            src: function src() {\n              return webFontRule.style.getPropertyValue('src');\n            }\n          };\n        }\n      }\n    }\n\n    function newImages() {\n      return {\n        inlineAll: inlineAll,\n        impl: {\n          newImage: newImage\n        }\n      };\n\n      function newImage(element) {\n        return {\n          inline: inline\n        };\n\n        function inline(get) {\n          if (util.isDataUrl(element.src)) return Promise.resolve();\n\n          return Promise.resolve(element.src).then(get || util.getAndEncode).then(function (data) {\n            return util.dataAsUrl(data, util.mimeType(element.src));\n          }).then(function (dataUrl) {\n            return new Promise(function (resolve, reject) {\n              element.onload = resolve;\n              element.onerror = reject;\n              element.src = dataUrl;\n            });\n          });\n        }\n      }\n\n      function inlineAll(node) {\n        if (!util.isElement(node)) return Promise.resolve(node);\n\n        return inlineBackground(node).then(function () {\n          if (util.isImage(node)) return newImage(node).inline();else return Promise.all(util.asArray(node.childNodes).map(function (child) {\n            return inlineAll(child);\n          }));\n        });\n\n        function inlineBackground(node) {\n          var background = node.style.getPropertyValue('background');\n\n          if (!background) return Promise.resolve(node);\n\n          return inliner.inlineAll(background).then(function (inlined) {\n            node.style.setProperty('background', inlined, node.style.getPropertyPriority('background'));\n          }).then(function () {\n            return node;\n          });\n        }\n      }\n    }\n  };\n\n  exports.default = Dom2Image;\n\n  /***/\n},\n/* 48 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Drag = function () {\n    function Drag(wnd, doc, visualWorld) {\n      _classCallCheck(this, Drag);\n\n      this.wnd = wnd;\n      this.doc = doc;\n      this.visual = visualWorld;\n      this.coords = new _libs.THREE.Vector2();\n      this.intersection = new _libs.THREE.Vector3();\n      this.raycaster = this.visual.raycaster;\n      this.camera = this.visual.camera;\n      this.plane = new _libs.THREE.Plane();\n      this.threes = [];\n      this.selected = null;\n      this.enabled = true;\n      this.controlsState = this.visual.getControlsState();\n\n      this.element = this.visual.element;\n      this.binds = {\n        onMouseMove: this.onMouseMove.bind(this),\n        onMouseDown: this.onMouseDown.bind(this),\n        onMouseUp: this.onMouseUp.bind(this)\n      };\n      (0, _libs.$)(this.element).on('mousemove', this.binds.onMouseMove);\n      (0, _libs.$)(this.element).on('mousedown', this.binds.onMouseDown);\n      (0, _libs.$)(this.doc).on('mouseup', this.binds.onMouseUp);\n    }\n\n    Drag.prototype.addThree = function addThree(three) {\n      this.threes.push(three);\n    };\n\n    Drag.prototype.removeThree = function removeThree(three) {\n      var i = this.threes.indexOf(three);\n      if (~i) {\n        this.threes.splice(i, 1);\n      }\n    };\n\n    Drag.prototype.onPickCallback = function onPickCallback() {\n      return true;\n    };\n\n    Drag.prototype.onDragCallback = function onDragCallback() {\n      return true;\n    };\n\n    Drag.prototype.onReleaseCallback = function onReleaseCallback() {};\n\n    Drag.prototype.dispose = function dispose() {\n      (0, _libs.$)(this.element).off('mousemove', this.binds.onMouseMove);\n      (0, _libs.$)(this.element).off('mousedown', this.binds.onMouseDown);\n      (0, _libs.$)(this.doc).off('mouseup', this.binds.onMouseUp);\n    };\n\n    Drag.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {\n      var jElement = (0, _libs.$)(this.element);\n      var offset = jElement.offset();\n      this.coords.x = (e.pageX - offset.left) / jElement.width() * 2 - 1;\n      this.coords.y = -((e.pageY - offset.top) / jElement.height()) * 2 + 1;\n      return this.coords;\n    };\n\n    Drag.prototype.onMouseDown = function onMouseDown(e) {\n      if (!this.enabled) return;\n\n      if (this.selected) this.onMouseUp(e);\n\n      this.setCoordsFromEvent(e);\n      this.raycaster.setFromCamera(this.coords, this.camera);\n\n      var intersects = this.raycaster.intersectObjects(this.threes);\n      if (intersects.length > 0) {\n        var selected = intersects[0].object;\n        if (!this.onPickCallback(intersects[0])) return;\n        var v = intersects[0].point.clone();\n        this.distance = v.sub(this.raycaster.ray.origin).length();;\n        this.controlsState = this.visual.getControlsState();\n        this.visual.setControlsState(false);\n        this.plane.setFromNormalAndCoplanarPoint(this.visual.camera.getWorldDirection(this.plane.normal), intersects[0].point);\n        //this.plane.setFromNormalAndCoplanarPoint(this.plane.normal.set(0,0,1), new THREE.Vector3(0,0,0));\n        this.selected = selected;\n      }\n    };\n\n    Drag.prototype.onMouseMove = function onMouseMove(e) {\n      if (!this.enabled) return;\n      e.preventDefault();\n\n      if (this.selected) {\n        this.setCoordsFromEvent(e);\n        this.raycaster.setFromCamera(this.coords, this.camera);\n        if (this.raycaster.ray.intersectPlane(this.plane, this.intersection)) {\n          if (!this.onDragCallback(this.intersection)) this.onMouseUp(e);\n        } /**/\n        //this.intersection.copy(this.raycaster.ray.direction).normalize().multiplyScalar(this.distance).add(this.raycaster.ray.origin);/**/\n        //if(!this.onDragCallback(this.selected, this.intersection)) this.onMouseUp(e);\n      }\n    };\n\n    Drag.prototype.onMouseUp = function onMouseUp(e) {\n      if (this.selected) {\n        this.onReleaseCallback();\n        this.selected = null;\n        this.visual.setControlsState(this.controlsState);\n      }\n      if (!this.enabled) return;\n      e.preventDefault();\n    };\n\n    return Drag;\n  }();\n\n  exports.default = Drag;\n\n  /***/\n},\n/* 49 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  __webpack_require__(71)(_libs.$);\n\n  var EventsToActions = function () {\n    EventsToActions.getEventFlags = function getEventFlags(e) {\n      return e.ctrlKey << 0 | e.shiftKey << 1 | e.altKey << 2;\n    };\n\n    EventsToActions.getPosition = function getPosition(touches) {\n      var x = void 0,\n          y = void 0;\n      if (touches.length === 2) {\n        x = touches[1].pageX - touches[0].pageX;\n        y = touches[1].pageY - touches[0].pageY;\n        y = -Math.sqrt(x * x + y * y);\n        x = 0;\n      } else {\n        x = touches[0].pageX;\n        y = touches[0].pageY;\n      }\n      return {\n        x: x,\n        y: y\n      };\n    };\n\n    function EventsToActions(element, actions) {\n      _classCallCheck(this, EventsToActions);\n\n      this.actions = actions || {};\n      this.element = element;\n      this.doc = element[0].ownerDocument;\n      this.wnd = this.doc.defaultView;\n      this.enabled = true;\n\n      this.binds = {\n        contextMenu: this.contextMenu.bind(this),\n\n        mouseDown: this.mouseDown.bind(this),\n        mouseMove: this.mouseMove.bind(this),\n        mouseUp: this.mouseUp.bind(this),\n        mouseWheel: this.mouseWheel.bind(this),\n\n        mouseMoveDoc: this.mouseMoveDoc.bind(this),\n        mouseUpDoc: this.mouseUpDoc.bind(this),\n\n        click: this.click.bind(this),\n        dblclick: this.dblclick.bind(this),\n\n        touchStart: this.touchStart.bind(this),\n        touchMove: this.touchMove.bind(this),\n        touchEnd: this.touchEnd.bind(this),\n\n        keyDown: this.keyDown.bind(this),\n        keyPress: this.keyPress.bind(this),\n        keyUp: this.keyUp.bind(this)\n      };\n\n      this.element.on('contextmenu', this.binds.contextMenu);\n\n      this.element.on('mousedown', this.binds.mouseDown);\n      this.element.on('mousemove', this.binds.mouseMove);\n      this.element.on('mouseup', this.binds.mouseUp);\n      this.element.on('mousewheel', this.binds.mouseWheel);\n\n      (0, _libs.$)(this.doc).on('mousemove', this.binds.mouseMoveDoc);\n      (0, _libs.$)(this.doc).on('mouseup', this.binds.mouseUpDoc);\n\n      this.element.on('click', this.binds.click);\n      this.element.on('dblclick', this.binds.dblclick);\n\n      this.element.on('touchstart', this.binds.touchStart);\n      this.element.on('touchmove', this.binds.touchMove);\n      this.element.on('touchend', this.binds.touchEnd);\n\n      (0, _libs.$)(this.wnd).on('keydown', this.binds.keyDown);\n      (0, _libs.$)(this.wnd).on('keypress', this.binds.keyPress);\n      (0, _libs.$)(this.wnd).on('keyup', this.binds.keyUp);\n    }\n\n    EventsToActions.prototype.addAction = function addAction(action, type, code, flags) {\n      type = type.toLowerCase();\n      if (!this.actions[type]) {\n        this.actions[type] = {};\n      }\n      if (!this.actions[type][code]) {\n        this.actions[type][code] = {};\n      }\n      if (!this.actions[type][code][flags]) {\n        this.actions[type][code][flags] = [];\n      }\n      this.actions[type][code][flags].push(action);\n    };\n\n    EventsToActions.prototype.getActions = function getActions(type, code, flags) {\n      return ((this.actions[type] || {})[code] || {})[flags] || [];\n    };\n\n    EventsToActions.prototype.fireActions = function fireActions(actions, e, data) {\n      for (var _iterator = actions, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var action = _ref;\n\n        action(e, data);\n      }\n    };\n\n    EventsToActions.prototype.contextMenu = function contextMenu(e) {\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e);\n        this.fireActions(this.getActions('contextmenu', e.button, flags), e);\n      }\n    };\n\n    EventsToActions.prototype.mouseDown = function mouseDown(e) {\n      if (this.picked) {\n        this.mouseUpDoc();\n      }\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e);\n        this.fireActions(this.getActions('mousedown', e.button, flags), e);\n        this.picked = {\n          x: e.pageX,\n          y: e.pageY,\n          actions: this.getActions('mousedrag', e.button, flags)\n        };\n        this.fireActions(this.picked.actions, e, {\n          state: 'start'\n        });\n      }\n    };\n\n    EventsToActions.prototype.mouseMove = function mouseMove(e) {\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e);\n        this.fireActions(this.getActions('mousemove', e.button, flags), e);\n      }\n    };\n\n    EventsToActions.prototype.mouseMoveDoc = function mouseMoveDoc(e) {\n      if (this.enabled && this.picked) {\n        this.fireActions(this.picked.actions, e, {\n          state: 'move',\n          dx: e.pageX - this.picked.x,\n          dy: e.pageY - this.picked.y\n        });\n        this.picked = {\n          x: e.pageX,\n          y: e.pageY,\n          actions: this.picked.actions\n        };\n      }\n    };\n\n    EventsToActions.prototype.mouseUp = function mouseUp(e) {\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e);\n        this.fireActions(this.getActions('mouseup', e.button, flags), e);\n      }\n    };\n\n    EventsToActions.prototype.mouseUpDoc = function mouseUpDoc(e) {\n      if (this.picked) {\n        this.fireActions(this.picked.actions, e, {\n          state: 'end'\n        });\n        delete this.picked;\n      }\n    };\n\n    EventsToActions.prototype.mouseWheel = function mouseWheel(e) {\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e);\n        this.fireActions(this.getActions('mousewheel', 0, flags), e);\n      }\n    };\n\n    EventsToActions.prototype.clicks = function clicks(e, type) {\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e);\n        this.fireActions(this.getActions(type, e.button, flags), e);\n      }\n    };\n\n    EventsToActions.prototype.click = function click(e) {\n      this.clicks(e, 'click');\n    };\n\n    EventsToActions.prototype.dblclick = function dblclick(e) {\n      this.clicks(e, 'dblclick');\n    };\n\n    EventsToActions.prototype.touchPick = function touchPick(e, flags, touches) {\n      this.touchPicked = _extends({}, EventsToActions.getPosition(touches), {\n        actions: this.getActions('touchdrag', touches.length, flags),\n        code: touches.length,\n        flags: flags\n      });\n      this.fireActions(this.touchPicked.actions, e, {\n        state: 'start'\n      });\n    };\n\n    EventsToActions.prototype.touchStart = function touchStart(e) {\n      if (this.touchPicked) {\n        this.touchEnd(e);\n      }\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e),\n            touches = e.touches || e.originalEvent.touches;\n        this.fireActions(this.getActions('touchstart', touches.length, flags), e);\n        this.touchPick(e, flags, touches);\n      }\n    };\n\n    EventsToActions.prototype.touchMove = function touchMove(e) {\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e),\n            touches = e.touches || e.originalEvent.touches;\n        this.fireActions(this.getActions('touchmove', touches.length, flags), e);\n        if (this.touchPicked) {\n          if (this.touchPicked.code === touches.length && this.touchPicked.flags === flags) {\n            var pos = EventsToActions.getPosition(touches);\n            this.fireActions(this.touchPicked.actions, e, {\n              state: 'move',\n              dx: pos.x - this.touchPicked.x,\n              dy: pos.y - this.touchPicked.y\n            });\n            this.touchPicked = _extends({}, this.touchPicked, pos);\n          } else {\n            this.touchEnd(e);\n            this.touchPick(e, flags, touches);\n          }\n        }\n      }\n    };\n\n    EventsToActions.prototype.touchEnd = function touchEnd(e) {\n      if (this.touchPicked) {\n        this.fireActions(this.touchPicked.actions, e, {\n          state: 'end'\n        });\n        delete this.touchPicked;\n      }\n    };\n\n    EventsToActions.prototype.key = function key(e, type) {\n      if (this.enabled) {\n        var flags = EventsToActions.getEventFlags(e);\n        this.fireActions(this.getActions(type, e.keyCode, flags), e);\n      }\n    };\n\n    EventsToActions.prototype.keyDown = function keyDown(e) {\n      this.key(e, 'keydown');\n    };\n\n    EventsToActions.prototype.keyPress = function keyPress(e) {\n      this.key(e, 'keypress');\n    };\n\n    EventsToActions.prototype.keyUp = function keyUp(e) {\n      this.key(e, 'keyup');\n    };\n\n    EventsToActions.prototype.dispose = function dispose() {\n      this.element.off('contextmenu', this.binds.contextMenu);\n\n      this.element.off('mousedown', this.binds.mouseDown);\n      this.element.off('mousemove', this.binds.mouseMove);\n      this.element.off('mouseup', this.binds.mouseUp);\n      this.element.off('mousewheel', this.binds.mouseWheel);\n\n      (0, _libs.$)(this.doc).off('mousemove', this.binds.mouseMoveDoc);\n      (0, _libs.$)(this.doc).off('mouseup', this.binds.mouseUpDoc);\n\n      this.element.off('click', this.binds.click);\n      this.element.off('dblclick', this.binds.dblclick);\n\n      this.element.off('touchstart', this.binds.touchStart);\n      this.element.off('touchmove', this.binds.touchMove);\n      this.element.off('touchend', this.binds.touchEnd);\n\n      (0, _libs.$)(this.wnd).off('keydown', this.binds.keyDown);\n      (0, _libs.$)(this.wnd).off('keypress', this.binds.keyPress);\n      (0, _libs.$)(this.wnd).off('keyup', this.binds.keyUp);\n    };\n\n    return EventsToActions;\n  }();\n\n  EventsToActions.modKeys = {\n    Ctrl: 1,\n    Shift: 2,\n    Alt: 4\n  };\n  EventsToActions.mouseButtons = {\n    Left: 0,\n    Middle: 1,\n    Right: 2\n  };\n  exports.default = EventsToActions;\n\n  /***/\n},\n/* 50 */\n/***/function (module, exports) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var FullScreen = function () {\n    function FullScreen() {\n      _classCallCheck(this, FullScreen);\n    }\n\n    FullScreen.available = function available() {\n      return FullScreen._hasWebkitFullScreen || FullScreen._hasMozFullScreen || FullScreen._hasMsFullscreen;\n    };\n\n    FullScreen.activated = function activated() {\n      if (FullScreen._hasWebkitFullScreen) {\n        return document.webkitIsFullScreen;\n      } else if (FullScreen._hasMozFullScreen) {\n        return document.mozFullScreen;\n      } else if (FullScreen._hasMsFullscreen) {\n        return !!document.msFullscreenElement;\n      } else {\n        console.assert(false);\n      }\n    };\n\n    FullScreen.addEventListener = function addEventListener(element, handler) {\n      if (element.addEventListener) {\n        element.addEventListener('webkitfullscreenchange', handler, false);\n        element.addEventListener('mozfullscreenchange', handler, false);\n        element.addEventListener('fullscreenchange', handler, false);\n        element.addEventListener('MSFullscreenChange', handler, false);\n      }\n    };\n\n    FullScreen.removeEventListener = function removeEventListener(element, handler) {\n      if (element.removeEventListener) {\n        element.removeEventListener('webkitfullscreenchange', handler, false);\n        element.removeEventListener('mozfullscreenchange', handler, false);\n        element.removeEventListener('fullscreenchange', handler, false);\n        element.removeEventListener('MSFullscreenChange', handler, false);\n      }\n    };\n\n    FullScreen.request = function request(element) {\n      element = element || document.body;\n      if (FullScreen._hasWebkitFullScreen) {\n        element.webkitRequestFullScreen();\n      } else if (FullScreen._hasMozFullScreen) {\n        element.mozRequestFullScreen();\n      } else if (FullScreen._hasMsFullscreen) {\n        element.msRequestFullscreen();\n      } else {\n        console.assert(false);\n      }\n    };\n\n    FullScreen.cancel = function cancel() {\n      if (FullScreen._hasWebkitFullScreen) {\n        document.webkitCancelFullScreen();\n      } else if (FullScreen._hasMozFullScreen) {\n        document.mozCancelFullScreen();\n      } else if (FullScreen._hasMsFullscreen) {\n        document.msExitFullscreen();\n      } else {\n        console.assert(false);\n      }\n    };\n\n    return FullScreen;\n  }();\n\n  FullScreen._hasWebkitFullScreen = !!document.webkitCancelFullScreen;\n  FullScreen._hasMozFullScreen = !!document.mozCancelFullScreen;\n  FullScreen._hasMsFullscreen = !!document.documentElement.msRequestFullscreen;\n  exports.default = FullScreen;\n\n  /***/\n},\n/* 51 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _ImageBase2 = __webpack_require__(5);\n\n  var _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\n  var _BaseMathUtils = __webpack_require__(2);\n\n  var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\n  var _Dom2Image = __webpack_require__(47);\n\n  var _Dom2Image2 = _interopRequireDefault(_Dom2Image);\n\n  var _DocMouseSimulator = __webpack_require__(46);\n\n  var _DocMouseSimulator2 = _interopRequireDefault(_DocMouseSimulator);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var InteractiveImage = function (_ImageBase) {\n    _inherits(InteractiveImage, _ImageBase);\n\n    function InteractiveImage(context, width, height, color, src, cache, injector) {\n      _classCallCheck(this, InteractiveImage);\n\n      var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n      _this.iId = 'i' + _BaseMathUtils2.default.getUnique();\n      var jFrame = (0, _libs.$)('<iframe id=\"' + _this.iId + '\" src=\"' + src + '\" style=\"position: fixed; left: -1000px;\"></iframe>');\n      (0, _libs.$)(_this.doc.body).append(jFrame);\n      _this.frame = jFrame[0];\n\n      _this.binds = {};\n\n      if (injector) {\n        injector(_this.frame.contentWindow);\n      }\n\n      if (_this.doc.implementation.hasFeature('www.http://w3.org/TR/SVG11/feature#Extensibility', '1.1')) {\n        // svg foreignObject renderer\n        _this.image = new Image();\n        _this.binds.imageLoad = function () {\n          _this.renderImage(_this.image);\n          _this.finishRender();\n        };\n        (0, _libs.$)(_this.image).on('load', _this.binds.imageLoad);\n        _this.svgRender = new _Dom2Image2.default(_this.frame.contentWindow, _this.frame.contentDocument, cache);\n      } // otherwise - html2canvas\n\n      _this.binds.frameLoad = function () {\n        if (~_this.frame.contentDocument.title.indexOf('404')) {\n          _this.startRender = function () {\n            _this.renderNotFoundPage();\n            _this.finishRender();\n          };\n          _this.finishLoad();\n        } else {\n          setTimeout(function () {\n            if (_this.frame) {\n              _this.width = (0, _libs.$)(_this.frame.contentDocument.body).width();\n              _this.height = (0, _libs.$)(_this.frame.contentDocument.body).height();\n              jFrame.css('width', _this.width + 'px').css('height', _this.height + 'px');\n              jFrame.offset({ left: -_this.width - 100, top: 0 });\n              if (_this.svgRender) {\n                _this.simulator = new _DocMouseSimulator2.default(jFrame, _this.frame.contentDocument.body, _this.element);\n                _this.simulator.addDocChangeClb(_this.finishLoad.bind(_this));\n              }\n              _this.startRender = function () {\n                _this.render();\n              };\n              _this.finishLoad();\n            }\n          }, 500);\n        }\n      };\n      (0, _libs.$)(_this.frame.contentWindow).on('load', _this.binds.frameLoad);\n      return _this;\n    }\n\n    InteractiveImage.prototype.getSimulatedDoc = function getSimulatedDoc() {\n      return this.frame.contentDocument;\n    };\n\n    InteractiveImage.prototype.render = function render() {\n      var _this2 = this;\n\n      if (this.svgRender) {\n        this.svgRender.toSvg(this.simulator.element, { height: this.height + 'px', width: this.width + 'px' }).then(function (dataUrl) {\n          _this2.image.src = dataUrl;\n        }).catch(function (error) {\n          console.error('Dom2Image: ', error);\n          _this2.renderBlankPage();\n          _this2.finishRender();\n        });\n      } else {\n        (0, _libs.html2canvas)(this.frame.contentDocument.body, { timeout: 30000 }).then(function (canvas) {\n          _this2.renderImage(canvas);\n          _this2.finishRender();\n        });\n      }\n    };\n\n    InteractiveImage.prototype.dispose = function dispose() {\n      (0, _libs.$)(this.image).off('load', this.binds.imageLoad);\n      (0, _libs.$)(this.frame.contentWindow).off('load', this.binds.frameLoad);\n      (0, _libs.$)(this.doc.body).find('#' + this.iId).remove();\n      if (this.image) {\n        this.image.src = '';\n        delete this.image;\n      }\n      this.frame.src = '';\n      delete this.frame;\n      _ImageBase.prototype.dispose.call(this);\n    };\n\n    InteractiveImage.prototype.simulate = function simulate(e, doc, x, y) {\n      if (this.simulator) {\n        this.simulator.simulate(e, doc, x, y);\n      }\n    };\n\n    return InteractiveImage;\n  }(_ImageBase3.default);\n\n  exports.default = InteractiveImage;\n\n  /***/\n},\n/* 52 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _GraphUtils = __webpack_require__(7);\n\n  var _GraphUtils2 = _interopRequireDefault(_GraphUtils);\n\n  var _MathUtils = __webpack_require__(3);\n\n  var _MathUtils2 = _interopRequireDefault(_MathUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var LoadingAnimation = function () {\n    LoadingAnimation.prototype.dy = function dy(t, y) {\n      var w = y[0],\n          a = y[1];\n      return [-this.g * Math.cos(a), w];\n    };\n\n    LoadingAnimation.prototype.integrate = function integrate(T) {\n      var t = 0,\n          dt = this.p.dt,\n          os = this.os;\n      while (t < T) {\n        if (t + dt > T) {\n          dt = T - t;\n        }\n        os = _MathUtils2.default.rk4(this.dy.bind({ g: this.p.g }), 0, dt, os);\n        t += dt;\n      }\n      return os;\n    };\n\n    LoadingAnimation.prototype.calcTimeTo = function calcTimeTo(target) {\n      var t = 0,\n          dt = this.p.dt,\n          os = this.os;\n      while (Math.abs(os[1] - target) > 1e-4) {\n        var nos = _MathUtils2.default.rk4(this.dy.bind({ g: this.p.g }), 0, dt, os);\n        if (nos[0] < 0 && nos[1] < target || nos[0] > 0 && nos[1] > target) {\n          dt /= 2;\n        } else {\n          os = nos;\n          t += dt;\n        }\n      }\n      return t;\n    };\n\n    LoadingAnimation.prototype.update = function update(T) {\n      this.os = this.integrate(T);\n\n      this.t += T;\n      if (this.t >= this.p.updateInterval) {\n        this.t = 0;\n        var r = 0.06 * Math.min(this.c.width, this.c.height),\n            a = this.os[1],\n            x0 = 0.5 * this.c.width,\n            y0 = 0.5 * this.c.height,\n            ctx = this.ctx;\n\n        ctx.clearRect(0, 0, this.c.width, this.c.height);\n        ctx.beginPath();\n        ctx.fillStyle = _GraphUtils2.default.color2Rgba(this.p.color, 1);\n        ctx.rect(0, 0, this.c.width, this.c.height);\n        ctx.fill();\n\n        ctx.beginPath();\n        ctx.shadowBlur = 50;\n        ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 0.9), Math.abs(this.os[0] / 6.36));\n        ctx.shadowColor = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 1), 0.9);\n        ctx.shadowOffsetX = 0;\n        ctx.shadowOffsetY = 0;\n        ctx.font = 'bold ' + Math.round(0.25 * r) + 'px Arial';\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        ctx.fillText((0, _libs.tr)('Loading...'), x0, y0);\n\n        var ps = 10,\n            da = 2 * Math.PI / ps; //2.5*_r/r\n        ctx.shadowColor = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 1), 0.7);\n        for (var i = 0, _a = a, _r = 0.2 * r; i < ps; ++i, _r *= 0.9, _a += da) {\n          ctx.beginPath();\n          ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, (ps - i) / ps), 0.7 * (ps - i) / ps);\n          var cx = x0 + r * Math.cos(_a),\n              cy = y0 - r * Math.sin(_a),\n              nx = x0 + r * Math.cos(_a + da),\n              ny = y0 - r * Math.sin(_a + da);\n          ctx.shadowOffsetX = 0.2 * (nx - cx);\n          ctx.shadowOffsetY = 0.2 * (ny - cy);\n          ctx.arc(cx, cy, _r, 0, Math.PI * 2, 1);\n          ctx.fill();\n        }\n        if (this.onChange) {\n          this.onChange(this.c, this.p.color);\n        }\n      }\n    };\n\n    LoadingAnimation.prototype.getImage = function getImage() {\n      return this.c;\n    };\n\n    LoadingAnimation.prototype.dispose = function dispose() {\n      this.c.width = 0;\n      this.c.height = 0;\n      delete this.ctx;\n      delete this.c;\n    };\n\n    LoadingAnimation.prototype.createSprite = function createSprite(n) {\n      var c = (0, _libs.$)('<canvas width=\"' + this.c.width * n + '\" height=\"' + this.c.height + '\"></canvas>')[0],\n          ctx = c.getContext('2d'),\n          t = this.calcTimeTo(this.os[1] + Math.sign(this.os[0]) * 2 * Math.PI),\n          dt = t / (n + 1);\n      var updateInterval = this.p.updateInterval;\n\n      this.p.updateInterval = 0;\n      for (var i = 0; i < n; ++i) {\n        this.update(dt);\n        ctx.drawImage(this.c, i * this.c.width, 0);\n      }\n      this.p.updateInterval = updateInterval;\n      return c;\n    };\n\n    function LoadingAnimation(width, height, color) {\n      _classCallCheck(this, LoadingAnimation);\n\n      var jC = (0, _libs.$)('<canvas width=\"' + width + '\" height=\"' + height + '\"></canvas>');\n      this.c = jC[0];\n      this.p = {\n        g: 9.8,\n        dt: 1 / 60,\n        color: color,\n        updateInterval: 0.25\n      };\n      this.ctx = this.c.getContext('2d');\n      this.os = [-2, Math.PI / 2];\n      this.t = this.p.updateInterval;\n    }\n\n    return LoadingAnimation;\n  }();\n\n  exports.default = LoadingAnimation;\n\n  /***/\n},\n/* 53 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var LoadingController = function () {\n    function LoadingController(view) {\n      var showProgress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var loadingMsg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n      _classCallCheck(this, LoadingController);\n\n      this.view = view;\n      this.progress = 0;\n      this.showProgress = showProgress;\n      this.getLoadingMsg = loadingMsg || LoadingController.defaultLoadingMsg;\n      this.updateView();\n    }\n\n    LoadingController.defaultLoadingMsg = function defaultLoadingMsg(progress) {\n      return ['Please wait... the Application is Loading: ', progress, '%'].join('');\n    };\n\n    LoadingController.prototype.dispose = function dispose() {\n      this.showProgress = false;\n      this.updateView();\n      delete this.view;\n    };\n\n    LoadingController.prototype.setProgress = function setProgress(v) {\n      this.progress = v;\n      this.updateView();\n    };\n\n    LoadingController.prototype.updateView = function updateView() {\n      if (this.view) {\n\n        this.view.setState('widLoadingProgress', {\n          enable: true,\n          visible: this.showProgress,\n          active: false\n        });\n\n        this.view.setState('txtLoadingProgress', {\n          value: this.getLoadingMsg(this.progress),\n          visible: true\n        });\n\n        for (var _iterator = this.view.getLinks(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var name = _ref;\n\n          this.view.setState(name, {\n            enable: false,\n            visible: true,\n            active: false\n          });\n        }\n\n        this.view.setState('inpPages', {\n          visible: true,\n          value: ''\n        });\n\n        this.view.setState('inpPage', {\n          visible: true,\n          enable: false,\n          value: ''\n        });\n      }\n    };\n\n    return LoadingController;\n  }();\n\n  exports.default = LoadingController;\n\n  /***/\n},\n/* 54 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _EventConverter2 = __webpack_require__(6);\n\n  var _EventConverter3 = _interopRequireDefault(_EventConverter2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var MouseEventConverter = function (_EventConverter) {\n    _inherits(MouseEventConverter, _EventConverter);\n\n    function MouseEventConverter(wnd, doc, element) {\n      _classCallCheck(this, MouseEventConverter);\n\n      var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));\n\n      _this.element = element;\n      _this.binds = {\n        convert: _this.convert.bind(_this)\n      };\n      (0, _libs.$)(_this.element).on('mousemove mousedown mouseover mouseout click', _this.binds.convert);\n      (0, _libs.$)(_this.doc).on('mouseup', _this.binds.convert);\n      return _this;\n    }\n\n    MouseEventConverter.prototype.dispose = function dispose() {\n      (0, _libs.$)(this.element).off('mousemove mousedown mouseover mouseout click', this.binds.convert);\n      (0, _libs.$)(this.doc).off('mouseup', this.binds.convert);\n    };\n\n    return MouseEventConverter;\n  }(_EventConverter3.default);\n\n  exports.default = MouseEventConverter;\n\n  /***/\n},\n/* 55 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(0);\n\n  var _MathUtils = __webpack_require__(3);\n\n  var _MathUtils2 = _interopRequireDefault(_MathUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Object3DWatcher = function () {\n    function Object3DWatcher(visual, boundBoxClb) {\n      var testScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.testScale;\n\n      _classCallCheck(this, Object3DWatcher);\n\n      this.visual = visual;\n      this.boundBoxClb = boundBoxClb;\n      this.testScale = testScale;\n      this.camera = visual.camera;\n      this.element = this.visual.element;\n      this.elementSize = { w: 1, h: 1 };\n      this.devicePixelRatio = this.visual.wnd.devicePixelRatio || 1;\n      this.orbit = visual.getOrbit();\n      this.scale = 1;\n\n      this.eps = 1e-4;\n      this.v = new _libs.THREE.Vector3();\n      this.dv = new _libs.THREE.Vector2();\n\n      this.enabled = false;\n\n      visual.addRenderCallback(this.update.bind(this));\n\n      this.os = {\n        vx: 0,\n        vy: 0,\n        x: 0,\n        y: 0\n      };\n      this.orbit.update();\n      this.camera.updateMatrixWorld();\n      var box = this.computeClientBoundBox(),\n          k = 1.11;\n      this.movePan({ x: -k * box.mid.x, y: -k * box.mid.y });\n    }\n\n    Object3DWatcher.prototype.movePan = function movePan(dv) {\n      this.orbit.pan(dv.x * this.visual.width(), -dv.y * this.visual.height());\n    };\n\n    Object3DWatcher.prototype.vToCamera = function vToCamera(v) {\n      v.project(this.camera);\n      return {\n        x: 0.5 * v.x,\n        y: 0.5 * v.y\n      };\n    };\n\n    Object3DWatcher.prototype.computeClientBoundBox = function computeClientBoundBox() {\n      var box = this.boundBoxClb(),\n          xs = [box.min.x, box.max.x],\n          ys = [0, 0],\n          zs = [box.min.z, box.max.z];\n\n      var ps = [],\n          res = { max: {}, min: {} };\n      for (var _iterator = xs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var x = _ref;\n\n        for (var _iterator2 = ys, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n          var _ref2;\n\n          if (_isArray2) {\n            if (_i2 >= _iterator2.length) break;\n            _ref2 = _iterator2[_i2++];\n          } else {\n            _i2 = _iterator2.next();\n            if (_i2.done) break;\n            _ref2 = _i2.value;\n          }\n\n          var y = _ref2;\n\n          for (var _iterator3 = zs, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n            var _ref3;\n\n            if (_isArray3) {\n              if (_i3 >= _iterator3.length) break;\n              _ref3 = _iterator3[_i3++];\n            } else {\n              _i3 = _iterator3.next();\n              if (_i3.done) break;\n              _ref3 = _i3.value;\n            }\n\n            var z = _ref3;\n\n            ps.push(this.vToCamera(this.v.set(x, y, z)));\n          }\n        }\n      }\n\n      ps.sort(function (p1, p2) {\n        return p1.x - p2.x;\n      });\n      res.min.x = ps[0].x;\n      res.max.x = ps[ps.length - 1].x;\n      ps.sort(function (p1, p2) {\n        return p1.y - p2.y;\n      });\n      res.min.y = ps[0].y;\n      res.max.y = ps[ps.length - 1].y;\n\n      res.width = res.max.x - res.min.x;\n      res.height = res.max.y - res.min.y;\n\n      res.mid = {\n        x: 0.5 * (res.max.x + res.min.x),\n        y: 0.5 * (res.max.y + res.min.y)\n      };\n\n      return res;\n    };\n\n    Object3DWatcher.prototype.setObject = function setObject(boundBoxClb) {\n      this.boundBoxClb = boundBoxClb;\n    };\n\n    Object3DWatcher.prototype.testScale = function testScale() {\n      return true;\n    };\n\n    Object3DWatcher.prototype.computeCorr = function computeCorr(K, min, max) {\n      var corr = 0;\n      if (K < 1) {\n        if (min > -0.5) {\n          corr = -0.5 - min;\n        } else if (max < 0.5) {\n          corr = 0.5 - max;\n        }\n      } else {\n        if (min < -0.5) {\n          corr = -0.5 - min;\n        } else if (max > 0.5) {\n          corr = 0.5 - max;\n        }\n      }\n      return corr;\n    };\n\n    Object3DWatcher.prototype.getScale = function getScale() {\n      var box = this.computeClientBoundBox(),\n          Kx = this.elementSize.w / box.width,\n          Ky = this.elementSize.h / box.height;\n      return 1 / Math.min(Kx, Ky);\n    };\n\n    Object3DWatcher.prototype.centerView = function centerView(T) {\n      var _this = this;\n\n      var box = this.computeClientBoundBox(),\n          Kx = this.elementSize.w / box.width,\n          Ky = this.elementSize.h / box.height,\n          K = Math.min(Kx, Ky);\n\n      if (this.testScale() && Math.abs(1 / K - this.scale) > this.eps) {\n        var scale = 1 / K + 0.2 * (this.scale - 1 / K);\n        this.orbit.setScale(this.orbit.getScale() / (K * scale));\n        this.orbit.update();\n        this.camera.updateMatrixWorld();\n        box = this.computeClientBoundBox();\n        Kx = this.elementSize.w / box.width;\n        Ky = this.elementSize.h / box.height;\n        K = Math.min(Kx, Ky);\n      }\n\n      var dv = this.dv;\n      if (K > 1 - this.eps) {\n        dv.set(-box.mid.x, -box.mid.y);\n      } else {\n        dv.set(this.computeCorr(Kx, box.min.x, box.max.x), this.computeCorr(Ky, box.min.y, box.max.y));\n      }\n\n      if (Math.sqrt(this.os.vx * this.os.vx + this.os.vy * this.os.vy) > 0.003 || dv.length() > 0.003) {\n        var dt = 1 / 60,\n            t = 0,\n            os = _extends({}, this.os, {\n          x: 0,\n          y: 0\n        });\n        os.tf = function (vx, vy, x, y) {\n          return {\n            x: 75 * (dv.x - x) / Math.pow(_this.devicePixelRatio, 1.0),\n            y: 75 * (dv.y - y) / Math.pow(_this.devicePixelRatio, 1.0)\n          };\n        };\n        while (t < T) {\n          if (t + dt > T) {\n            dt = T - t;\n          }\n          os = this.integrate(os, dt);\n          t += dt;\n        }\n        this.movePan(os);\n        this.os = os;\n      }\n    };\n\n    Object3DWatcher.prototype.integrate = function integrate(os, dt) {\n      var _MathUtils$rk = _MathUtils2.default.rk4(this.dy.bind(os), 0, dt, [os.vx, os.vy, os.x, os.y]),\n          vx = _MathUtils$rk[0],\n          vy = _MathUtils$rk[1],\n          x = _MathUtils$rk[2],\n          y = _MathUtils$rk[3];\n\n      return _extends({}, os, {\n        vx: vx, vy: vy, x: x, y: y\n      });\n    };\n\n    Object3DWatcher.prototype.dy = function dy(t, Y) {\n      var vx = Y[0],\n          vy = Y[1],\n          x = Y[2],\n          y = Y[3],\n          vd = 15,\n          tf = this.tf(vx, vy, x, y);\n\n      return [tf.x - vd * vx, tf.y - vd * vy, vx, vy];\n    };\n\n    Object3DWatcher.prototype.update = function update(dt) {\n      if (this.enabled && this.boundBoxClb) {\n        this.centerView(dt);\n      }\n    };\n\n    return Object3DWatcher;\n  }();\n\n  exports.default = Object3DWatcher;\n\n  /***/\n},\n/* 56 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var Orbit = function (_THREE$EventDispatche) {\n    _inherits(Orbit, _THREE$EventDispatche);\n\n    function Orbit(object, domElement) {\n      _classCallCheck(this, Orbit);\n\n      var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));\n\n      _this.object = object;\n      _this.domElement = domElement || document.body;\n\n      // Set to false to disable this control\n      _this.enabled = true;\n\n      // \"target\" sets the location of focus, where the object orbits around\n      _this.target = new _libs.THREE.Vector3();\n\n      // How far you can dolly in and out(PerspectiveCamera only)\n      _this.minDistance = 0;\n      _this.maxDistance = Infinity;\n\n      // How far you can zoom in and out(OrthographicCamera only)\n      _this.minZoom = 0;\n      _this.maxZoom = Infinity;\n\n      // How far you can orbit vertically, upper and lower limits.\n      // Range is 0 to Math.PI radians.\n      _this.minPolarAngle = 0; // radians\n      _this.maxPolarAngle = Math.PI; // radians\n\n      // How far you can orbit horizontally, upper and lower limits.\n      // If set, must be a sub-interval of the interval [-Math.PI, Math.PI ].\n      _this.minAzimuthAngle = -Infinity; // radians\n      _this.maxAzimuthAngle = Infinity; // radians\n\n      // Set to true to enable damping (inertia)\n      // If damping is enabled, you must call controls.update() in your animation loop\n      _this.enableDamping = false;\n      _this.dampingFactor = 0.25;\n\n      // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n      // Set to false to disable zooming\n      _this.enableZoom = true;\n      _this.zoomSpeed = 1.0;\n\n      // Set to false to disable rotating\n      _this.enableRotate = true;\n      _this.rotateSpeed = 1.0;\n\n      // Set to false to disable panning\n      _this.enablePan = true;\n\n      // Set to true to automatically rotate around the target\n      // If auto-rotate is enabled, you must call controls.update() in your animation loop\n      _this.autoRotate = false;\n      _this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n      // for reset\n      _this.target0 = _this.target.clone();\n      _this.position0 = _this.object.position.clone();\n      _this.zoom0 = _this.object.zoom;\n\n      //\n      // public methods\n      //\n      _this.getPolarAngle = function () {\n        return spherical.phi;\n      };\n\n      _this.getAzimuthalAngle = function () {\n        return spherical.theta;\n      };\n\n      _this.reset = function () {\n        scope.target.copy(scope.target0);\n        scope.object.position.copy(scope.position0);\n        scope.object.zoom = scope.zoom0;\n\n        scope.object.updateProjectionMatrix();\n        scope.dispatchEvent(changeEvent);\n\n        scope.update();\n      };\n\n      _this.zoomOut = function () {\n        var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.zoomSpeed;\n\n        var _speed = this.zoomSpeed;\n        this.zoomSpeed = speed;\n        dollyIn(getZoomScale());\n        this.zoomSpeed = _speed;\n      };\n\n      _this.zoomIn = function () {\n        var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.zoomSpeed;\n\n        var _speed = this.zoomSpeed;\n        this.zoomSpeed = speed;\n        dollyOut(getZoomScale());\n        this.zoomSpeed = _speed;\n      };\n\n      _this.getScale = function () {\n        return scale;\n      };\n\n      _this.setScale = function (newScale) {\n        scale = newScale;\n      };\n\n      // this method is exposed, but perhaps it would be better if we can make it private...\n      _this.update = function () {\n        var offset = new _libs.THREE.Vector3();\n        // so camera.up is the orbit axis\n        var quat = new _libs.THREE.Quaternion().setFromUnitVectors(object.up, new _libs.THREE.Vector3(0, 1, 0));\n        var quatInverse = quat.clone().inverse();\n        var lastPosition = new _libs.THREE.Vector3();\n        var lastQuaternion = new _libs.THREE.Quaternion();\n\n        return function update() {\n          var position = scope.object.position;\n          offset.copy(position).sub(scope.target);\n          // rotate offset to \"y-axis-is-up\" space\n          offset.applyQuaternion(quat);\n          // angle from z-axis around y-axis\n          spherical.setFromVector3(offset);\n          if (scope.autoRotate) {\n            rotateLeft(getAutoRotationAngle());\n          }\n          spherical.theta += sphericalDelta.theta;\n          spherical.phi += sphericalDelta.phi;\n          // restrict theta to be between desired limits\n          spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n          // restrict phi to be between desired limits\n          spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n          spherical.makeSafe();\n          spherical.radius *= scale;\n          // restrict radius to be between desired limits\n          spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n          // move target to panned location\n          scope.target.add(panOffset);\n          offset.setFromSpherical(spherical);\n          // rotate offset back to \"camera-up-vector-is-up\" space\n          offset.applyQuaternion(quatInverse);\n          position.copy(scope.target).add(offset);\n          scope.object.lookAt(scope.target);\n\n          if (scope.enableDamping === true) {\n            sphericalDelta.theta *= 1 - scope.dampingFactor;\n            sphericalDelta.phi *= 1 - scope.dampingFactor;\n          } else {\n            sphericalDelta.set(0, 0, 0);\n          }\n\n          scale = 1;\n          panOffset.set(0, 0, 0);\n\n          // update condition is:\n          // min(camera displacement, camera rotation in radians)^2 > EPS\n          // using small-angle approximation cos(x/2) = 1-x^2 / 8\n\n          if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\n            scope.dispatchEvent(changeEvent);\n\n            lastPosition.copy(scope.object.position);\n            lastQuaternion.copy(scope.object.quaternion);\n            zoomChanged = false;\n\n            return true;\n          }\n          return false;\n        };\n      }();\n\n      _this.dispose = function () {};\n\n      //\n      // internals\n      //\n      var scope = _this;\n      var changeEvent = { type: 'change' };\n      var EPS = 1e-6;\n      // current position in spherical coordinates\n      var spherical = new _libs.THREE.Spherical();\n      var sphericalDelta = new _libs.THREE.Spherical();\n\n      var scale = 1;\n      var panOffset = new _libs.THREE.Vector3();\n      var zoomChanged = false;\n\n      function getAutoRotationAngle() {\n        return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n      }\n\n      function getZoomScale() {\n        return Math.pow(0.95, scope.zoomSpeed);\n      }\n\n      function rotateLeft(angle) {\n        sphericalDelta.theta -= angle;\n      }\n\n      function rotateUp(angle) {\n        sphericalDelta.phi -= angle;\n      }\n\n      var panLeft = function () {\n        var v = new _libs.THREE.Vector3();\n        return function panLeft(distance, objectMatrix) {\n          v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n          v.multiplyScalar(-distance);\n          panOffset.add(v);\n        };\n      }();\n\n      var panUp = function () {\n        var v = new _libs.THREE.Vector3();\n        return function panUp(distance, objectMatrix) {\n          v.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n          v.multiplyScalar(distance);\n          panOffset.add(v);\n        };\n      }();\n\n      // deltaX and deltaY are in pixels; right and down are positive\n      scope.pan = function () {\n        var offset = new _libs.THREE.Vector3();\n        return function pan(deltaX, deltaY) {\n          var element = scope.domElement;\n          if (scope.object instanceof _libs.THREE.PerspectiveCamera) {\n            // perspective\n            var position = scope.object.position;\n            offset.copy(position).sub(scope.target);\n            var targetDistance = offset.length();\n            // half of the fov is center to top of screen\n            targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0);\n            // we actually don't use screenWidth, since perspective camera is fixed to screen height\n            panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n            panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n          } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {\n            // orthographic\n            panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n            panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n          } else {\n            // camera neither orthographic nor perspective\n            console.warn('WARNING: OrbitControls.js encountered an unknown camera type-pan disabled.');\n            scope.enablePan = false;\n          }\n        };\n      }();\n\n      function dollyIn(dollyScale) {\n        if (scope.object instanceof _libs.THREE.PerspectiveCamera) {\n          scale /= dollyScale;\n        } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {\n          scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n          scope.object.updateProjectionMatrix();\n          zoomChanged = true;\n        } else {\n          console.warn('WARNING: OrbitControls.js encountered an unknown camera type-dolly/zoom disabled.');\n          scope.enableZoom = false;\n        }\n      }\n\n      function dollyOut(dollyScale) {\n        if (scope.object instanceof _libs.THREE.PerspectiveCamera) {\n          scale *= dollyScale;\n        } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {\n          scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n          scope.object.updateProjectionMatrix();\n          zoomChanged = true;\n        } else {\n          console.warn('WARNING: OrbitControls.js encountered an unknown camera type-dolly/zoom disabled.');\n          scope.enableZoom = false;\n        }\n      }\n\n      /* Actions */\n\n      function rotate(event, data) {\n        if (scope.enabled && scope.enableRotate && data.state === 'move') {\n          var element = scope.domElement;\n          // rotating across whole screen goes 360 degrees around\n          rotateLeft(2 * Math.PI * data.dx / element.clientWidth * scope.rotateSpeed);\n          // rotating up and down along whole screen attempts to go 360, but limited to 180\n          rotateUp(2 * Math.PI * data.dy / element.clientHeight * scope.rotateSpeed);\n          scope.update();\n        }\n      }\n\n      function pan(event, data) {\n        if (scope.enabled && scope.enablePan && data.state === 'move') {\n          scope.pan(data.dx, data.dy);\n          scope.update();\n        }\n      }\n\n      function offsetDolly(event, data) {\n        if (scope.enabled && scope.enableZoom && data.state === 'move') {\n          if (data.dy > 0) {\n            dollyIn(getZoomScale());\n          } else if (data.dy < 0) {\n            dollyOut(getZoomScale());\n          }\n          scope.update();\n        }\n      }\n\n      function wheelDolly(event) {\n        if (scope.enabled && scope.enableZoom) {\n          if (event.deltaY > 0) {\n            dollyOut(getZoomScale());\n          } else if (event.deltaY < 0) {\n            dollyIn(getZoomScale());\n          }\n          scope.update();\n        }\n      }\n\n      _this.actions = {\n        rotate: rotate,\n        pan: pan,\n        offsetDolly: offsetDolly,\n        wheelDolly: wheelDolly\n      };\n\n      // force an update at start\n      _this.update();\n      return _this;\n    }\n\n    return Orbit;\n  }(_libs.THREE.EventDispatcher);\n\n  exports.default = Orbit;\n\n  /***/\n},\n/* 57 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _ImageBase2 = __webpack_require__(5);\n\n  var _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\n  var _Pdf = __webpack_require__(18);\n\n  var _Pdf2 = _interopRequireDefault(_Pdf);\n\n  var _BaseMathUtils = __webpack_require__(2);\n\n  var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\n  var _CustomEventConverter = __webpack_require__(16);\n\n  var _CustomEventConverter2 = _interopRequireDefault(_CustomEventConverter);\n\n  var _PolyTarget = __webpack_require__(69);\n\n  var _PolyTarget2 = _interopRequireDefault(_PolyTarget);\n\n  var _Finder = __webpack_require__(17);\n\n  var _Finder2 = _interopRequireDefault(_Finder);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var PdfImage = function (_ImageBase) {\n    _inherits(PdfImage, _ImageBase);\n\n    function PdfImage(context, width, height, color, pdf, n) {\n      _classCallCheck(this, PdfImage);\n\n      var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n      _this.query = '';\n      _this.n = n;\n      _this.pdf = pdf;\n      _this.v = { x: 0, y: 0, z: 0, set: function set(x, y, z) {\n          this.x = x;this.y = y;this.z = z;\n          return this;\n        }, transform: function transform(m) {\n          var x = m.m[0][0] * this.x + m.m[1][0] * this.y + m.m[2][0] * this.z,\n              y = m.m[0][1] * this.x + m.m[1][1] * this.y + m.m[2][1] * this.z,\n              z = m.m[0][2] * this.x + m.m[0][2] * this.y + m.m[2][0] * this.z;\n          this.x = x;\n          this.y = y;\n          this.z = z;\n          return this;\n        } };\n      _this.m = { m: [[1, 0, 0], [0, 1, 0], [0, 0, 1]], set: function set(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n          this.m = [[m00, m01, m02], [m10, m11, m12], [m20, m21, m22]];\n          return this;\n        } };\n\n      _this.startRender = function () {\n        _this.pdf.getHandler(_this.render.bind(_this));\n      };\n      Promise.resolve().then(function () {\n        return _this.pdf.getHandler(_this.init.bind(_this));\n      });\n      return _this;\n    }\n\n    PdfImage.prototype.setQuery = function setQuery(query) {\n      this.query = query.trim();\n      if (this.textContent) {\n        this.setHits(this.textContent);\n        // this.finishLoad();\n      }\n    };\n\n    PdfImage.prototype.rectSize = function rectSize(r) {\n      return {\n        width: r[2] - r[0],\n        height: r[3] - r[1]\n      };\n    };\n\n    PdfImage.prototype.createPoly = function createPoly(m, p, s) {\n      var poly = [],\n          v = this.v;\n      v.set(p.x, p.y, 1).transform(m);\n      poly.push({ x: v.x, y: v.y });\n      v.set(p.x, p.y + s.height, 1).transform(m);\n      poly.push({ x: v.x, y: v.y });\n      v.set(p.x + s.width, p.y + s.height, 1).transform(m);\n      poly.push({ x: v.x, y: v.y });\n      v.set(p.x + s.width, p.y, 1).transform(m);\n      poly.push({ x: v.x, y: v.y });\n      return poly;\n    };\n\n    PdfImage.prototype.getSimulatedDoc = function getSimulatedDoc() {\n      return this.page;\n    };\n\n    PdfImage.prototype.simulate = function simulate(e, doc, x, y) {\n      if (this.eventConverter) {\n        this.eventConverter.convert(e, { doc: doc, x: x, y: y });\n      }\n    };\n\n    PdfImage.prototype.setAnnotations = function setAnnotations(annos) {\n      var _this2 = this;\n\n      var t = this.viewport.transform,\n          targets = [];\n      this.m.set(t[0], t[1], 0, t[2], t[3], 0, t[4], t[5], 1);\n\n      for (var _iterator = annos, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var anno = _ref;\n\n        if (anno.subtype === 'Link') {\n          var rect = anno.rect,\n              aPos = {\n            x: rect[0],\n            y: rect[1]\n          },\n              aSz = this.rectSize(rect);\n          var _target = new _PolyTarget2.default(this.createPoly(this.m, aPos, aSz).map(function (p) {\n            return { x: p.x / _this2.viewport.width, y: 1 - p.y / _this2.viewport.height };\n          }));\n          _target.anno = anno;\n          _target.callback = this.annoClb.bind(this);\n          targets.push(_target);\n        }\n      }\n      if (targets.length) {\n        this.eventConverter = new _CustomEventConverter2.default(this.wnd, this.doc, _PolyTarget2.default.test, this.page);\n        for (var _iterator2 = targets, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n          var _ref2;\n\n          if (_isArray2) {\n            if (_i2 >= _iterator2.length) break;\n            _ref2 = _iterator2[_i2++];\n          } else {\n            _i2 = _iterator2.next();\n            if (_i2.done) break;\n            _ref2 = _i2.value;\n          }\n\n          var target = _ref2;\n\n          this.eventConverter.addCustom(target);\n        }\n      }\n    };\n\n    PdfImage.prototype.setHits = function setHits(textContent) {\n      this.textContent = textContent;\n      if (this.query !== '') {\n        this.finder = new _Finder2.default(textContent.items.map(function (item) {\n          return item.str;\n        }), this.query, { contexts: false });\n      }\n    };\n\n    PdfImage.prototype.renderHits = function renderHits() {\n      var _this3 = this;\n\n      if (this.finder) {\n        var view = this.page.view,\n            testSz = (0, _libs.$)('<div style=\"position: absolute; visibility: hidden;\"></div>').appendTo('body'),\n            textDiv = testSz[0],\n            baseOffset = testSz.offset().left;\n        for (var _iterator3 = this.finder.getHits(), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n          var _ref3;\n\n          if (_isArray3) {\n            if (_i3 >= _iterator3.length) break;\n            _ref3 = _iterator3[_i3++];\n          } else {\n            _i3 = _iterator3.next();\n            if (_i3.done) break;\n            _ref3 = _i3.value;\n          }\n\n          var hit = _ref3;\n\n          var item = this.textContent.items[hit.index],\n              t = PDFJS.Util.transform(this.viewport.transform, item.transform),\n              style = this.textContent.styles[item.fontName],\n              angle = Math.atan2(t[1], t[0]) + (style.vertical ? Math.PI / 2 : 0),\n              fontHeight = Math.sqrt(t[2] * t[2] + t[3] * t[3]),\n              fontAscent = style.ascent ? style.ascent * fontHeight : style.descent ? (1 + style.descent) * fontHeight : fontHeight;\n          testSz.html(item.str.substr(0, hit.offset) + '<span>' + item.str.substr(hit.offset, hit.length) + '</span>' + item.str.substr(hit.offset + hit.length));\n\n          textDiv.style.fontSize = fontHeight + 'px';\n          textDiv.style.fontFamily = style.fontFamily;\n\n          var testSpan = testSz.find('span'),\n              iwidth = style.vertical ? item.height * this.viewport.scale : item.width * this.viewport.scale,\n              width = testSz.width(),\n              relativeOffset = (testSpan.offset().left - baseOffset) / width;\n          this.m.set(1, 0, 0, 0, 1, 0, t[4] + fontAscent * Math.sin(angle), t[5] - fontAscent * Math.cos(angle), 1);\n          var poly = this.createPoly(this.m, { x: relativeOffset * iwidth, y: 0 }, { width: iwidth * testSpan.width() / width, height: testSpan.height() });\n          poly = poly.map(function (p) {\n            return { x: p.x / _this3.viewport.width, y: 1 - p.y / _this3.viewport.height };\n          });\n          this.renderHit(poly);\n        }\n        testSz.remove();\n      }\n    };\n\n    PdfImage.prototype.annoClb = function annoClb(e, data) {\n      if (this.context.dispatchEvent) {\n        this.context.dispatchEvent({\n          type: 'pdfAnnotation',\n          event: e,\n          annotation: data.target.anno\n        });\n      }\n    };\n\n    PdfImage.prototype.calcViewport = function calcViewport() {\n      var scale = _BaseMathUtils2.default.calcScale(this.size.width, this.size.height, this.resW, this.resH);\n      if (!this.viewport || Math.abs(this.viewport.scale - scale) > 1e-4) {\n        this.viewport = this.page.getViewport(scale);\n        if (this.type !== 'full') {\n          if (this.type === 'right') {\n            this.viewport.offsetX += 0.5 * this.viewport.width;\n            this.viewport.transform[4] -= 0.5 * this.viewport.width;\n          }\n          this.viewport.width /= 2;\n        }\n        this.resW = this.width = this.viewport.width;\n        this.resH = this.height = this.viewport.height;\n      }\n    };\n\n    PdfImage.prototype.init = function init() {\n      var _this4 = this;\n\n      this.type = this.pdf.getPageType(this.n);\n      this.pdf.getPage(this.n).then(function (page) {\n        _this4.page = page;\n        _this4.size = _Pdf2.default.getPageSize(page);\n        if (_this4.type !== 'full') {\n          _this4.size.width /= 2;\n        }\n        page.getAnnotations().then(_this4.setAnnotations.bind(_this4));\n        page.getTextContent().then(_this4.setHits.bind(_this4));\n        _this4.calcViewport();\n        _this4.finishLoad();\n      }).catch(function (e) {\n        console.error('Cannot load PDF page: ' + (_this4.n + 1));\n        _this4.finishLoad();\n      });\n    };\n\n    PdfImage.prototype.setResolution = function setResolution(res) {\n      _ImageBase.prototype.setResolution.call(this, res);\n      if (this.page) {\n        this.calcViewport();\n      }\n    };\n\n    PdfImage.prototype.render = function render(handler) {\n      var _this5 = this;\n\n      if (this.page) {\n        this.page.render({\n          canvasContext: this.pushCtx(),\n          viewport: this.viewport\n        }).then(function () {\n          _this5.renderHits();\n          _this5.popCtx();\n          _this5.finishRender();\n        });\n      } else {\n        this.renderBlankPage();\n        this.finishRender();\n      }\n    };\n\n    return PdfImage;\n  }(_ImageBase3.default);\n\n  exports.default = PdfImage;\n\n  /***/\n},\n/* 58 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Search = function () {\n    function Search(container, pages) {\n      _classCallCheck(this, Search);\n\n      this.container = container;\n      this.pages = pages;\n      this.prevResults = [];\n      container.html('\\n      <div class=\"search\">\\n        <div class=\"query\">\\n          <input class=\"inpQuery\" type=\"text\" maxlength=\"30\" value=\"\" />\\n        </div>\\n        <div class=\"results\">\\n        </div>\\n        <div class=\"status\">\\n\\n        </div>\\n      </div>\\n    ');\n      this.query = container.find('.query input');\n      this.results = container.find('.results');\n      this.status = container.find('.status');\n\n      this.binds = {\n        navigate: this.navigate.bind(this),\n        doQuery: this.doQuery.bind(this)\n      };\n\n      this.query.on('keydown', this.binds.doQuery);\n      this.results.on('click', this.binds.navigate);\n    }\n\n    Search.prototype.dispose = function dispose() {\n      this.results.off('click', this.binds.navigate);\n      this.query.off('keydown', this.binds.doQuery);\n    };\n\n    Search.prototype.navigate = function navigate(e) {\n      e.preventDefault();\n      if (this.onNavigate !== undefined) {\n        var target = (0, _libs.$)(e.target);\n        if (!target.hasClass('result')) {\n          var t = target.find('.result');\n          if (t.length) {\n            target = t;\n          } else {\n            while (target.length && !target.hasClass('result')) {\n              target = (0, _libs.$)(target[0].parentNode);\n            }\n          }\n        }\n        var page = target.attr('data');\n        if (page !== undefined) {\n          this.onNavigate(parseInt(page));\n        }\n      }\n    };\n\n    Search.prototype.doQuery = function doQuery() {\n      var _this = this;\n\n      if (this.onQuery) {\n        var queryStamp = this.queryStamp = Date.now();\n        setTimeout(function () {\n          if (queryStamp === _this.queryStamp) {\n            _this.onQuery(_this.query[0].value.trim());\n          }\n        }, 1000);\n      }\n    };\n\n    Search.prototype.setResults = function setResults(results, lastPage) {\n      if (this.prevResults.length && results[0] !== this.prevResults[0]) {\n        this.prevResults = [];\n        this.results.html('');\n      }\n      var htmls = [];\n      for (var i = this.prevResults.length; i < results.length; ++i) {\n        var result = results[i];\n        htmls.push('<div class=\"result\" data=\"' + result.page + '\">');\n        htmls.push('<a href=\"#\">');\n        htmls.push('<div>' + result.contexts.join('</div><div>') + '</div>');\n        htmls.push('</a>');\n        htmls.push('</div>');\n      }\n      (0, _libs.$)(htmls.join('')).appendTo(this.results);\n      this.prevResults = [].concat(results);\n      if (lastPage === undefined) {\n        this.status.html('');\n      } else {\n        this.status.html(lastPage + ' of ' + this.pages);\n      }\n    };\n\n    return Search;\n  }();\n\n  exports.default = Search;\n\n  /***/\n},\n/* 59 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _ImageBase2 = __webpack_require__(5);\n\n  var _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\n  var _Utils = __webpack_require__(4);\n\n  var _Utils2 = _interopRequireDefault(_Utils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var StaticImage = function (_ImageBase) {\n    _inherits(StaticImage, _ImageBase);\n\n    function StaticImage(context, width, height, color, src) {\n      _classCallCheck(this, StaticImage);\n\n      var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n      _this.binds = {};\n      _this.image = new Image();\n      _this.image.crossOrigin = 'Anonymous';\n      _this.binds.imageLoad = function () {\n        _this.width = _this.image.width;\n        _this.height = _this.image.height;\n        _this.startRender = function () {\n          _this.renderImage(_this.image);\n          _this.finishRender();\n        };\n        _this.finishLoad();\n      };\n      _this.binds.imageError = function () {\n        _this.startRender = function () {\n          _this.renderNotFoundPage();\n          _this.finishRender();\n        };\n        _this.finishLoad();\n      };\n      (0, _libs.$)(_this.image).on('load', _this.binds.imageLoad).on('error', _this.binds.imageError);\n      _this.image.src = _Utils2.default.normalizeUrl(src);\n      return _this;\n    }\n\n    StaticImage.prototype.dispose = function dispose() {\n      (0, _libs.$)(this.image).off('load', this.binds.imageLoad).off('error', this.binds.imageError);\n      this.image.src = '';\n      delete this.image;\n      _ImageBase.prototype.dispose.call(this);\n    };\n\n    return StaticImage;\n  }(_ImageBase3.default);\n\n  exports.default = StaticImage;\n\n  /***/\n},\n/* 60 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var TextureAnimator = function () {\n    function TextureAnimator(img, tilesHoriz, tilesVert, numTiles, tileDispDuration) {\n      _classCallCheck(this, TextureAnimator);\n\n      var texture = new _libs.THREE.Texture();\n      texture.minFilter = _libs.THREE.LinearFilter;\n      texture.image = img;\n      texture.needsUpdate = true;\n\n      // note: texture passed by reference, will be updated by the update function.\n      this.texture = texture;\n      this.tilesHorizontal = tilesHoriz;\n      this.tilesVertical = tilesVert;\n      // how many images does this spritesheet contain?\n      //  usually equals tilesHoriz * tilesVert, but not necessarily,\n      //  if there at blank tiles at the bottom of the spritesheet.\n      this.numberOfTiles = numTiles;\n      texture.repeat.set(1 / this.tilesHorizontal, 1 / this.tilesVertical);\n\n      // how long should each image be displayed?\n      this.tileDisplayDuration = tileDispDuration;\n\n      // how long has the current image been displayed?\n      this.currentDisplayTime = 0;\n\n      // which image is currently being displayed?\n      this.currentTile = 0;\n    }\n\n    TextureAnimator.prototype.update = function update(milliSec) {\n      this.currentDisplayTime += milliSec;\n      while (this.currentDisplayTime > this.tileDisplayDuration) {\n        this.currentDisplayTime -= this.tileDisplayDuration;\n        ++this.currentTile;\n        if (this.currentTile == this.numberOfTiles) this.currentTile = 0;\n        var currentColumn = this.currentTile % this.tilesHorizontal;\n        this.texture.offset.x = currentColumn / this.tilesHorizontal;\n        var currentRow = Math.floor(this.currentTile / this.tilesHorizontal);\n        this.texture.offset.y = currentRow / this.tilesVertical;\n      }\n    };\n\n    TextureAnimator.prototype.dispose = function dispose() {\n      var img = this.texture.image;\n      img.height = img.width = 0;\n      this.texture.dispose();\n    };\n\n    return TextureAnimator;\n  }();\n\n  exports.default = TextureAnimator;\n\n  /***/\n},\n/* 61 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _Utils = __webpack_require__(4);\n\n  var _Utils2 = _interopRequireDefault(_Utils);\n\n  var _MouseEventConverter2 = __webpack_require__(54);\n\n  var _MouseEventConverter3 = _interopRequireDefault(_MouseEventConverter2);\n\n  var _ThreeEventConverter = __webpack_require__(19);\n\n  var _ThreeEventConverter2 = _interopRequireDefault(_ThreeEventConverter);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var ThreeMouseEventConverter = function (_MouseEventConverter) {\n    _inherits(ThreeMouseEventConverter, _MouseEventConverter);\n\n    function ThreeMouseEventConverter(wnd, doc, visualWorld, test) {\n      _classCallCheck(this, ThreeMouseEventConverter);\n\n      var _this = _possibleConstructorReturn(this, _MouseEventConverter.call(this, wnd, doc, visualWorld.element));\n\n      _Utils2.default.extends(_this, new _ThreeEventConverter2.default(visualWorld, test));\n      return _this;\n    }\n\n    ThreeMouseEventConverter.prototype.getCallback = function getCallback(object) {\n      return object.object.userData.mouseCallback;\n    };\n\n    ThreeMouseEventConverter.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {\n      var jElement = (0, _libs.$)(this.element);\n      var offset = jElement.offset();\n      this.coords.x = (e.pageX - offset.left) / jElement.width() * 2 - 1;\n      this.coords.y = -((e.pageY - offset.top) / jElement.height()) * 2 + 1;\n      return this.coords;\n    };\n\n    return ThreeMouseEventConverter;\n  }(_MouseEventConverter3.default);\n\n  exports.default = ThreeMouseEventConverter;\n\n  /***/\n},\n/* 62 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _Utils = __webpack_require__(4);\n\n  var _Utils2 = _interopRequireDefault(_Utils);\n\n  var _TouchEventConverter2 = __webpack_require__(64);\n\n  var _TouchEventConverter3 = _interopRequireDefault(_TouchEventConverter2);\n\n  var _ThreeEventConverter = __webpack_require__(19);\n\n  var _ThreeEventConverter2 = _interopRequireDefault(_ThreeEventConverter);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var ThreeTouchEventConverter = function (_TouchEventConverter) {\n    _inherits(ThreeTouchEventConverter, _TouchEventConverter);\n\n    function ThreeTouchEventConverter(wnd, doc, visualWorld, test) {\n      _classCallCheck(this, ThreeTouchEventConverter);\n\n      var _this = _possibleConstructorReturn(this, _TouchEventConverter.call(this, wnd, doc, visualWorld.element));\n\n      _Utils2.default.extends(_this, new _ThreeEventConverter2.default(visualWorld, test));\n      return _this;\n    }\n\n    ThreeTouchEventConverter.prototype.getCallback = function getCallback(object) {\n      return object.object.userData.touchCallback;\n    };\n\n    ThreeTouchEventConverter.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {\n      var jElement = (0, _libs.$)(this.element),\n          offset = jElement.offset(),\n          touches = e.touches || e.originalEvent.touches,\n          touch = touches.length ? touches[0] : (this.lastTouches || [{ pageX: 0, pageY: 0 }])[0],\n          pageX = touch.pageX,\n          pageY = touch.pageY;\n      this.lastTouches = touches.length ? touches : this.lastTouches;\n      this.coords.x = (pageX - offset.left) / jElement.width() * 2 - 1;\n      this.coords.y = -((pageY - offset.top) / jElement.height()) * 2 + 1;\n      return this.coords;\n    };\n\n    return ThreeTouchEventConverter;\n  }(_TouchEventConverter3.default);\n\n  exports.default = ThreeTouchEventConverter;\n\n  /***/\n},\n/* 63 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(0);\n\n  var _ImageFactory = __webpack_require__(8);\n\n  var _ImageFactory2 = _interopRequireDefault(_ImageFactory);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var Thumbnails = function () {\n    function Thumbnails(context, container, thumbnailsClb, size) {\n      var _this = this;\n\n      var props = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { kWtoH: 210 / 297 };\n\n      _classCallCheck(this, Thumbnails);\n\n      this.container = container;\n      this.p = props;\n      this.thumbnailsClb = thumbnailsClb;\n      this.size = size;\n      this.canvas = (0, _libs.$)('<canvas>')[0];\n      this.imageFactory = new _ImageFactory2.default(_extends({}, context, {\n        renderCanvas: this.canvas,\n        renderCanvasCtx: this.canvas.getContext('2d')\n      }));\n      this.thumbnails = [];\n      for (var i = 0; i < size; ++i) {\n        var info = this.thumbnailsClb(i);\n        this.thumbnails.push(_extends({}, info, {\n          index: i,\n          loaded: info.type === 'thumbnail-image',\n          heading: null,\n          thumbnail: null,\n          title: info.title || i\n        }));\n      }\n\n      this.binds = {\n        update: this.update.bind(this),\n        navigate: function navigate(e) {\n          e.preventDefault();\n          if (_this.onNavigate) {\n            var node = e.target;\n            while (node && !node.dataThumbnail) {\n              node = node.parentNode;\n            }\n            _this.onNavigate(node.dataThumbnail.index);\n          }\n        }\n      };\n      this.container.on('scroll', this.binds.update);\n    }\n\n    Thumbnails.prototype.getSize = function getSize() {\n      return this.size;\n    };\n\n    Thumbnails.prototype.setEnable = function setEnable(enable) {\n      this.enable = enable;\n      this.update();\n    };\n\n    Thumbnails.prototype.dispose = function dispose() {\n      this.container.find('a').off('click', this.binds.navigate);\n      this.container.off('scroll', this.binds.update);\n      this.container.html('');\n      this.canvas.height = this.canvas.width = 0;\n      delete this.canvas;\n    };\n\n    Thumbnails.prototype.load = function load(thumbnail) {\n      var _this2 = this;\n\n      this.loading = true;\n      var wrapper = this.imageFactory.build(thumbnail, thumbnail.number === undefined ? thumbnail.index : thumbnail.number, this.p.kWtoH * 300, 300);\n      wrapper.onChange = function (canvas) {\n        _this2.setImage(thumbnail, canvas.toDataURL('image/png'));\n        thumbnail.loaded = true;\n        wrapper.dispose();\n        _this2.loading = false;\n        Promise.resolve().then(function () {\n          return _this2.update();\n        });\n      };\n    };\n\n    Thumbnails.prototype.getActive = function getActive() {\n      var first = this.container.scrollTop(),\n          last = first + this.container.height(),\n          res = [];\n      for (var _iterator = this.thumbnails, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var thumbnail = _ref;\n\n        if (Math.max(thumbnail.first, first) < Math.min(thumbnail.last, last)) {\n          res.push(thumbnail);\n        }\n      }\n      return res;\n    };\n\n    Thumbnails.prototype.update = function update() {\n      if (!this.loading && this.canvas && this.enable) {\n        if (!this.built) {\n          this.render();\n        }\n        var active = this.getActive();\n        for (var _iterator2 = active, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n          var _ref2;\n\n          if (_isArray2) {\n            if (_i2 >= _iterator2.length) break;\n            _ref2 = _iterator2[_i2++];\n          } else {\n            _i2 = _iterator2.next();\n            if (_i2.done) break;\n            _ref2 = _i2.value;\n          }\n\n          var thumbnail = _ref2;\n\n          if (!thumbnail.loaded) {\n            this.load(thumbnail);\n            break;\n          }\n        }\n      }\n    };\n\n    Thumbnails.prototype.setImage = function setImage(thumbnail, img) {\n      thumbnail.img = img;\n      thumbnail.thumbnail.css('background-image', ['url(\\'', img, '\\')'].join(''));\n      thumbnail.thumbnail.removeClass('loading');\n    };\n\n    Thumbnails.prototype.render = function render() {\n      var elements = ['<div class=\"thumbnails\">'];\n      for (var i = 0; i < this.size; ++i) {\n        elements.push(['<div class=\"item\"><a href=\"#\"><div class=\"thumbnail loading\"></div></a><div class=\"heading\"><a href=\"#\" title=\"', i + 1, '\">', i + 1, '</a></div></div>'].join(''));\n      }\n      elements.push('</div>');\n      this.container.append(elements.join(''));\n      var items = this.container.find('.item'),\n          base = this.container.find('.thumbnails').offset().top;\n      for (var _i3 = 0; _i3 < items.length; ++_i3) {\n        var item = (0, _libs.$)(items[_i3]);\n        this.thumbnails[_i3].heading = item.find('.heading');\n        this.thumbnails[_i3].thumbnail = item.find('.thumbnail');\n        this.thumbnails[_i3].first = item.offset().top - base;\n        this.thumbnails[_i3].last = this.thumbnails[_i3].first + item.height();\n        if (this.thumbnails[_i3].loaded) {\n          this.setImage(this.thumbnails[_i3], this.thumbnails[_i3].src);\n        }\n        var as = item.find('a');\n        for (var j = 0; j < as.length; ++j) {\n          var a = as[j];\n          a.dataThumbnail = this.thumbnails[_i3];\n        }\n      }\n      this.container.find('a').on('click', this.binds.navigate);\n      this.built = true;\n    };\n\n    return Thumbnails;\n  }();\n\n  exports.default = Thumbnails;\n\n  /***/\n},\n/* 64 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _libs = __webpack_require__(0);\n\n  var _EventConverter2 = __webpack_require__(6);\n\n  var _EventConverter3 = _interopRequireDefault(_EventConverter2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var TouchConverter = function (_EventConverter) {\n    _inherits(TouchConverter, _EventConverter);\n\n    function TouchConverter(wnd, doc, element) {\n      _classCallCheck(this, TouchConverter);\n\n      var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));\n\n      _this.element = element;\n      _this.binds = {\n        convert: _this.convert.bind(_this)\n      };\n      (0, _libs.$)(_this.element).on('touchstart touchmove', _this.binds.convert);\n      (0, _libs.$)(_this.doc).on('touchend', _this.binds.convert);\n      return _this;\n    }\n\n    TouchConverter.prototype.dispose = function dispose() {\n      (0, _libs.$)(this.element).off('touchstart touchmove', this.binds.convert);\n      (0, _libs.$)(this.doc).off('touchend', this.binds.convert);\n    };\n\n    return TouchConverter;\n  }(_EventConverter3.default);\n\n  exports.default = TouchConverter;\n\n  /***/\n},\n/* 65 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(0);\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  var View = function () {\n    View.classProperty = function classProperty(ctrl, className, value) {\n      if (value) {\n        ctrl.addClass(className);\n      } else {\n        ctrl.removeClass(className);\n      }\n    };\n\n    View.attributeProperty = function attributeProperty(ctrl, attributeName, value) {\n      if (value) {\n        ctrl.attr(attributeName, value);\n      } else {\n        ctrl.removeAttr(attributeName);\n      }\n    };\n\n    View.callHandlers = function callHandlers(handlers, id, e, data) {\n      for (var _iterator = handlers, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var handler = _ref;\n\n        if (handler[id]) {\n          handler[id](e, data);\n        } else if (handler.handleDefault) {\n          handler.handleDefault(id, e, data);\n        }\n      }\n    };\n\n    View.handleEvent = function handleEvent(id, getHandlers, e, data) {\n      View.callHandlers(getHandlers(id), id, e, data);\n    };\n\n    View.handleLinkEvent = function handleLinkEvent(e) {\n      e.preventDefault();\n      if (!this.ctrl.hasClass('disabled')) {\n        View.handleEvent(this.id, this.getHandlers, e);\n      }\n    };\n\n    View.handleInputEvent = function handleInputEvent(e) {\n      View.handleEvent(this.id, this.getHandlers, e, e.target.value);\n    };\n\n    View.handleFormEvent = function handleFormEvent(e) {\n      e.preventDefault();\n      View.handleEvent(this.id, this.getHandlers, e);\n    };\n\n    // virtual functions {\n\n\n    View.prototype.getLinks = function getLinks() {\n      return null;\n    };\n\n    View.prototype.getWidgets = function getWidgets() {\n      return null;\n    };\n\n    View.prototype.getInputs = function getInputs() {\n      return null;\n    };\n\n    View.prototype.getTexts = function getTexts() {\n      return null;\n    };\n\n    View.prototype.getTemplate = function getTemplate() {\n      return {};\n    };\n\n    View.prototype.getHandlers = function getHandlers(id) {\n      return this.handlers;\n    };\n    // }\n\n    View.prototype.callLater = function callLater(handlers, id, e, data, ms) {\n      var _this = this;\n\n      this.pendings[id] = {\n        timestamp: new Date().getTime()\n      };\n      setTimeout(function () {\n        var timestamp = new Date().getTime(),\n            pending = _this.pendings[id];\n        if (pending && timestamp - pending.timestamp >= ms) {\n          View.callHandlers(handlers, id, e, data);\n          delete _this.pendings[id];\n        }\n      }, ms);\n    };\n\n    // loadFiles(urls, ready, failure) {\n    //   let done = Promise.resolve();\n    //   for(let url of urls) {\n    //     done = done.then(()=> {\n    //       return new Promise((resolve, reject)=> {\n    //         $.get(url, (res)=> {\n    //           ready(res, url);\n    //           resolve();\n    //         }).fail((res)=> {\n    //           if(failure && failure(res, url)) {\n    //             resolve();\n    //           }\n    //           else {\n    //             reject(res);\n    //           }\n    //         });\n    //       });\n    //     });\n    //   }\n    //   return done;\n    // }\n\n    View.prototype.loadFiles = function loadFiles(urls, files) {\n      var tasks = [];\n\n      var _loop = function _loop() {\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) return 'break';\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) return 'break';\n          _ref2 = _i2.value;\n        }\n\n        var name = _ref2;\n\n        files[name] = [];\n\n        var _loop2 = function _loop2() {\n          if (_isArray3) {\n            if (_i3 >= _iterator3.length) return 'break';\n            _ref3 = _iterator3[_i3++];\n          } else {\n            _i3 = _iterator3.next();\n            if (_i3.done) return 'break';\n            _ref3 = _i3.value;\n          }\n\n          var url = _ref3;\n\n          tasks.push(new Promise(function (resolve, reject) {\n            _libs.$.get(url, function (data) {\n              files[name].push({ url: url, data: data });\n              resolve();\n            }).fail(function (res) {\n              reject(res);\n            });\n          }));\n        };\n\n        for (var _iterator3 = urls[name], _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n          var _ref3;\n\n          var _ret2 = _loop2();\n\n          if (_ret2 === 'break') break;\n        }\n      };\n\n      for (var _iterator2 = Object.keys(urls), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        var _ret = _loop();\n\n        if (_ret === 'break') break;\n      }\n      return Promise.all(tasks);\n    };\n\n    View.prototype.urlResolver = function urlResolver(baseUrl, url) {\n      url = url.replace(/\\\\/g, '/');\n      if (url.charAt(0) !== '/') {\n        baseUrl = baseUrl.replace(/\\\\/g, '/');\n        var p = baseUrl.lastIndexOf('/');\n        url = (~p ? baseUrl.substr(0, p + 1) : '') + url;\n\n        var parts = url.split('/');\n        url = [];\n        for (var _iterator4 = parts, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n          var _ref4;\n\n          if (_isArray4) {\n            if (_i4 >= _iterator4.length) break;\n            _ref4 = _iterator4[_i4++];\n          } else {\n            _i4 = _iterator4.next();\n            if (_i4.done) break;\n            _ref4 = _i4.value;\n          }\n\n          var part = _ref4;\n\n          if (part === '.') {} else if (part === '..') {\n            if (url.length && !(url.length === 1 && url[0] === '')) {\n              url.pop();\n            }\n          } else {\n            url.push(part);\n          }\n        }\n        url = url.join('/');\n      }\n\n      return url;\n    };\n\n    View.prototype.objToAttrsStr = function objToAttrsStr(o) {\n      var res = [];\n      for (var _iterator5 = Object.keys(o), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n        var _ref5;\n\n        if (_isArray5) {\n          if (_i5 >= _iterator5.length) break;\n          _ref5 = _iterator5[_i5++];\n        } else {\n          _i5 = _iterator5.next();\n          if (_i5.done) break;\n          _ref5 = _i5.value;\n        }\n\n        var _name = _ref5;\n\n        res.push([_name, '=\"', o[_name], '\"'].join(''));\n      }\n      return res.join(' ');\n    };\n\n    View.prototype.checkIframeSize = function checkIframeSize() {\n      if (this.frame) {\n        if (Math.abs(this.frame.width - this.parentContainer.width()) > 1 || Math.abs(this.frame.height - this.parentContainer.height()) > 1) {\n          this.onResize();\n        }\n        setTimeout(this.checkIframeSize.bind(this), 250);\n      }\n    };\n\n    View.prototype.onResize = function onResize() {\n      this.frame.width = this.parentContainer.width();\n      this.frame.height = this.parentContainer.height();\n    };\n\n    View.prototype.translate = function translate(html) {\n      return html.replace(/<\\$tr>(.*)<\\/\\$tr>/gi, function (s0, s1) {\n        return (0, _libs.tr)(s1);\n      });\n    };\n\n    View.prototype.fireLinksOnLoadEvent = function fireLinksOnLoadEvent() {\n      var _this2 = this;\n\n      if (this.templateObject && this.templateObject.linkLoaded) {\n        var loaded = true;\n\n        var _loop3 = function _loop3() {\n          if (_isArray6) {\n            if (_i6 >= _iterator6.length) return 'break';\n            _ref6 = _iterator6[_i6++];\n          } else {\n            _i6 = _iterator6.next();\n            if (_i6.done) return 'break';\n            _ref6 = _i6.value;\n          }\n\n          var jLink = _ref6;\n\n          var link = jLink[0];\n          var img = new Image();\n          img.onerror = function () {\n            return _this2.templateObject.linkLoaded(link);\n          };\n          img.src = link.href;\n        };\n\n        for (var _iterator6 = this.jLinks, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n          var _ref6;\n\n          var _ret3 = _loop3();\n\n          if (_ret3 === 'break') break;\n        }\n      }\n    };\n\n    function View(parentContainer, onLoad) {\n      var _this3 = this;\n\n      var template = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      _classCallCheck(this, View);\n\n      this.pendings = {};\n      this.binds = {\n        onResize: this.onResize.bind(this)\n      };\n      this.parentContainer = (0, _libs.$)(parentContainer);\n      this.isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n      this.parentContainer.html('<iframe style=\"border: 0;' + (this.isIOS ? '' : ' width: 100%; height: 100%') + '\" scrolling=\"no\"></iframe>');\n\n      this.frame = this.parentContainer.find('iframe')[0];\n      if (this.frame.contentWindow.stop) {\n        this.frame.contentWindow.stop();\n      }\n      if (this.isIOS) {\n        (0, _libs.$)(this.parentContainer[0].ownerDocument.defaultView).on('resize', this.binds.onResize);\n        this.onResize();\n        setTimeout(this.checkIframeSize.bind(this), 250);\n      }\n\n      this.container = (0, _libs.$)(this.frame.contentDocument.body);\n      this.container.css('margin', '0');\n      this.head = (0, _libs.$)(this.frame.contentDocument.head);\n      this.onLoad = onLoad;\n      this.handlers = [];\n\n      var script = template.html ? template.script : this.getTemplate().script;\n      var urls = {\n        styles: template.styles || this.getTemplate().styles,\n        html: [template.html || this.getTemplate().html],\n        script: script ? [script] : []\n      },\n          files = {},\n          links = template.links || this.getTemplate().links;\n\n      this.loadFiles(urls, files).then(function () {\n        var _loop4 = function _loop4() {\n          if (_isArray7) {\n            if (_i7 >= _iterator7.length) return 'break';\n            _ref7 = _iterator7[_i7++];\n          } else {\n            _i7 = _iterator7.next();\n            if (_i7.done) return 'break';\n            _ref7 = _i7.value;\n          }\n\n          var style = _ref7;\n\n          var textCss = style.data,\n              url = style.url;\n          textCss = textCss.replace(/url\\(['\"](.*?)[\"']\\)/g, function (r, r1) {\n            return ['url(', _this3.urlResolver(url, r1), ')'].join('');\n          });\n          (0, _libs.$)('<style type=\"text/css\">' + textCss + '</style>').appendTo(_this3.head);\n        };\n\n        for (var _iterator7 = files.styles, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n          var _ref7;\n\n          var _ret4 = _loop4();\n\n          if (_ret4 === 'break') break;\n        }\n\n        _this3.container.html(_this3.translate(files.html[0].data));\n\n        _this3.jLinks = [];\n        for (var _iterator8 = links, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {\n          var _ref8;\n\n          if (_isArray8) {\n            if (_i8 >= _iterator8.length) break;\n            _ref8 = _iterator8[_i8++];\n          } else {\n            _i8 = _iterator8.next();\n            if (_i8.done) break;\n            _ref8 = _i8.value;\n          }\n\n          var _link = _ref8;\n\n          _this3.jLinks.push((0, _libs.$)(['<link ', _this3.objToAttrsStr(_link), '>'].join('')).appendTo(_this3.head));\n        }\n\n        if (files.script[0]) {\n          var init = eval(files.script[0].data);\n          _this3.templateObject = init(_this3.container);\n        } else {\n          _this3.templateObject = {};\n        }\n\n        _this3.linkControls = {};\n        for (var _iterator9 = _this3.getLinks(), _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {\n          var _ref9;\n\n          if (_isArray9) {\n            if (_i9 >= _iterator9.length) break;\n            _ref9 = _iterator9[_i9++];\n          } else {\n            _i9 = _iterator9.next();\n            if (_i9.done) break;\n            _ref9 = _i9.value;\n          }\n\n          var id = _ref9;\n\n          _this3.linkControls[id] = _this3.container.find('.' + id);\n          _this3.binds[id] = View.handleLinkEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: id, ctrl: _this3.linkControls[id] });\n          _this3.linkControls[id].on('click', _this3.binds[id]);\n        }\n\n        _this3.widgetControls = {};\n        for (var _iterator10 = _this3.getWidgets(), _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {\n          var _ref10;\n\n          if (_isArray10) {\n            if (_i10 >= _iterator10.length) break;\n            _ref10 = _iterator10[_i10++];\n          } else {\n            _i10 = _iterator10.next();\n            if (_i10.done) break;\n            _ref10 = _i10.value;\n          }\n\n          var _id = _ref10;\n\n          _this3.widgetControls[_id] = _this3.container.find('.' + _id);\n        }\n\n        _this3.inputControls = {};\n        for (var _iterator11 = _this3.getInputs(), _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {\n          var _ref11;\n\n          if (_isArray11) {\n            if (_i11 >= _iterator11.length) break;\n            _ref11 = _iterator11[_i11++];\n          } else {\n            _i11 = _iterator11.next();\n            if (_i11.done) break;\n            _ref11 = _i11.value;\n          }\n\n          var _id2 = _ref11;\n\n          _this3.inputControls[_id2] = _this3.container.find('.' + _id2);\n          _this3.binds[_id2] = View.handleInputEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: _id2, ctrl: _this3.inputControls[_id2] });\n          _this3.inputControls[_id2].on('keyup', _this3.binds[_id2]);\n        }\n\n        _this3.formControls = {};\n        for (var _iterator12 = _this3.getForms(), _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {\n          var _ref12;\n\n          if (_isArray12) {\n            if (_i12 >= _iterator12.length) break;\n            _ref12 = _iterator12[_i12++];\n          } else {\n            _i12 = _iterator12.next();\n            if (_i12.done) break;\n            _ref12 = _i12.value;\n          }\n\n          var _id3 = _ref12;\n\n          _this3.formControls[_id3] = _this3.container.find('.' + _id3);\n          _this3.binds[_id3] = View.handleFormEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: _id3, ctrl: _this3.formControls[_id3] });\n          _this3.formControls[_id3].on('submit', _this3.binds[_id3]);\n        }\n\n        _this3.textControls = {};\n        for (var _iterator13 = _this3.getTexts(), _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) {\n          var _ref13;\n\n          if (_isArray13) {\n            if (_i13 >= _iterator13.length) break;\n            _ref13 = _iterator13[_i13++];\n          } else {\n            _i13 = _iterator13.next();\n            if (_i13.done) break;\n            _ref13 = _i13.value;\n          }\n\n          var _id4 = _ref13;\n\n          _this3.textControls[_id4] = _this3.container.find('.' + _id4);\n        }\n\n        _this3.stateSetters = [{\n          map: _this3.linkControls,\n          setter: _this3.setLinkControlState.bind(_this3)\n        }, {\n          map: _this3.widgetControls,\n          setter: _this3.setWidgetControlState.bind(_this3)\n        }, {\n          map: _this3.inputControls,\n          setter: _this3.setInputControlState.bind(_this3)\n        }, {\n          map: _this3.textControls,\n          setter: _this3.setTextControlState.bind(_this3)\n        }];\n\n        _this3.initView();\n\n        if (_this3.onLoad) {\n          _this3.onLoad();\n        }\n\n        _this3.fireLinksOnLoadEvent();\n      }).catch(function (res) {\n        return console.error(res);\n      });\n    }\n\n    View.prototype.dispose = function dispose() {\n      delete this.textControls;\n      for (var _iterator14 = this.getLinks(), _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) {\n        var _ref14;\n\n        if (_isArray14) {\n          if (_i14 >= _iterator14.length) break;\n          _ref14 = _iterator14[_i14++];\n        } else {\n          _i14 = _iterator14.next();\n          if (_i14.done) break;\n          _ref14 = _i14.value;\n        }\n\n        var id = _ref14;\n\n        this.linkControls[id].off('click', this.binds[id]);\n      }\n      delete this.linkControls;\n      delete this.widgetControls;\n      for (var _iterator15 = this.getInputs(), _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) {\n        var _ref15;\n\n        if (_isArray15) {\n          if (_i15 >= _iterator15.length) break;\n          _ref15 = _iterator15[_i15++];\n        } else {\n          _i15 = _iterator15.next();\n          if (_i15.done) break;\n          _ref15 = _i15.value;\n        }\n\n        var _id5 = _ref15;\n\n        this.inputControls[_id5].off('keyup', this.binds[_id5]);\n      }\n      delete this.inputControls;\n      for (var _iterator16 = this.getForms(), _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) {\n        var _ref16;\n\n        if (_isArray16) {\n          if (_i16 >= _iterator16.length) break;\n          _ref16 = _iterator16[_i16++];\n        } else {\n          _i16 = _iterator16.next();\n          if (_i16.done) break;\n          _ref16 = _i16.value;\n        }\n\n        var _id6 = _ref16;\n\n        this.formControls[_id6].off('submit', this.binds[_id6]);\n      }\n      delete this.formControls;\n\n      !this.templateObject.dispose || this.templateObject.dispose();\n      delete this.templateObject;\n\n      if (this.isIOS) {\n        (0, _libs.$)(this.parentContainer[0].ownerDocument.defaultView).off('resize', this.binds.onResize);\n      }\n      this.parentContainer.html('');\n      delete this.frame;\n    };\n\n    View.prototype.getContainer = function getContainer() {\n      return this.container[0];\n    };\n\n    View.prototype.getParentContainer = function getParentContainer() {\n      return this.parentContainer[0];\n    };\n\n    View.prototype.addHandler = function addHandler(handler) {\n      this.handlers.push(handler);\n    };\n\n    View.prototype.initView = function initView() {};\n\n    View.setControlState = function setControlState(ctrl, defaults, state, stateHandlers) {\n      if (ctrl) {\n        var st = _extends({}, defaults, state);\n        for (var _name2 in st) {\n          if (st.hasOwnProperty(_name2) && stateHandlers[_name2]) {\n            stateHandlers[_name2](ctrl, st[_name2]);\n          }\n        }\n      }\n    };\n\n    View.prototype.setLinkControlState = function setLinkControlState(id, state) {\n      View.setControlState(this.linkControls[id], {\n        visible: true,\n        active: false,\n        enable: true\n      }, state, View.linkStateHandlers);\n    };\n\n    View.prototype.setWidgetControlState = function setWidgetControlState(id, state) {\n      View.setControlState(this.widgetControls[id], {\n        visible: true,\n        active: false,\n        enable: true\n      }, state, View.widgetStateHandlers);\n    };\n\n    View.prototype.setInputControlState = function setInputControlState(id, state) {\n      View.setControlState(this.inputControls[id], {\n        visible: true,\n        enable: true,\n        value: ''\n      }, state, View.inputStateHandlers);\n    };\n\n    View.prototype.setTextControlState = function setTextControlState(id, state) {\n      View.setControlState(this.textControls[id], {\n        visible: true,\n        value: ''\n      }, state, View.textStateHandlers);\n    };\n\n    View.prototype.onItemStateChanged = function onItemStateChanged() {};\n\n    View.prototype.setState = function setState(id, state) {\n      for (var _iterator17 = this.stateSetters, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) {\n        var _ref17;\n\n        if (_isArray17) {\n          if (_i17 >= _iterator17.length) break;\n          _ref17 = _iterator17[_i17++];\n        } else {\n          _i17 = _iterator17.next();\n          if (_i17.done) break;\n          _ref17 = _i17.value;\n        }\n\n        var item = _ref17;\n\n        if (item.map[id]) {\n          item.setter(id, state);\n          this.onItemStateChanged(id, state);\n          break;\n        }\n      }\n    };\n\n    return View;\n  }();\n\n  View.linkStateHandlers = {\n    visible: function visible(ctrl, value) {\n      return View.classProperty(ctrl, 'hidden', !value);\n    },\n    active: function active(ctrl, value) {\n      return View.classProperty(ctrl, 'active', value);\n    },\n    enable: function enable(ctrl, value) {\n      return View.classProperty(ctrl, 'disabled', !value);\n    }\n  };\n  View.widgetStateHandlers = {\n    visible: function visible(ctrl, value) {\n      return View.classProperty(ctrl, 'hidden', !value);\n    },\n    active: function active(ctrl, value) {\n      return View.classProperty(ctrl, 'active', value);\n    },\n    enable: function enable(ctrl, value) {\n      return View.classProperty(ctrl, 'disabled', !value);\n    }\n  };\n  View.inputStateHandlers = {\n    visible: function visible(ctrl, value) {\n      return View.classProperty(ctrl, 'hidden', !value);\n    },\n    value: function value(ctrl, _value) {\n      return ctrl[0].value = _value;\n    },\n    enable: function enable(ctrl, value) {\n      return View.attributeProperty(ctrl, 'disabled', !value);\n    }\n  };\n  View.textStateHandlers = {\n    visible: function visible(ctrl, value) {\n      return View.classProperty(ctrl, 'hidden', !value);\n    },\n    value: function value(ctrl, _value2) {\n      return ctrl.text(_value2);\n    }\n  };\n  exports.default = View;\n\n  /***/\n},\n/* 66 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }return target;\n  };\n\n  var _libs = __webpack_require__(0);\n\n  var _Orbit = __webpack_require__(56);\n\n  var _Orbit2 = _interopRequireDefault(_Orbit);\n\n  var _ThreeMouseEventConverter = __webpack_require__(61);\n\n  var _ThreeMouseEventConverter2 = _interopRequireDefault(_ThreeMouseEventConverter);\n\n  var _ThreeTouchEventConverter = __webpack_require__(62);\n\n  var _ThreeTouchEventConverter2 = _interopRequireDefault(_ThreeTouchEventConverter);\n\n  var _Drag = __webpack_require__(48);\n\n  var _Drag2 = _interopRequireDefault(_Drag);\n\n  var _CSS3DRenderer = __webpack_require__(12);\n\n  var _CSS3DRenderer2 = _interopRequireDefault(_CSS3DRenderer);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var VisualWorld = function (_THREE$EventDispatche) {\n    _inherits(VisualWorld, _THREE$EventDispatche);\n\n    function VisualWorld(wnd, doc, container) {\n      var useHelpers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n      _classCallCheck(this, VisualWorld);\n\n      var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));\n\n      _this.wnd = wnd;\n      _this.doc = doc;\n      _this.jContainer = container;\n      _this.renderCallbacks = [];\n\n      _this.clock = new _libs.THREE.Clock();\n\n      _this.raycaster = new _libs.THREE.Raycaster();\n\n      _this.scene = new _libs.THREE.Scene();\n      _this.cssScene = new _libs.THREE.Scene();\n\n      _this.camera = new _libs.THREE.PerspectiveCamera(30, _this.width() / _this.height(), 0.2, 2000);\n      var scale = 1;\n\n      _this.camera.position.x = 0;\n      _this.camera.position.y = 5.5 * scale;\n      _this.camera.position.z = 0;\n\n      _this.renderer = new _libs.THREE.WebGLRenderer({ alpha: true, antialias: true });\n      _this.renderer.setClearColor(0x000000, 0);\n      _this.renderer.setPixelRatio(_this.wnd.devicePixelRatio);\n      _this.renderer.setSize(_this.width(), _this.height());\n\n      _this.jContainer.append(_this.renderer.domElement);\n\n      _this.cssRenderer = new _CSS3DRenderer2.default();\n      _this.cssRenderer.setSize(_this.width(), _this.height());\n      (0, _libs.$)(_this.cssRenderer.domElement).css({\n        position: 'absolute',\n        top: 0,\n        margin: 0,\n        padding: 0\n      });\n      _this.jContainer.append(_this.cssRenderer.domElement);\n\n      _this.element = _this.cssRenderer.domElement;\n\n      _this.controls = new _Orbit2.default(_this.camera, _this.element);\n      _this.controls.target.y = 0.5;\n\n      var cssScene = (0, _libs.$)(_this.cssRenderer.domElement).find('div'),\n          tmpVector = new _libs.THREE.Vector3();\n      _this.controls.addEventListener('change', function () {\n        _this.camera.getWorldDirection(tmpVector);\n        cssScene.css('display', tmpVector.y - _this.camera.position.y > 0 ? 'none' : 'block');\n      });\n\n      _this.textureLoader = new _libs.THREE.TextureLoader();\n\n      _this.scene.add(new _libs.THREE.AmbientLight(0xD0D0D0)); //0xC0C0C0\n\n      _this.light = new _libs.THREE.DirectionalLight(0x404040, 1);\n      _this.light.position.set(0, 6 * scale, 0);\n      _this.light.castShadow = false;\n      // const d = 20*scale;\n      // this.light.shadow.camera.left = -d;\n      // this.light.shadow.camera.right = d;\n      // this.light.shadow.camera.top = d;\n      // this.light.shadow.camera.bottom = -d;\n      // this.light.shadow.camera.near = 1*scale;\n      // this.light.shadow.camera.far = 25*scale;\n      // this.light.shadow.mapSize.x = 1024;\n      // this.light.shadow.mapSize.y = 1024;\n      _this.scene.add(_this.light);\n\n      if (useHelpers) {\n        _this.scene.add(new _libs.THREE.AxisHelper(5));\n      }\n\n      _this.binds = {\n        onWindowResize: _this.onWindowResize.bind(_this),\n        animate: _this.animate.bind(_this)\n      };\n\n      (0, _libs.$)(_this.wnd).on('resize', _this.binds.onWindowResize);\n\n      _this.mouseEvents = new _ThreeMouseEventConverter2.default(_this.wnd, _this.doc, _this);\n      _this.touchEvents = new _ThreeTouchEventConverter2.default(_this.wnd, _this.doc, _this);\n      var filterData = { type: 'mousemove' };\n      _this.mouseEvents.filter = function (element, e) {\n        var types = ['mouseenter', 'mouseover', 'mouseleave', 'mouseout'],\n            contains = function contains(p, c) {\n          return p === c || _libs.$.contains(p, c);\n        };\n        if (e.type === 'mousemove') {\n          filterData.pageX = e.pageX;\n          filterData.pageY = e.pageY;\n        }\n        return e.relatedTarget && ~types.indexOf(e.type) && contains(element, e.target) && contains(element, e.relatedTarget) ? _extends({}, e, filterData) : e;\n      };\n      _this.drag = new _Drag2.default(_this.wnd, _this.doc, _this);\n\n      _this.animate();\n      return _this;\n    }\n\n    VisualWorld.prototype.dispose = function dispose() {\n      delete this.binds.animate;\n      (0, _libs.$)(this.wnd).off('resize', this.binds.onWindowResize);\n      this.mouseEvents.dispose();\n      this.touchEvents.dispose();\n      this.drag.dispose();\n      this.controls.dispose();\n    };\n\n    VisualWorld.prototype.width = function width() {\n      return this.jContainer.width();\n    };\n\n    VisualWorld.prototype.height = function height() {\n      return this.jContainer.height();\n    };\n\n    VisualWorld.prototype.setExtraLighting = function setExtraLighting(v) {\n      this.light.intensity = v;\n    };\n\n    VisualWorld.prototype.getOrbit = function getOrbit() {\n      return this.controls;\n    };\n\n    VisualWorld.prototype.setControlsState = function setControlsState(state) {\n      this.controls.enabled = state;\n    };\n\n    VisualWorld.prototype.getControlsState = function getControlsState() {\n      return this.controls.enabled;\n    };\n\n    VisualWorld.prototype.onWindowResize = function onWindowResize() {\n      var _this2 = this;\n\n      var updateCamera = function updateCamera(camera) {\n        camera.aspect = _this2.width() / _this2.height();\n        camera.updateProjectionMatrix();\n      },\n          updateRenderer = function updateRenderer(renderer) {\n        renderer.setSize(_this2.width(), _this2.height());\n      };\n\n      updateCamera(this.camera);\n      updateRenderer(this.renderer);\n      updateRenderer(this.cssRenderer);\n\n      this.dispatchEvent({ type: 'resize' });\n    };\n\n    VisualWorld.prototype.addObject = function addObject(object) {\n      this.scene.add(object);\n    };\n\n    VisualWorld.prototype.addCssObject = function addCssObject(object) {\n      this.cssScene.add(object);\n    };\n\n    VisualWorld.prototype.removeCssObject = function removeCssObject(object) {\n      this.cssScene.remove(object);\n    };\n\n    VisualWorld.prototype.removeObject = function removeObject(object) {\n      this.scene.remove(object);\n    };\n\n    VisualWorld.prototype.animate = function animate() {\n      if (this.binds.animate) {\n        requestAnimationFrame(this.binds.animate);\n      }\n      this.render();\n    };\n\n    VisualWorld.prototype.addRenderCallback = function addRenderCallback(clb) {\n      this.renderCallbacks.push(clb);\n    };\n\n    VisualWorld.prototype.removeRenderCallback = function removeRenderCallback(clb) {\n      var i = this.renderCallbacks.indexOf(clb);\n      if (~i) {\n        this.renderCallbacks.splice(i, 1);\n      }\n    };\n\n    VisualWorld.prototype.render = function render() {\n      var deltaTime = this.clock.getDelta();\n      this.controls.update(deltaTime);\n      for (var _iterator = this.renderCallbacks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var clb = _ref;\n\n        clb(deltaTime);\n      }\n      this.cssRenderer.render(this.cssScene, this.camera);\n      this.renderer.render(this.scene, this.camera);\n    };\n\n    VisualWorld.prototype.processGeometry = function processGeometry(bufGeometry, mesh) {\n      mesh.geometry = bufGeometry;\n      // Obtain a Geometry\n      var geometry = new _libs.THREE.Geometry().fromBufferGeometry(bufGeometry);\n      // Merge the vertices so the triangle soup is converted to indexed triangles\n      geometry.mergeVertices();\n      // Convert again to BufferGeometry, indexed\n      var indexedBufferGeom = this.createIndexedBufferGeometryFromGeometry(geometry);\n      // Create index arrays mapping the indexed vertices to bufGeometry vertices\n      return this.mapIndices(bufGeometry, indexedBufferGeom);\n    };\n\n    VisualWorld.prototype.createIndexedBufferGeometryFromGeometry = function createIndexedBufferGeometryFromGeometry(geometry) {\n      var numVertices = geometry.vertices.length;\n      var numFaces = geometry.faces.length;\n\n      var bufferGeom = new _libs.THREE.BufferGeometry();\n      var vertices = new Float32Array(numVertices * 3);\n      var indices = new (numFaces * 3 > 65535 ? Uint32Array : Uint16Array)(numFaces * 3);\n\n      for (var i = 0; i < numVertices; i++) {\n        var p = geometry.vertices[i];\n        var i3 = i * 3;\n        vertices[i3] = p.x;\n        vertices[i3 + 1] = p.y;\n        vertices[i3 + 2] = p.z;\n      }\n\n      for (var _i2 = 0; _i2 < numFaces; _i2++) {\n        var f = geometry.faces[_i2];\n        var _i3 = _i2 * 3;\n        indices[_i3] = f.a;\n        indices[_i3 + 1] = f.b;\n        indices[_i3 + 2] = f.c;\n      }\n\n      bufferGeom.setIndex(new _libs.THREE.BufferAttribute(indices, 1));\n      bufferGeom.addAttribute('position', new _libs.THREE.BufferAttribute(vertices, 3));\n\n      return bufferGeom;\n    };\n\n    VisualWorld.prototype.isEqual = function isEqual(x1, y1, z1, x2, y2, z2) {\n      var delta = 0.000001;\n      return Math.abs(x2 - x1) < delta && Math.abs(y2 - y1) < delta && Math.abs(z2 - z1) < delta;\n    };\n\n    VisualWorld.prototype.mapIndices = function mapIndices(bufGeometry, indexedBufferGeom) {\n      // Creates mappedVertices, mappedIndices and mappedAssociation in bufGeometry\n      var vertices = bufGeometry.attributes.position.array;\n      var idxVertices = indexedBufferGeom.attributes.position.array;\n      var indices = indexedBufferGeom.index.array;\n\n      var numIdxVertices = idxVertices.length / 3;\n      var numVertices = vertices.length / 3;\n\n      bufGeometry.mappedVertices = idxVertices;\n      bufGeometry.mappedIndices = indices;\n      bufGeometry.mappedAssociation = [];\n\n      for (var i = 0; i < numIdxVertices; i++) {\n        var association = [];\n        bufGeometry.mappedAssociation.push(association);\n        var i3 = i * 3;\n        for (var j = 0; j < numVertices; j++) {\n          var j3 = j * 3;\n          if (this.isEqual(idxVertices[i3], idxVertices[i3 + 1], idxVertices[i3 + 2], vertices[j3], vertices[j3 + 1], vertices[j3 + 2])) {\n            association.push(j3);\n          }\n        }\n      }\n      return { vertices: bufGeometry.mappedVertices, indices: bufGeometry.mappedIndices };\n    };\n\n    VisualWorld.prototype.oneNodePositionCallback = function oneNodePositionCallback(p, q) {\n      this.position.set(p.x, p.y, p.z);\n      this.quaternion.set(q.x, q.y, q.z, q.w);\n    };\n\n    VisualWorld.prototype.multyNodePositionCallback = function multyNodePositionCallback(node, p, n) {\n      var geometry = this.geometry;\n      var volumePositions = geometry.attributes.position.array;\n      var volumeNormals = geometry.attributes.normal.array;\n      var assocVertex = geometry.mappedAssociation[node];\n\n      for (var k = 0; k < assocVertex.length; k++) {\n        var indexVertex = assocVertex[k];\n        volumePositions[indexVertex] = p.x;\n        volumeNormals[indexVertex] = n.x;\n        ++indexVertex;\n        volumePositions[indexVertex] = p.y;\n        volumeNormals[indexVertex] = n.y;\n        ++indexVertex;\n        volumePositions[indexVertex] = p.z;\n        volumeNormals[indexVertex] = n.z;\n      }\n    };\n\n    VisualWorld.prototype.multyNodePositionPostCallback = function multyNodePositionPostCallback() {\n      var geometry = this.geometry;\n      geometry.attributes.position.needsUpdate = true;\n      geometry.attributes.normal.needsUpdate = true;\n    };\n\n    VisualWorld.prototype.pathPositionCallback = function pathPositionCallback(node, p) {\n      var positions = this.geometry.attributes.position.array;\n      var i = 3 * node;\n      positions[i++] = p.x;\n      positions[i++] = p.y;\n      positions[i] = p.z;\n    };\n\n    VisualWorld.prototype.pathPositionPostCallback = function pathPositionPostCallback() {\n      var geometry = this.geometry;\n      geometry.computeVertexNormals();\n      geometry.attributes.position.needsUpdate = true;\n      geometry.attributes.normal.needsUpdate = true;\n    };\n\n    return VisualWorld;\n  }(_libs.THREE.EventDispatcher);\n\n  exports.default = VisualWorld;\n\n  /***/\n},\n/* 67 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _Controller2 = __webpack_require__(15);\n\n  var _Controller3 = _interopRequireDefault(_Controller2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var WidgetController = function (_Controller) {\n    _inherits(WidgetController, _Controller);\n\n    function WidgetController(view) {\n      _classCallCheck(this, WidgetController);\n\n      var _this = _possibleConstructorReturn(this, _Controller.call(this));\n\n      _this.view = view;\n      _this.visible = false;\n      return _this;\n    }\n\n    WidgetController.prototype.togle = function togle() {\n      this.visible = !this.visible;\n      this.fireChange();\n    };\n\n    WidgetController.prototype.hide = function hide() {\n      this.visible = false;\n      this.fireChange();\n    };\n\n    WidgetController.prototype.fireChange = function fireChange() {\n      if (this.onChange) {\n        this.onChange();\n      }\n      this.updateView();\n    };\n\n    WidgetController.prototype.updateView = function updateView() {\n      if (this.view) {\n        this.view.setState('widFloatWnd', {\n          enable: true,\n          visible: this.visible,\n          active: false\n        });\n      }\n    };\n\n    return WidgetController;\n  }(_Controller3.default);\n\n  exports.default = WidgetController;\n\n  /***/\n},\n/* 68 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _Target2 = __webpack_require__(21);\n\n  var _Target3 = _interopRequireDefault(_Target2);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var CircleTarget = function (_Target) {\n    _inherits(CircleTarget, _Target);\n\n    function CircleTarget(x, y, r) {\n      _classCallCheck(this, CircleTarget);\n\n      var _this = _possibleConstructorReturn(this, _Target.call(this));\n\n      _this.p = {\n        x: x,\n        y: y,\n        r: r\n      };\n      return _this;\n    }\n\n    CircleTarget.prototype.testIntersection = function testIntersection(e, data) {\n      var res = void 0;\n      var x = data.x,\n          y = data.y,\n          p = this.p;\n\n      if ((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y) <= p.r * p.r) {\n        res = {\n          target: this,\n          data: data\n        };\n      }\n      return res;\n    };\n\n    return CircleTarget;\n  }(_Target3.default);\n\n  exports.default = CircleTarget;\n\n  /***/\n},\n/* 69 */\n/***/function (module, exports, __webpack_require__) {\n\n  \"use strict\";\n  'use strict';\n\n  exports.__esModule = true;\n\n  var _Target2 = __webpack_require__(21);\n\n  var _Target3 = _interopRequireDefault(_Target2);\n\n  var _BaseMathUtils = __webpack_require__(2);\n\n  var _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : { default: obj };\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (!self) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof2(call)) === \"object\" || typeof call === \"function\") ? call : self;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function, not \" + (typeof superClass === 'undefined' ? 'undefined' : _typeof2(superClass)));\n    }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n  }\n\n  var PolyTarget = function (_Target) {\n    _inherits(PolyTarget, _Target);\n\n    function PolyTarget(poly) {\n      _classCallCheck(this, PolyTarget);\n\n      var _this = _possibleConstructorReturn(this, _Target.call(this));\n\n      _this.poly = poly;\n      return _this;\n    }\n\n    PolyTarget.prototype.testIntersection = function testIntersection(e, p) {\n      return _BaseMathUtils2.default.isInsidePoly(this.poly, p) ? {\n        target: this,\n        data: p\n      } : undefined;\n    };\n\n    return PolyTarget;\n  }(_Target3.default);\n\n  exports.default = PolyTarget;\n\n  /***/\n},\n/* 70 */\n/***/function (module, exports, __webpack_require__) {\n\n  // stats.js - http://github.com/mrdoob/stats.js\n  (function (f, e) {\n    true ? module.exports = e() : \"function\" === typeof define && define.amd ? define(e) : f.Stats = e();\n  })(this, function () {\n    var f = function f() {\n      function e(a) {\n        c.appendChild(a.dom);return a;\n      }function u(a) {\n        for (var d = 0; d < c.children.length; d++) {\n          c.children[d].style.display = d === a ? \"block\" : \"none\";\n        }l = a;\n      }var l = 0,\n          c = document.createElement(\"div\");c.style.cssText = \"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\", function (a) {\n        a.preventDefault();\n        u(++l % c.children.length);\n      }, !1);var k = (performance || Date).now(),\n          g = k,\n          a = 0,\n          r = e(new f.Panel(\"FPS\", \"#0ff\", \"#002\")),\n          h = e(new f.Panel(\"MS\", \"#0f0\", \"#020\"));if (self.performance && self.performance.memory) var t = e(new f.Panel(\"MB\", \"#f08\", \"#201\"));u(0);return { REVISION: 16, dom: c, addPanel: e, showPanel: u, begin: function begin() {\n          k = (performance || Date).now();\n        }, end: function end() {\n          a++;var c = (performance || Date).now();h.update(c - k, 200);if (c > g + 1E3 && (r.update(1E3 * a / (c - g), 100), g = c, a = 0, t)) {\n            var d = performance.memory;t.update(d.usedJSHeapSize / 1048576, d.jsHeapSizeLimit / 1048576);\n          }return c;\n        }, update: function update() {\n          k = this.end();\n        }, domElement: c, setMode: u };\n    };f.Panel = function (e, f, l) {\n      var c = Infinity,\n          k = 0,\n          g = Math.round,\n          a = g(window.devicePixelRatio || 1),\n          r = 80 * a,\n          h = 48 * a,\n          t = 3 * a,\n          v = 2 * a,\n          d = 3 * a,\n          m = 15 * a,\n          n = 74 * a,\n          p = 30 * a,\n          q = document.createElement(\"canvas\");q.width = r;q.height = h;q.style.cssText = \"width:80px;height:48px\";var b = q.getContext(\"2d\");b.font = \"bold \" + 9 * a + \"px Helvetica,Arial,sans-serif\";b.textBaseline = \"top\";b.fillStyle = l;b.fillRect(0, 0, r, h);b.fillStyle = f;b.fillText(e, t, v);\n      b.fillRect(d, m, n, p);b.fillStyle = l;b.globalAlpha = .9;b.fillRect(d, m, n, p);return { dom: q, update: function update(h, w) {\n          c = Math.min(c, h);k = Math.max(k, h);b.fillStyle = l;b.globalAlpha = 1;b.fillRect(0, 0, r, m);b.fillStyle = f;b.fillText(g(h) + \" \" + e + \" (\" + g(c) + \"-\" + g(k) + \")\", t, v);b.drawImage(q, d + a, m, n - a, p, d, m, n - a, p);b.fillRect(d + n - a, m, a, p);b.fillStyle = l;b.globalAlpha = .9;b.fillRect(d + n - a, m, a, g((1 - h / w) * p));\n        } };\n    };return f;\n  });\n\n  /***/\n},\n/* 71 */\n/***/function (module, exports, __webpack_require__) {\n\n  /*** IMPORTS FROM imports-loader ***/\n  var define = false;\n\n  /*!\n   * jQuery Mousewheel 3.1.13\n   *\n   * Copyright jQuery Foundation and other contributors\n   * Released under the MIT license\n   * http://jquery.org/license\n   */\n\n  (function (factory) {\n    if (typeof define === 'function' && define.amd) {\n      // AMD. Register as an anonymous module.\n      define(['jquery'], factory);\n    } else if (true) {\n      // Node/CommonJS style for Browserify\n      module.exports = factory;\n    } else {\n      // Browser globals\n      factory(jQuery);\n    }\n  })(function ($) {\n\n    var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice = Array.prototype.slice,\n        nullLowestDeltaTimeout,\n        lowestDelta;\n\n    if ($.event.fixHooks) {\n      for (var i = toFix.length; i;) {\n        $.event.fixHooks[toFix[--i]] = $.event.mouseHooks;\n      }\n    }\n\n    var special = $.event.special.mousewheel = {\n      version: '3.1.12',\n\n      setup: function setup() {\n        if (this.addEventListener) {\n          for (var i = toBind.length; i;) {\n            this.addEventListener(toBind[--i], handler, false);\n          }\n        } else {\n          this.onmousewheel = handler;\n        }\n        // Store the line height and page height for this particular element\n        $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n        $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n      },\n\n      teardown: function teardown() {\n        if (this.removeEventListener) {\n          for (var i = toBind.length; i;) {\n            this.removeEventListener(toBind[--i], handler, false);\n          }\n        } else {\n          this.onmousewheel = null;\n        }\n        // Clean up the data we added to the element\n        $.removeData(this, 'mousewheel-line-height');\n        $.removeData(this, 'mousewheel-page-height');\n      },\n\n      getLineHeight: function getLineHeight(elem) {\n        var $elem = $(elem),\n            $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n        if (!$parent.length) {\n          $parent = $('body');\n        }\n        return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n      },\n\n      getPageHeight: function getPageHeight(elem) {\n        return $(elem).height();\n      },\n\n      settings: {\n        adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n        normalizeOffset: true // calls getBoundingClientRect for each event\n      }\n    };\n\n    $.fn.extend({\n      mousewheel: function mousewheel(fn) {\n        return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n      },\n\n      unmousewheel: function unmousewheel(fn) {\n        return this.unbind('mousewheel', fn);\n      }\n    });\n\n    function handler(event) {\n      var orgEvent = event || window.event,\n          args = slice.call(arguments, 1),\n          delta = 0,\n          deltaX = 0,\n          deltaY = 0,\n          absDelta = 0,\n          offsetX = 0,\n          offsetY = 0;\n      event = $.event.fix(orgEvent);\n      event.type = 'mousewheel';\n\n      // Old school scrollwheel delta\n      if ('detail' in orgEvent) {\n        deltaY = orgEvent.detail * -1;\n      }\n      if ('wheelDelta' in orgEvent) {\n        deltaY = orgEvent.wheelDelta;\n      }\n      if ('wheelDeltaY' in orgEvent) {\n        deltaY = orgEvent.wheelDeltaY;\n      }\n      if ('wheelDeltaX' in orgEvent) {\n        deltaX = orgEvent.wheelDeltaX * -1;\n      }\n\n      // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n      if ('axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) {\n        deltaX = deltaY * -1;\n        deltaY = 0;\n      }\n\n      // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n      delta = deltaY === 0 ? deltaX : deltaY;\n\n      // New school wheel delta (wheel event)\n      if ('deltaY' in orgEvent) {\n        deltaY = orgEvent.deltaY * -1;\n        delta = deltaY;\n      }\n      if ('deltaX' in orgEvent) {\n        deltaX = orgEvent.deltaX;\n        if (deltaY === 0) {\n          delta = deltaX * -1;\n        }\n      }\n\n      // No change actually happened, no reason to go any further\n      if (deltaY === 0 && deltaX === 0) {\n        return;\n      }\n\n      // Need to convert lines and pages to pixels if we aren't already in pixels\n      // There are three delta modes:\n      //   * deltaMode 0 is by pixels, nothing to do\n      //   * deltaMode 1 is by lines\n      //   * deltaMode 2 is by pages\n      if (orgEvent.deltaMode === 1) {\n        var lineHeight = $.data(this, 'mousewheel-line-height');\n        delta *= lineHeight;\n        deltaY *= lineHeight;\n        deltaX *= lineHeight;\n      } else if (orgEvent.deltaMode === 2) {\n        var pageHeight = $.data(this, 'mousewheel-page-height');\n        delta *= pageHeight;\n        deltaY *= pageHeight;\n        deltaX *= pageHeight;\n      }\n\n      // Store lowest absolute delta to normalize the delta values\n      absDelta = Math.max(Math.abs(deltaY), Math.abs(deltaX));\n\n      if (!lowestDelta || absDelta < lowestDelta) {\n        lowestDelta = absDelta;\n\n        // Adjust older deltas if necessary\n        if (shouldAdjustOldDeltas(orgEvent, absDelta)) {\n          lowestDelta /= 40;\n        }\n      }\n\n      // Adjust older deltas if necessary\n      if (shouldAdjustOldDeltas(orgEvent, absDelta)) {\n        // Divide all the things by 40!\n        delta /= 40;\n        deltaX /= 40;\n        deltaY /= 40;\n      }\n\n      // Get a whole, normalized value for the deltas\n      delta = Math[delta >= 1 ? 'floor' : 'ceil'](delta / lowestDelta);\n      deltaX = Math[deltaX >= 1 ? 'floor' : 'ceil'](deltaX / lowestDelta);\n      deltaY = Math[deltaY >= 1 ? 'floor' : 'ceil'](deltaY / lowestDelta);\n\n      // Normalise offsetX and offsetY properties\n      if (special.settings.normalizeOffset && this.getBoundingClientRect) {\n        var boundingRect = this.getBoundingClientRect();\n        offsetX = event.clientX - boundingRect.left;\n        offsetY = event.clientY - boundingRect.top;\n      }\n\n      // Add information to the event object\n      event.deltaX = deltaX;\n      event.deltaY = deltaY;\n      event.deltaFactor = lowestDelta;\n      event.offsetX = offsetX;\n      event.offsetY = offsetY;\n      // Go ahead and set deltaMode to 0 since we converted to pixels\n      // Although this is a little odd since we overwrite the deltaX/Y\n      // properties with normalized deltas.\n      event.deltaMode = 0;\n\n      // Add event and delta to the front of the arguments\n      args.unshift(event, delta, deltaX, deltaY);\n\n      // Clearout lowestDelta after sometime to better\n      // handle multiple device types that give different\n      // a different lowestDelta\n      // Ex: trackpad = 3 and mouse wheel = 120\n      if (nullLowestDeltaTimeout) {\n        clearTimeout(nullLowestDeltaTimeout);\n      }\n      nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n      return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n      lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n      // If this is an older event and the delta is divisable by 120,\n      // then we are assuming that the browser is treating this as an\n      // older mouse wheel event and that we should divide the deltas\n      // by 40 to try and get a more usable deltaFactor.\n      // Side note, this actually impacts the reported scroll distance\n      // in older browsers and can cause scrolling to be slower than native.\n      // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n      return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n  });\n\n  /***/\n},\n/* 72 */\n/***/function (module, exports, __webpack_require__) {\n\n  __webpack_require__(23);\n  module.exports = __webpack_require__(22);\n\n  /***/\n}\n/******/]);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.__esModule = true;\nvar _$ =  true ? window.jQuery : require('jquery'),\n    _html2canvas =  true ? window.html2canvas : require('html2canvas'),\n    _THREE =  true ? window.THREE : require('three'),\n    _PDFJS =  true ? window.PDFJS : require('pdfjs');\n\nexports.$ = _$;\nexports.html2canvas = _html2canvas;\nexports.THREE = _THREE;\nexports.PDFJS = _PDFJS;\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(0);\n\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgZTllZjBjNTdkNGM5OGI5ODgxODUiLCJ3ZWJwYWNrOi8vLy4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6L3dlYnBhY2svYm9vdHN0cmFwIDcyNGU1OGRmNThjNjVjNDgwOGI0Iiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9saWJzLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2xpYnMuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvQmFzZU1hdGhVdGlscy5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9NYXRoVXRpbHMuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvVXRpbHMuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvSW1hZ2VCYXNlLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0V2ZW50Q29udmVydGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0dyYXBoVXRpbHMuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvSW1hZ2VGYWN0b3J5LmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQm9va1Byb3BzQnVpbGRlci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9qcy9jbGFzc2VzL1NoZWV0QmxvY2suanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vanMvcHJvcHMvYm9vay5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9DU1MzRFJlbmRlcmVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0NTU0xheWVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0NhY2hlLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0NvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvQ3VzdG9tRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRmluZGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1BkZi5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9UaHJlZUV2ZW50Q29udmVydGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1RocmVlVXRpbHMuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvdGFyZ2V0cy9UYXJnZXQuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vaW5kZXguanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQXV0b05hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9qcy9jbGFzc2VzL0JpbmRlci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9qcy9jbGFzc2VzL0Jvb2suanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vanMvY2xhc3Nlcy9Cb29rQ29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9qcy9jbGFzc2VzL0Jvb2tQcmludGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQm9va1ZpZXcuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vanMvY2xhc3Nlcy9DbGJCb29rUHJvcHNCdWlsZGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQ292ZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vanMvY2xhc3Nlcy9Dc3NMYXllcnNNYW5hZ2VyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvUGFnZU1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vanMvY2xhc3Nlcy9QZGZCb29rUHJvcHNCdWlsZGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvUGRmTGlua3NIYW5kbGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvU2VhcmNoRW5naW5lLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL2NsYXNzZXMvU2hlZXRDc3NMYXllci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9qcy9jbGFzc2VzL1NoZWV0UGh5c2ljcy5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9qcy9jbGFzc2VzL1NvdW5kc0Vudmlyb21lbnQuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vanMvY2xhc3Nlcy9Ub2NDb250cm9sbGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL21vZGVscy9zaGVldEJsb2NrLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2pzL3Byb3BzL2Jvb2tDb250cm9sbGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0JsYW5rSW1hZ2UuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvQm9va21hcmtzLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0RldGVjdG9yLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0RvY01vdXNlU2ltdWxhdG9yLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0RvbTJJbWFnZS5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9EcmFnLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0V2ZW50c1RvQWN0aW9ucy5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9GdWxsU2NyZWVuLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0ludGVyYWN0aXZlSW1hZ2UuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvTG9hZGluZ0FuaW1hdGlvbi5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9Mb2FkaW5nQ29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9Nb3VzZUV2ZW50Q29udmVydGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL09iamVjdDNEV2F0Y2hlci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9PcmJpdC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9QZGZJbWFnZS5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9TZWFyY2guanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvU3RhdGljSW1hZ2UuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvVGV4dHVyZUFuaW1hdG9yLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1RocmVlTW91c2VFdmVudENvbnZlcnRlci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9UaHJlZVRvdWNoRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvVGh1bWJuYWlscy5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9Ub3VjaEV2ZW50Q29udmVydGVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1ZpZXcuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvVmlzdWFsV29ybGQuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvV2lkZ2V0Q29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy90YXJnZXRzL0NpcmNsZVRhcmdldC5qcyIsIndlYnBhY2s6Ly8vd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy90YXJnZXRzL1BvbHlUYXJnZXQuanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vfi9zdGF0cy5qcy9idWlsZC9zdGF0cy5taW4uanMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2s6Ly8vfi9qcXVlcnktbW91c2V3aGVlbC9qcXVlcnkubW91c2V3aGVlbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbGlicy5qcyJdLCJuYW1lcyI6WyJyZXF1aXJlIiwiXyQiLCJ3aW5kb3ciLCJfaHRtbDJjYW52YXMiLCJfVEhSRUUiLCJfUmVhY3QiLCJfUmVhY3RET00iLCJfUERGSlMiLCJfdHIiLCIkIiwiaHRtbDJjYW52YXMiLCJUSFJFRSIsIlJlYWN0IiwiUmVhY3RET00iLCJQREZKUyIsInRyIiwiRkIzRF9MT0NBTEUiLCJCYXNlTWF0aFV0aWxzIiwic3VtMSIsImthIiwiYSIsImtiIiwiYiIsInN1bTIiLCJzdW0zIiwic3VtNCIsInJrNCIsImR5IiwidCIsImR0IiwieSIsInN1bSIsImsxIiwiazIiLCJrMyIsIms0IiwiZXh0cmFwb2xhdGVMaW5lYXIiLCJ4IiwieGkiLCJpbnRlcnBvbGF0ZUxpbmVhciIsInlpIiwiY2FsY1NjYWxlIiwic3JjVyIsInNyY0giLCJkc3RXIiwiZHN0SCIsIk1hdGgiLCJtdWxNIiwiciIsImkiLCJqIiwiayIsInRyYW5zTSIsIm0iLCJtYXQiLCJkYXRhIiwicyIsImRpc3AiLCJNIiwicHJlZGljdCIsIm51bSIsImwiLCJEIiwiYW0iLCJibSIsInRhIiwiZCIsInAiLCJ2IiwiZ2V0VW5pcXVlIiwic2V0U3BsaW5lUG9pbnRzIiwic3BsaW5lIiwicHMiLCJjb25zb2xlIiwibWFwbDJMIiwibHMiLCJsZW4iLCJuIiwiZiIsImRMIiwiTCIsImRldDIiLCJjIiwic29sdmUyTGluIiwiYTEiLCJiMSIsImEyIiwiYjIiLCJyZXMiLCJkeCIsImlzSW5zaWRlUG9seSIsImRvbmUiLCJjdCIsIm5wIiwicm4iLCJwMCIsInAxIiwiaXAiLCJ0biIsImlzSW5zaWRlQ29udlBvbHkiLCJzZyIsInYybGVuIiwidjIiLCJ2MmRpc3QiLCJ2MjEiLCJ2MjIiLCJjb21wdXRlU3F1YXJlIiwiY29tcHV0ZUludGVycENvZWZzIiwidHJpIiwiY29lZnMiLCJlcHMiLCJNYXRoVXRpbHMiLCJzcGxpdFNwbGluZSIsIk4iLCJvIiwiZGwiLCJnZXRMaW5lYXJJbmRlY2VzIiwiZGVsIiwiZERlbCIsInJlZmluZVBvbHkiLCJwb2x5IiwibWF4RGwiLCJ2MSIsIlV0aWxzIiwibm9ybWFsaXplVXJsIiwidXJsIiwiYmFzZSIsInNwbGl0IiwiZXh0ZW5kcyIsImRlciIsImRlZmF1bHRDbXAiLCJsb3dlckJvdW5kIiwiY21wIiwiaCIsIm1pZCIsIkltYWdlQmFzZSIsImNvbnRleHQiLCJzZXRSZXNvbHV0aW9uIiwiZGlzcG9zZSIsInJlbmRlckJsYW5rUGFnZSIsInJlbmRlckltYWdlIiwiaW1hZ2UiLCJub3JtVG9Db252IiwiaGVpZ2h0IiwicmVuZGVySGl0IiwiY3R4IiwicHVzaEN0eCIsInBvcEN0eCIsInJlbmRlck5vdEZvdW5kUGFnZSIsImZpbmlzaFJlbmRlciIsImZpbmlzaExvYWQiLCJnZXRTaW11bGF0ZWREb2MiLCJyZW5kZXJDYW52YXMiLCJyZW5kZXJDYW52YXNDdHgiLCJFdmVudENvbnZlcnRlciIsInNldEVuYWJsZSIsInZsIiwiZ2V0Q2FsbGJhY2siLCJvYmplY3QiLCJub3RpZnkiLCJlIiwidHlwZSIsImNhbGxiYWNrIiwidmlldyIsInduZCIsImpFIiwiY29udmVydCIsImNvbnZlcnRUb3VjaCIsImNvbnZlcnRNb3VzZSIsIkdyYXBoVXRpbHMiLCJpbnRlcnBvbGF0ZTAxIiwieTEiLCJ5MiIsImdldENvbG9yQnl0ZXMiLCJjb2xvciIsImludmVyc2VDb2xvciIsImJzIiwiaWJzIiwibmJzIiwiY29sb3IyUmdiYSIsImJ5dGVzMlJnYmEiLCJieXRlczJDb2xvciIsIkltYWdlRmFjdG9yeSIsImNhY2hlIiwiYnVpbGQiLCJpbmZvIiwid2lkdGhUZXhlbHMiLCJoZWlnaHRUZXhlbHMiLCJpbmplY3RvciIsInVuZGVmaW5lZCIsIkJvb2tQcm9wc0J1aWxkZXIiLCJjYWxjU2l6ZSIsIndpZHRoIiwic2NhbGUiLCJjYWxjVGV4ZWxzIiwic2hlZXQiLCJjYWxjUHJvcHMiLCJjb3ZlciIsInBhZ2UiLCJjYWxjU2hlZXRzIiwicGFnZXMiLCJnZXRTaGVldHMiLCJnZXRQcm9wcyIsImdldFBhZ2VDYWxsYmFjayIsInJlYWR5IiwiU2hlZXRCbG9jayIsImFuZ2xlIiwic3RhdGUiLCJmaXJzdCIsImxhc3QiLCJwcm9wcyIsImxvYWRlZFBvaW50cyIsIk9iamVjdCIsIm1hcCIsImlzIiwiQXJyYXkiLCJtYXJrZXIiLCJ2ZXJ0ZXgiLCJ1c2UiLCJtYXhEaXN0YW5jZSIsInBvaW50cyIsIk9aIiwiYXhpcyIsImdldFNpemUiLCJzaGVldHMiLCJnZXRUb3BDZXJuZXJzIiwib2ZmIiwiZ2V0VG9wU2l6ZSIsInZzIiwiZ2V0VG9wV29ybGRSb3RhdGlvbiIsInEiLCJnZXRUb3BXb3JsZFBvc2l0aW9uIiwidmkiLCJnZXRJbnRlcnBvbGF0aW9uUG9pbnRzIiwiaW5kcyIsIm1vZCIsIksiLCJzZXQiLCJQSSIsImNsb3NlZEFuZ2xlIiwiYmluZGVyVHVybiIsImhsIiwiaHIiLCJvZmZzZXQiLCJpbkFuZ2xlIiwiaEFuZ2xlIiwic2V0UG9pbnRzIiwibGVmdCIsInJpZ2h0IiwieXMiLCJ6IiwicGxhbmUiLCJub3JtYWwiLCJwbGFuZU9mZnNldCIsInByb2oiLCJkaXN0YW5jZSIsImQyQW5nbGUiLCJwb2ludCIsImludmVyc2UiLCJnZXRQb2ludHNBdEhzIiwiaHMiLCJibCIsInAyIiwiZHAiLCJsbiIsInNwIiwibnBzIiwiZ2V0UG9pbnRzQXRBbmdsZUFuZEhzIiwiZ2V0UG9pbnRzQXRBbmdsZSIsImFuZ2xlcyIsInhwcyIsInlwcyIsImludGVycG9sYXRlIiwibG9hZFBvaW50cyIsIm9wZW5lZEludGVycG9sYXRpb25JbmRlY2VzIiwiY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMiLCJmbGF0SW50ZXJwb2xhdGlvbkluZGVjZXMiLCJpbnRlcnBvbGF0aW9uUG9pbnRzIiwiZ3Jhdml0eSIsImNhY2hlZFBhZ2VzIiwicmVuZGVySW5hY3RpdmVQYWdlcyIsInJlbmRlckluYWN0aXZlUGFnZXNPbk1vYmlsZSIsInJlbmRlcldoaWxlRmxpcHBpbmciLCJwYWdlc0ZvclByZWRpY3RpbmciLCJwcmVsb2FkUGFnZXMiLCJydGwiLCJzdGFydFZlbG9jaXR5IiwiY29ybmVyRGV2aWF0aW9uIiwiZmxleGliaWxpdHkiLCJmbGV4aWJsZUNvcm5lciIsImJlbmRpbmciLCJ3YXZlIiwic2hhcGUiLCJiaW5kZXJUZXh0dXJlIiwiZGVwdGgiLCJwYWRkaW5nIiwibWFzcyIsImNzc0xheWVyUHJvcHMiLCJlbGVtZW50IiwibWF0cml4IiwiY2FtZXJhIiwiZm92Iiwic3R5bGUiLCJvYmplY3RzIiwiZG9tRWxlbWVudCIsImRvY3VtZW50IiwiY2FtZXJhRWxlbWVudCIsImlzSUUiLCJuYXZpZ2F0b3IiLCJfaGVpZ2h0IiwiX3dpZHRoIiwiX3dpZHRoSGFsZiIsIl9oZWlnaHRIYWxmIiwiZWxlbWVudHMiLCJlcHNpbG9uIiwibWF0cml4M2QiLCJnZXRPYmplY3RDU1NNYXRyaXgiLCJjYWNoZWRTdHlsZSIsImdldERpc3RhbmNlVG9TcXVhcmVkIiwicmVuZGVyT2JqZWN0Iiwib2JqZWN0MSIsIm9iamVjdDIiLCJvcmRlciIsInpNYXgiLCJzY2VuZSIsImluZGV4IiwiY2FtZXJhQ1NTTWF0cml4IiwiZ2V0Q2FtZXJhQ1NTTWF0cml4Iiwiek9yZGVyIiwiQ1NTM0RSZW5kZXJlciIsIl9DU1MzRE9iamVjdCIsIl9DU1MzRFNwcml0ZSIsIkNTUzNET2JqZWN0IiwiQ1NTM0RTcHJpdGUiLCJDU1NMYXllciIsImluaXQiLCJkb2MiLCJkZWxheSIsIndpZHRoUHhzIiwiaGVpZ2h0UHhzIiwiY2FsbEludGVybmFsIiwibmFtZSIsImNsZWFySW50ZXJuYWxzIiwic2V0RGF0YSIsImNzcyIsImh0bWwiLCJqcyIsImV2YWwiLCJwZW5kZWRDYWxsIiwiY2xiIiwidGltZXN0YW1wIiwiRGF0ZSIsInNldFRpbWVvdXQiLCJpc0hpZGRlbiIsImhpZGUiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInNob3ciLCJDYWNoZSIsIm1heFNpemUiLCJJbmZpbml0eSIsInNpemVvZiIsImNvdW50U2l6ZW9mIiwiZm9yRWFjaCIsInZhbHVlIiwicmVtb3ZlIiwiZnJlZVNwYWNlIiwiYXJyIiwia2V5IiwicmVjdXJzaW9uU2l6ZW9mIiwic2l6ZSIsImdldFRpbWVzdGFtcCIsImdldCIsInB1dCIsIkNvbnRyb2xsZXIiLCJoYW5kbGVEZWZhdWx0IiwiaWQiLCJkaXNwYXRjaEFzeW5jIiwiRXZlbnREaXNwYXRjaGVyIiwiQ3VzdG9tRXZlbnRDb252ZXJ0ZXIiLCJjdXN0b21UZXN0IiwiZURvYyIsInRlc3QiLCJhZGRDdXN0b20iLCJjdXN0b20iLCJnZXRPYmplY3QiLCJGaW5kZXIiLCJpc0RlbGltZXRyIiwibWVyZ2UiLCJhcyIsInN0cnMiLCJhZGRIaXRzIiwiY2hhcnMiLCJkZWxpbWV0ZXIiLCJsZW5ndGgiLCJhZGRDb250ZXh0IiwiZGVscyIsInByZXZEZWxzIiwiZ2V0SGl0cyIsImdldENvbnRleHRzIiwicGF0dGVybiIsIkRFTElNSVRFUiIsImRlZmF1bHRzIiwiY29udGV4dExlbmd0aCIsImhpdHMiLCJjb250ZXh0cyIsIlBkZiIsImxvYWRlZCIsInRvdGFsIiwicmFuZ2VDaHVua1NpemUiLCJjdXIiLCJvbGQiLCJpc05hTiIsImhhbmRsZXIiLCJnZXRQYWdlVHlwZSIsImdldFBhZ2UiLCJzZXRMb2FkaW5nUHJvZ3Jlc3NDbGIiLCJnZXRQYWdlc051bSIsImdldFBhZ2VTaXplIiwiZ2V0SGFuZGxlciIsIlRocmVlRXZlbnRDb252ZXJ0ZXJGcyIsIm9iamVjdHNUZXN0Iiwib2JqZWN0c0FuZEZhY2VzVGVzdCIsImFkZFRocmVlIiwidGhyZWUiLCJyZW1vdmVUaHJlZSIsImludGVyc2VjdHMiLCJUaHJlZVV0aWxzIiwidmVydGljZXMyVVZzIiwidmVydGljZXMiLCJpbmRlY2VzIiwiY29udmVyQ2xiIiwidmlzIiwiY29tcHV0ZUZhY2VWZXJ0ZXhVdnMiLCJnZW9tZXRyeSIsImZhY2VzIiwidXZzIiwidXZzaSIsImNyZWF0ZU1hcmtlciIsImZpbmRVdlRyaXMiLCJmb3VuZCIsImZpbmRJbnRlcm5hbFZlcnRpY2VzIiwiVGFyZ2V0Iiwib3B0aW9ucyIsInBhcmVudCIsInByb2dyZXNzIiwidyIsInBhZ2VDYWxsYmFjayIsImtXdG9IIiwiY29udGFpbmVycyIsImpDb250YWluZXIiLCJzcmMiLCJwZGYiLCJPIiwic3RhcnQiLCJhcmd1bWVudHMiLCJyZWxhdGl2ZVN0YXJ0IiwiZW5kIiwicmVsYXRpdmVFbmQiLCJmaW5hbCIsImxpc3QiLCJ0aGlzQXJnIiwicHJlZGljYXRlIiwiQXV0b05hdmlnYXRvciIsInVybFBhcmFtIiwibmF2aWdhdGVzIiwiZ2V0UGFyYW1ldGVyQnlOYW1lIiwicmVnZXgiLCJyZXN1bHRzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZ2V0UGFnZU51bWJlciIsIm51bWJlciIsInBhcnNlSW50IiwiQmluZGVyIiwiYmFja1NpemUiLCJiYWNrTSIsInRleHR1cmUiLCJ0cjEiLCJ0cjIiLCJzZXRMZWZ0Iiwic2V0UmlnaHQiLCJqb2luTGVmdENvdmVyIiwiZGlzY29ubmVjdExlZnRDb3ZlciIsImpvaW5SaWdodENvdmVyIiwiZGlzY29ubmVjdFJpZ2h0Q292ZXIiLCJCb29rIiwidmlzdWFsIiwiem9vbSIsInNpbmdsZVBhZ2UiLCJhdXRvUmVzb2x1dGlvbiIsImVuYWJsZSIsImxhc3RQYWdlIiwicXVlcnkiLCJzZXRUZXh0dXJlIiwidXBkYXRlIiwibGFzdE1vdXNlUG9zIiwicGFnZVgiLCJwYWdlWSIsImJveHMiLCJzZXRBdXRvUmVzb2x1dGlvbiIsInNldFpvb20iLCJzZXRRdWVyeSIsImlzUHJvY2Vzc2luZyIsImdldFBhZ2VzIiwic2V0RmxpcFByb2dyZXNzQ2xiIiwic2V0SW5qZWN0b3IiLCJpc0FjdGl2ZVBhZ2UiLCJnZXRCbG9ja0J5UGFnZSIsImJsb2NrIiwiZ2V0QmxvY2tQYWdlcyIsInJhbmdlIiwiZ2V0VG9wUGFnZXMiLCJnZXRQYWdlU3RhdGUiLCJlbmFibGVMb2FkaW5nQW5pbWF0aW9uIiwiZ2V0TGVmdEZsaXBwaW5nIiwiZ2V0UmlnaHRGbGlwcGluZyIsImdldENsb3NlZEJsb2NrQW5nbGUiLCJvcGVuZWRBbmdsZSIsImZsaXBMZWZ0IiwicHJvZ3Jlc3NDbGIiLCJmbGlwUHJvZ3Jlc3NDbGIiLCJib29rIiwiZmxpcFJpZ2h0IiwiY2xlYXJIb3ZlckluZm8iLCJ4U2VnbWVudCIsImNvbXB1dGVUYXJnZXQiLCJzZWciLCJvblBpY2tDYWxsYmFjayIsIm9uRHJhZ0NhbGxiYWNrIiwib25SZWxlYXNlQ2FsbGJhY2siLCJnZXRGbGlwcGluZyIsImZsaXAiLCJlbmFibGVNb3VzZSIsImNvcm5lckNhbGxiYWNrIiwiaG92ZXJBbmdsZSIsImhvdmVyIiwicG9zc2libGUiLCJzaGVldEJsb2NrcyIsIm5leHRCbG9jayIsInBlbmRpbmdzIiwiYWRkU2hlZXRCbG9jayIsInN1YnNjcmliZVNoZWV0QmxvY2siLCJldmVudENvbnZlcnRlciIsInRhcmdldCIsInJlbW92ZVNoZWV0QmxvY2siLCJyZW1vdmVTaGVldEJsb2NrcyIsImJsb2NrcyIsIm1hdGVyaWFsIiwic2V0UGFnZVRleHR1cmUiLCJzZXRMZWZ0Q292ZXJUZXh0dXJlIiwic2V0UmlnaHRDb3ZlclRleHR1cmUiLCJmaW5pc2hBbmltYXRpb25DbGIiLCJjYWxjQmxvY2tGb3JjZSIsInZlbG9jaXR5IiwiY29ybmVySGVpZ2h0IiwiY2FsY0Jsb2NrQ29ybmVyRm9yY2UiLCJub3RpZnlCZWZvcmVBbmltYXRpb24iLCJub3RpZnlBZnRlckFuaW1hdGlvbiIsImNvbm5lY3RQaHlzaWNzIiwiY292ZXJIZWlnaHQiLCJzaW11bGF0ZUNsYiIsInJlbW92ZUNsYiIsInNwbGl0U2hlZXRCbG9jayIsImxlZnRTaXplIiwibmV3QmxvY2siLCJtZXJnZVNoZWV0QmxvY2tzIiwiZmlyc3RCbG9jayIsImxhc3RCbG9jayIsInNldFNoZWV0QmxvY2tzIiwiY3JlYXRlU2lkZVRleHR1cmUiLCJqQyIsInByZXBhcmVQcm9wcyIsIm1lcmdlUHJvcHMiLCJzZWNvbmQiLCJzaWRlVGV4dHVyZSIsIkJvb2tDb250cm9sbGVyIiwic21hcnRQYW4iLCJzdGF0cyIsImxpZ2h0aW5nIiwiYWN0aXZlU2lkZSIsIm9uU2NyZWVuTW9kZUNoYW5nZWQiLCJvblVwZGF0ZVZpZXciLCJpbml0TG9hZGluZ0FuaW1hdGlvbiIsInZpc2libGUiLCJlbmFibGVOYXZpZ2F0aW9uIiwic2V0VG9jQ3RybCIsInRvY0N0cmwiLCJzZXRQcmludGVyIiwicHJpbnRlciIsInNldFNvdW5kcyIsInNvdW5kcyIsImNhblpvb21JbiIsImNhblpvb21PdXQiLCJjYW5EZWZhdWx0Wm9vbSIsInNldEJvb2tab29tIiwiY21kWm9vbUluIiwiY21kWm9vbU91dCIsImNtZERlZmF1bHRab29tIiwiY21kVG9jIiwiY21kRmFzdEJhY2t3YXJkIiwiY21kQmFja3dhcmQiLCJjbWRGb3J3YXJkIiwiY21kRmFzdEZvcndhcmQiLCJjbWRTYXZlIiwiY21kUHJpbnQiLCJjbWRGdWxsU2NyZWVuIiwiY21kU21hcnRQYW4iLCJjbWRTaW5nbGVQYWdlIiwiY21kU291bmRzIiwiY21kU3RhdHMiLCJjbWRMaWdodGluZ1VwIiwiY21kTGlnaHRpbmdEb3duIiwiZ29Ub1BhZ2UiLCJwYWdlTnVtIiwiY3VycmVudCIsImZsaXBzIiwiY292cyIsImN2Iiwic2V0Q2xiIiwiZmwiLCJ0aW1lIiwic3RhcnRGbGlwIiwiZmxpcFJlcyIsImVuZEZsaXAiLCJnZXRQYWdlRm9yR1VJIiwiaW5wUGFnZSIsInVwZGF0ZVZpZXdJZlN0YXRlIiwidXBkYXRlVmlld1N0YXRlIiwiYWN0aXZlIiwiZW5hYmxlZCIsImZsaXBwZXJzRW5hYmxlIiwibmF2aWdhdGlvbkNvbnRyb2xzIiwidXBkYXRlVmlldyIsImdldEFjdGlvbnMiLCJpc1N3aXBwaW5nIiwiY21kcyIsImFjdGl2YXRlIiwiY21kUGFuTGVmdCIsImNtZFBhblJpZ2h0IiwiY21kUGFuVXAiLCJzcGVlZCIsImNtZFBhbkRvd24iLCJtb3VzZUNtZFJvdGF0ZSIsInJvdGF0ZSIsIm1vdXNlQ21kRHJhZ1pvb20iLCJtb3VzZUNtZFBhbiIsInBhbiIsIm1vdXNlQ21kV2hlZWxab29tIiwidG91Y2hDbWRSb3RhdGUiLCJ0b3VjaENtZFpvb20iLCJ0b3VjaENtZFBhbiIsInRvdWNoQ21kU3dpcGUiLCJ0b3VjaCIsImhhbmRsZWQiLCJ4MCIsInkwIiwid2lkU2V0dGluZ3MiLCJiaW5kQWN0aW9ucyIsImFjdGlvbiIsImZsYWdzIiwic2V0QWN0aW9ucyIsImFjdGlvbnMiLCJCb29rUHJpbnRlciIsImNhbmNlbCIsInByaW50IiwicHJpbnRXbmQiLCJjYWxsTWFudWFsbHkiLCJwcmludERvYyIsImNvbnRlbnQiLCJyZW5kZXJDb250ZW50IiwiaGVhZCIsImJvZHkiLCJ3cmFwIiwicmVuZGVySHRtbCIsImxpbmtzIiwibGluayIsImhyZWYiLCJyZWplY3QiLCJyZW5kZXJIZWFkIiwidXNlSUZyYW1lIiwiaXNDaHJvbWl1bSIsIndpbk5hdiIsInZlbmRvck5hbWUiLCJpc0lFZWRnZSIsImlzSU9TQ2hyb21lIiwiZGVmYXVsdFN0eWxlU2hlZXQiLCJCb29rVmlldyIsImluaXRWaWV3IiwiZ2V0SGFuZGxlcnMiLCJoYW5kbGVycyIsIm9uSXRlbVN0YXRlQ2hhbmdlZCIsImdldFZpZXciLCJnZXRCb29rbWFya3NWaWV3IiwiZ2V0VGh1bWJuYWlsc1ZpZXciLCJnZXRTZWFyY2hWaWV3IiwiZ2V0Rm9ybXMiLCJnZXRMaW5rcyIsImdldFdpZGdldHMiLCJnZXRJbnB1dHMiLCJnZXRUZXh0cyIsImdldFRlbXBsYXRlIiwic3R5bGVzIiwicmVsIiwic2NyaXB0IiwiUEFHRV9IQU5ETEVSX0RFTEFZIiwiQ2xiQm9va1Byb3BzQnVpbGRlciIsIkNvdmVyIiwiQ3NzTGF5ZXJzTWFuYWdlciIsImdldEFjdGl2ZXMiLCJsYXllcnMiLCJzbCIsIndhaXQiLCJQYWdlTWFuYWdlciIsImRpc3BhdGNoRXZlbnQiLCJjcmVhdGVMb2FkaW5nVGV4dHVyZSIsInNwcml0ZVRpbGVzIiwiYW5pbWF0aW9uIiwiYW5pbWF0b3IiLCJpc0NvdmVyIiwiaXNNb2JpbGUiLCJsb2FkaW5nIiwicmVtb3ZlRnJvbUxvYWRpbmdzIiwicmVtb3ZlRnJvbVJlbmRlclF1ZXVlIiwicmVmcmVzaFBhZ2VRdWVyeSIsInJlZnJlc2hab29tIiwiZXMiLCJnZXRMYXllcnMiLCJhcmdzIiwicmVzb2x2ZVBlbmRpbmdzIiwicnRsUGFnZU4iLCJsb2FkIiwicGkiLCJ3cmFwcGVyIiwibG9ja2VkIiwiaXNBY3RpdmUiLCJpc1RvcCIsImlzU2luZ2xlUGFnZSIsImNhbGNSZXNvbHV0aW9uIiwicHVzaEluUmVuZGVyUXVldWUiLCJ1cGRhdGVSZW5kZXJRdWV1ZSIsInRvcCIsInR1cm5PbkV2ZW50cyIsInR1cm5PZmZFdmVudHMiLCJtb3VzZXVwIiwibW91c2VvdXQiLCJlbnQiLCJ0cmFuc2ZlckV2ZW50VG9UZXh0dXJlIiwidG9PYmplY3QiLCJ1diIsImxvYWRQcmVkaWN0ZWRQYWdlcyIsImFkZFBhZ2VSZXF1ZXN0Iiwic2V0TWF0ZXJpYWwiLCJvYiIsInNldHVwTWF0ZXJpYWwiLCJnZXRPckxvYWRUZXh0dXJlT2JqZWN0IiwiUGRmQm9va1Byb3BzQnVpbGRlciIsImludGVyYWN0aXZlIiwiUGRmTGlua3NIYW5kbGVyIiwic2V0SGFuZGxlciIsImRlZmF1bHRIYW5kbGVyIiwiZGVzdGluYXRpb24iLCJjYWxsSGFuZGxlcnMiLCJoYW5kbGVFdmVudCIsImFubm8iLCJkZXN0UHJvbWlzZSIsImRlc3QiLCJTZWFyY2hFbmdpbmUiLCJwcm9jZXNzIiwic3RhbXAiLCJmaW5kIiwibmV4dCIsIml0ZW0iLCJTaGVldENzc0xheWVyIiwiU2hlZXRQaHlzaWNzIiwidGFyZ2V0Rm9yY2VDbGIiLCJjaCIsImhvdmVyQ29ybmVyRm9yY2VDbGIiLCJnZXRUYXJnZXRGb3JjZUNsYiIsInRhcmdldEFuZ2xlIiwiZyIsInRsIiwiZHJhZ0ZvcmNlQ2xiIiwiZHJhZ0Nvcm5lckZvcmNlQ2xiIiwiZ2V0RHJhZ0Nvcm5lckZvcmNlQ2xiIiwiZnBzIiwic3RhcnREdCIsIm1hcmdpbiIsImluZk0iLCJhdHRlbXB0cyIsIm1heEl0ZXJhdGlvbnMiLCJhZGRPYmplY3QiLCJmb3JjZUNsYiIsImNvcm5lckZvcmNlQ2xiIiwibm8iLCJjZiIsImZsYnQiLCJnZXRQYXJhbWV0ck1hcCIsInNldFBhcmFtZXRyIiwiZ2V0UGFyYW1ldHIiLCJzaW11bGF0ZSIsIlQiLCJhdHRlbXB0IiwiaXQiLCJub3MiLCJjaSIsInNjb3MiLCJncyIsImkwIiwicmVtb3ZlU3RhdGljcyIsImZpbmRBbmRTb2x2ZUNvcm5lckNvbGxpc2lvbnMiLCJvcyIsImFsIiwiZENoIiwiZHYiLCJzb2x2ZUNvbGxpc2lvbiIsIm1tIiwiYXYiLCJidiIsImZpbmRDb2xsaXNpb25zIiwiYWxsIiwiaXNDb2xsaXNpb24iLCJpbnRlZ3JhdGUiLCJTb3VuZHNFbnZpcm9tZW50IiwidGVtcGxhdGUiLCJzZXRFbmFibGVkIiwidG9nbGUiLCJzdWJzY3JpYmVGbGlwcyIsImVtaXR0ZXIiLCJUb2NDb250cm9sbGVyIiwic2V0VGh1bWJuYWlscyIsInRodW1ibmFpbHMiLCJzZXRTZWFyY2giLCJzZWFyY2giLCJzZXRCb29rbWFya3MiLCJib29rbWFya3MiLCJjbWRCb29rbWFya3MiLCJjbWRUaHVtYm5haWxzIiwiY21kU2VhcmNoIiwiY21kQ2xvc2VUb2MiLCJuYXZpZ2F0ZVRodW1ibmFpbHMiLCJuYXZpZ2F0ZVNlYXJjaCIsIm5hdmlnYXRlQm9va21hcmtzIiwicmVzWCIsInJlc1kiLCJyZXNaIiwiZnJvbnRHZW9tZXRyeSIsImJhY2tHZW9tZXRyeSIsImxlZnRHZW9tZXRyeSIsInJpZ2h0R2VvbWV0cnkiLCJ0b3BHZW9tZXRyeSIsImJvdHRvbUdlb21ldHJ5IiwiYWRkRmFjZXMiLCJtYXBWZXJ0aWNlcyIsImVxIiwiZHN0IiwiZnJvbnRNYXAiLCJiYWNrTWFwIiwibGVmdE1hcCIsInJpZ2h0TWFwIiwibW91c2VCdXR0b25zIiwiTGVmdCIsIk1pZGRsZSIsIlJpZ2h0Iiwic2tpbiIsImRlZmF1bHQiLCJtaW4iLCJtYXgiLCJsZXZlbHMiLCJsb2FkaW5nQW5pbWF0aW9uIiwiY29lZmZpY2llbnQiLCJjb2RlIiwiYWN0aXZlRm9yTW9iaWxlIiwiQmxhbmtJbWFnZSIsIkJvb2ttYXJrcyIsImdldFRpdGxlIiwiZ2V0SXRlbXMiLCJsaSIsImNvbnRhaW5lciIsImNtZCIsIm5vZGUiLCJub2RlcyIsImV4cGFuZCIsIm1pbmltaXplIiwicmVuZGVyTm9kZSIsInJlbmRlck5vZGVzIiwibWFwTm9kZXMiLCJpdGVtcyIsImxldmVsIiwidGl0bGUiLCJtaW5pbWl6ZWQiLCJjaGlsZHJlbiIsIkRldGVjdG9yIiwiZ2V0V2ViR0xFcnJvck1lc3NhZ2UiLCJhZGRHZXRXZWJHTE1lc3NhZ2UiLCJwYXJhbWV0ZXJzIiwiY2FudmFzIiwiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIiwid2ViZ2wiLCJ3b3JrZXJzIiwiV29ya2VyIiwiZmlsZWFwaSIsIkJsb2IiLCJEb2NNb3VzZVNpbXVsYXRvciIsImJFbGVtZW50IiwiakZyYW1lIiwidGVybXMiLCJyZXBsYWNlIiwiSE9WRVIiLCJBQ1RJVkUiLCJzcyIsImNzc1RleHQiLCJ0ZXJtIiwiY29udmVydENvb3JkcyIsImpFbGVtZW50IiwidHJpZ2dlckV2ZW50IiwiYWR2YW5jZWRQcm9wcyIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJlbnRlckVsZW1lbnQiLCJsZWF2ZUVsZW1lbnQiLCJhY3RpdmF0ZUVsZW1lbnQiLCJkZWFjdGl2YXRlRWxlbWVudCIsImFkZERvY0NoYW5nZUNsYiIsImVsZW1lbnRGcm9tUG9pbnQiLCJjaGlsZCIsImdldEVsZW1lbnQiLCJvZmYwIiwidHJpZ2dlciIsImxlYXZlZCIsInJlbGF0ZWRUYXJnZXQiLCJnZXREZWZhdWx0VW5kZWZpbmVkUHJvcGVydGllcyIsImdldERlZmF1bHRSZXNlbmRQcm9wZXJ0aWVzIiwiRG9tMkltYWdlIiwic2VsZiIsInV0aWwiLCJpbmxpbmVyIiwiZm9udEZhY2VzIiwiaW1hZ2VzIiwiY2xvbmVOb2RlIiwibWFrZVN2Z0RhdGFVcmkiLCJjbG9uZSIsImRyYXciLCJuZXdDYW52YXMiLCJmaWx0ZXIiLCJjbG9uZUNoaWxkcmVuIiwicHJvY2Vzc0Nsb25lIiwib3JpZ2luYWwiLCJjb3B5U3R5bGUiLCJzb3VyY2UiLCJjb3B5UHJvcGVydGllcyIsImNsb25lUHNldWRvRWxlbWVudCIsImNsYXNzTmFtZSIsInN0eWxlRWxlbWVudCIsImZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZSIsInNlbGVjdG9yIiwiZm9ybWF0Q3NzVGV4dCIsImZvcm1hdENzc1Byb3BlcnRpZXMiLCJzdHlsZU5vZGUiLCJlc2NhcGUiLCJwYXJzZUV4dGVuc2lvbiIsIm1pbWVUeXBlIiwiZGF0YUFzVXJsIiwiaXNEYXRhVXJsIiwiY2FudmFzVG9CbG9iIiwicmVzb2x2ZVVybCIsImdldEFuZEVuY29kZSIsInVpZCIsImFzQXJyYXkiLCJlc2NhcGVYaHRtbCIsIm1ha2VJbWFnZSIsImlzRWxlbWVudCIsImlzQ2FudmFzIiwiaXNUZXh0QXJlYSIsImlzSW5wdXQiLCJpc1NWRyIsImlzU1ZHUmVjdCIsImlzSW1hZ2UiLCJXT0ZGIiwiSlBFRyIsIm1hdGNoIiwiZXh0ZW5zaW9uIiwibWltZXMiLCJiaW5hcnlTdHJpbmciLCJiaW5hcnlBcnJheSIsInRvQmxvYiIsIlRJTUVPVVQiLCJyZXF1ZXN0IiwiZmFpbCIsImVuY29kZXIiLCJzdHJpbmciLCJhcnJheSIsImFycmF5TGlrZSIsImxlZnRCb3JkZXIiLCJweCIsInJpZ2h0Qm9yZGVyIiwidG9wQm9yZGVyIiwiYm90dG9tQm9yZGVyIiwicGFyc2VGbG9hdCIsIlVSTF9SRUdFWCIsImlubGluZUFsbCIsInNob3VsZFByb2Nlc3MiLCJpbXBsIiwicmVhZFVybHMiLCJpbmxpbmUiLCJyZXN1bHQiLCJiYXNlVXJsIiwidXJsQXNSZWdleCIsInVybHMiLCJyZXNvbHZlQWxsIiwicmVhZEFsbCIsIndlYkZvbnQiLCJjc3NTdHJpbmdzIiwicnVsZXMiLCJydWxlIiwiQ1NTUnVsZSIsImNzc1J1bGVzIiwic3R5bGVTaGVldHMiLCJ3ZWJGb250UnVsZSIsIm5ld0ltYWdlIiwiYmFja2dyb3VuZCIsIkRyYWciLCJvbk1vdXNlTW92ZSIsIm9uTW91c2VEb3duIiwib25Nb3VzZVVwIiwic2V0Q29vcmRzRnJvbUV2ZW50Iiwic2VsZWN0ZWQiLCJFdmVudHNUb0FjdGlvbnMiLCJnZXRFdmVudEZsYWdzIiwiZ2V0UG9zaXRpb24iLCJ0b3VjaGVzIiwiY29udGV4dE1lbnUiLCJtb3VzZURvd24iLCJtb3VzZU1vdmUiLCJtb3VzZVVwIiwibW91c2VXaGVlbCIsIm1vdXNlTW92ZURvYyIsIm1vdXNlVXBEb2MiLCJjbGljayIsImRibGNsaWNrIiwidG91Y2hTdGFydCIsInRvdWNoTW92ZSIsInRvdWNoRW5kIiwia2V5RG93biIsImtleVByZXNzIiwia2V5VXAiLCJhZGRBY3Rpb24iLCJmaXJlQWN0aW9ucyIsImNsaWNrcyIsInRvdWNoUGljayIsInBvcyIsIm1vZEtleXMiLCJDdHJsIiwiU2hpZnQiLCJBbHQiLCJGdWxsU2NyZWVuIiwiYXZhaWxhYmxlIiwiYWN0aXZhdGVkIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfaGFzV2Via2l0RnVsbFNjcmVlbiIsIndlYmtpdENhbmNlbEZ1bGxTY3JlZW4iLCJfaGFzTW96RnVsbFNjcmVlbiIsIm1vekNhbmNlbEZ1bGxTY3JlZW4iLCJfaGFzTXNGdWxsc2NyZWVuIiwibXNSZXF1ZXN0RnVsbHNjcmVlbiIsIkludGVyYWN0aXZlSW1hZ2UiLCJyZW5kZXIiLCJ0aW1lb3V0IiwiTG9hZGluZ0FuaW1hdGlvbiIsImNhbGNUaW1lVG8iLCJkYSIsIl9hIiwiX3IiLCJjeCIsImN5IiwibngiLCJueSIsImdldEltYWdlIiwiY3JlYXRlU3ByaXRlIiwidXBkYXRlSW50ZXJ2YWwiLCJMb2FkaW5nQ29udHJvbGxlciIsInNob3dQcm9ncmVzcyIsImxvYWRpbmdNc2ciLCJkZWZhdWx0TG9hZGluZ01zZyIsInNldFByb2dyZXNzIiwiTW91c2VFdmVudENvbnZlcnRlciIsIk9iamVjdDNEV2F0Y2hlciIsInRlc3RTY2FsZSIsInZ4IiwidnkiLCJib3giLCJtb3ZlUGFuIiwidlRvQ2FtZXJhIiwiY29tcHV0ZUNsaWVudEJvdW5kQm94IiwieHMiLCJ6cyIsInNldE9iamVjdCIsImJvdW5kQm94Q2xiIiwiY29tcHV0ZUNvcnIiLCJjb3JyIiwiZ2V0U2NhbGUiLCJLeCIsIkt5IiwiY2VudGVyVmlldyIsIlkiLCJ0ZiIsInZkIiwiT3JiaXQiLCJzcGhlcmljYWwiLCJzY29wZSIsInpvb21TcGVlZCIsIl9zcGVlZCIsImRvbGx5SW4iLCJkb2xseU91dCIsInF1YXQiLCJxdWF0SW52ZXJzZSIsImxhc3RQb3NpdGlvbiIsImxhc3RRdWF0ZXJuaW9uIiwicG9zaXRpb24iLCJyb3RhdGVMZWZ0Iiwic3BoZXJpY2FsRGVsdGEiLCJwYW5PZmZzZXQiLCJ6b29tQ2hhbmdlZCIsImNoYW5nZUV2ZW50IiwiRVBTIiwicGFuTGVmdCIsInBhblVwIiwidGFyZ2V0RGlzdGFuY2UiLCJkZWx0YVgiLCJkZWx0YVkiLCJyb3RhdGVVcCIsImV2ZW50Iiwib2Zmc2V0RG9sbHkiLCJ3aGVlbERvbGx5IiwiUGRmSW1hZ2UiLCJ0cmFuc2Zvcm0iLCJyZWN0U2l6ZSIsImNyZWF0ZVBvbHkiLCJzZXRBbm5vdGF0aW9ucyIsImFubm9zIiwidGFyZ2V0cyIsInJlY3QiLCJhUG9zIiwiYVN6Iiwic2V0SGl0cyIsInRleHRDb250ZW50IiwicmVuZGVySGl0cyIsInRlc3RTeiIsInRleHREaXYiLCJiYXNlT2Zmc2V0IiwiaGl0IiwiZm9udEhlaWdodCIsImZvbnRBc2NlbnQiLCJ0ZXN0U3BhbiIsIml3aWR0aCIsInJlbGF0aXZlT2Zmc2V0IiwiYW5ub0NsYiIsImFubm90YXRpb24iLCJjYWxjVmlld3BvcnQiLCJjYW52YXNDb250ZXh0Iiwidmlld3BvcnQiLCJTZWFyY2giLCJuYXZpZ2F0ZSIsImRvUXVlcnkiLCJxdWVyeVN0YW1wIiwic2V0UmVzdWx0cyIsImh0bWxzIiwiU3RhdGljSW1hZ2UiLCJUZXh0dXJlQW5pbWF0b3IiLCJtaWxsaVNlYyIsImN1cnJlbnRDb2x1bW4iLCJjdXJyZW50Um93IiwiaW1nIiwiVGhyZWVNb3VzZUV2ZW50Q29udmVydGVyIiwidmlzdWFsV29ybGQiLCJUaHJlZVRvdWNoRXZlbnRDb252ZXJ0ZXIiLCJUaHVtYm5haWxzIiwiaGVhZGluZyIsInRodW1ibmFpbCIsImdldEFjdGl2ZSIsInNldEltYWdlIiwiVG91Y2hDb252ZXJ0ZXIiLCJWaWV3IiwiY2xhc3NQcm9wZXJ0eSIsImN0cmwiLCJhdHRyaWJ1dGVQcm9wZXJ0eSIsImF0dHJpYnV0ZU5hbWUiLCJoYW5kbGVMaW5rRXZlbnQiLCJoYW5kbGVJbnB1dEV2ZW50IiwiaGFuZGxlRm9ybUV2ZW50IiwiY2FsbExhdGVyIiwibXMiLCJwZW5kaW5nIiwibG9hZEZpbGVzIiwiZmlsZXMiLCJ0YXNrcyIsInVybFJlc29sdmVyIiwicGFydHMiLCJwYXJ0Iiwib2JqVG9BdHRyc1N0ciIsImNoZWNrSWZyYW1lU2l6ZSIsIm9uUmVzaXplIiwidHJhbnNsYXRlIiwiZmlyZUxpbmtzT25Mb2FkRXZlbnQiLCJqTGluayIsInRleHRDc3MiLCJzZXR0ZXIiLCJnZXRDb250YWluZXIiLCJnZXRQYXJlbnRDb250YWluZXIiLCJhZGRIYW5kbGVyIiwic2V0Q29udHJvbFN0YXRlIiwic3RhdGVIYW5kbGVycyIsInN0Iiwic2V0TGlua0NvbnRyb2xTdGF0ZSIsInNldFdpZGdldENvbnRyb2xTdGF0ZSIsInNldElucHV0Q29udHJvbFN0YXRlIiwic2V0VGV4dENvbnRyb2xTdGF0ZSIsInNldFN0YXRlIiwibGlua1N0YXRlSGFuZGxlcnMiLCJ3aWRnZXRTdGF0ZUhhbmRsZXJzIiwiaW5wdXRTdGF0ZUhhbmRsZXJzIiwidGV4dFN0YXRlSGFuZGxlcnMiLCJWaXN1YWxXb3JsZCIsInVzZUhlbHBlcnMiLCJhbHBoYSIsImFudGlhbGlhcyIsImNzc1NjZW5lIiwidG1wVmVjdG9yIiwib25XaW5kb3dSZXNpemUiLCJhbmltYXRlIiwiZmlsdGVyRGF0YSIsInR5cGVzIiwiY29udGFpbnMiLCJzZXRFeHRyYUxpZ2h0aW5nIiwiZ2V0T3JiaXQiLCJzZXRDb250cm9sc1N0YXRlIiwiZ2V0Q29udHJvbHNTdGF0ZSIsInVwZGF0ZUNhbWVyYSIsInVwZGF0ZVJlbmRlcmVyIiwicmVuZGVyZXIiLCJhZGRDc3NPYmplY3QiLCJyZW1vdmVDc3NPYmplY3QiLCJyZW1vdmVPYmplY3QiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJhZGRSZW5kZXJDYWxsYmFjayIsInJlbW92ZVJlbmRlckNhbGxiYWNrIiwiZGVsdGFUaW1lIiwicHJvY2Vzc0dlb21ldHJ5IiwiYnVmR2VvbWV0cnkiLCJtZXNoIiwiaW5kZXhlZEJ1ZmZlckdlb20iLCJjcmVhdGVJbmRleGVkQnVmZmVyR2VvbWV0cnlGcm9tR2VvbWV0cnkiLCJudW1WZXJ0aWNlcyIsIm51bUZhY2VzIiwiYnVmZmVyR2VvbSIsImluZGljZXMiLCJpMyIsImlzRXF1YWwiLCJ4MSIsInoxIiwieDIiLCJ6MiIsImRlbHRhIiwibWFwSW5kaWNlcyIsImlkeFZlcnRpY2VzIiwibnVtSWR4VmVydGljZXMiLCJhc3NvY2lhdGlvbiIsImozIiwib25lTm9kZVBvc2l0aW9uQ2FsbGJhY2siLCJtdWx0eU5vZGVQb3NpdGlvbkNhbGxiYWNrIiwidm9sdW1lUG9zaXRpb25zIiwidm9sdW1lTm9ybWFscyIsImFzc29jVmVydGV4IiwiaW5kZXhWZXJ0ZXgiLCJtdWx0eU5vZGVQb3NpdGlvblBvc3RDYWxsYmFjayIsInBhdGhQb3NpdGlvbkNhbGxiYWNrIiwicG9zaXRpb25zIiwicGF0aFBvc2l0aW9uUG9zdENhbGxiYWNrIiwiV2lkZ2V0Q29udHJvbGxlciIsImZpcmVDaGFuZ2UiLCJDaXJjbGVUYXJnZXQiLCJ0ZXN0SW50ZXJzZWN0aW9uIiwiUG9seVRhcmdldCIsImpRdWVyeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNoRUE7O0FBQ0EsbUJBQUFBLENBQVEsQ0FBUjs7Ozs7Ozs7Ozs7Ozs7O0FDREEsVSxDQUFBO0FBQ0E7O0FBRUEsVSxDQUFBO0FBQ0E7O0FBRUEsWUFGQSxDQUVBO0FBQ0E7QUFDQTs7QUFFQSxZQU5BLENBTUE7QUFDQTtBQUNBLHlCQURBO0FBRUEsc0JBRkE7QUFHQTtBQUNBLGNBSkE7O0FBTUEsWUFiQSxDQWFBO0FBQ0E7O0FBRUEsWUFoQkEsQ0FnQkE7QUFDQTs7QUFFQSxZQW5CQSxDQW1CQTtBQUNBO0FBQ0E7QUFBQTs7O0FBR0EsVSxDQUFBO0FBQ0E7O0FBRUEsVSxDQUFBO0FBQ0E7O0FBRUEsVSxDQUFBO0FBQ0E7QUFBMkM7QUFBYyxHQUF6RDs7QUFFQSxVLENBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FEQTtBQUVBLGdDQUZBO0FBR0E7QUFDQSxnQkFKQTtB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VyxHQUFoQlAsWTtRQUNVUSxLLEdBQVZQLE07UUFDVVUsSyxHQUFWUCxNIiwiZmlsZSI6Ii4vZGlzdC9mbGlwLWJvb2suanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGU5ZWYwYzU3ZDRjOThiOTg4MTg1IiwiaW1wb3J0IHskLCBodG1sMmNhbnZhcywgVEhSRUUsIFBERkpTfSBmcm9tICcuL3NyYy9saWJzJztcclxucmVxdWlyZSgnLi9zcmMvJysoRU5WSVJPTUVOVC5kZWJ1Zz8gJzNkZmxpcGJvb2suanMnOiAnM2RmbGlwYm9vay5taW4uanMnKSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCAkO1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9pbmRleC5qcyIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDcyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA3MjRlNThkZjU4YzY1YzQ4MDhiNFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi93ZWJwYWNrL2Jvb3RzdHJhcCA3MjRlNThkZjU4YzY1YzQ4MDhiNCIsImNvbnN0IF8kID0gR0xPQkFMX0xJQlMualF1ZXJ5PyB3aW5kb3cualF1ZXJ5OiByZXF1aXJlKCdqcXVlcnknKSxcclxuICAgICAgX2h0bWwyY2FudmFzID0gR0xPQkFMX0xJQlMuaHRtbDJjYW52YXM/IHdpbmRvdy5odG1sMmNhbnZhczogcmVxdWlyZSgnaHRtbDJjYW52YXMnKSxcclxuICAgICAgX1RIUkVFID0gR0xPQkFMX0xJQlMuVEhSRUU/IHdpbmRvdy5USFJFRTogcmVxdWlyZSgndGhyZWUnKSxcclxuICAgICAgX1JlYWN0ID0gR0xPQkFMX0xJQlMuUmVhY3Q/IHdpbmRvdy5SZWFjdDogcmVxdWlyZSgncmVhY3QnKSxcclxuICAgICAgX1JlYWN0RE9NID0gR0xPQkFMX0xJQlMuUmVhY3Q/IHdpbmRvdy5SZWFjdERPTTogcmVxdWlyZSgncmVhY3QtZG9tJyksXHJcbiAgICAgIF9QREZKUyA9IEdMT0JBTF9MSUJTLlBERkpTPyB3aW5kb3cuUERGSlM6IHJlcXVpcmUoJ3BkZmpzJyksXHJcbiAgICAgIF90ciA9IChzKT0+ICh3aW5kb3cuaWJlcmV6YW5za3kgfHwge30pLnRyICYmIHdpbmRvdy5pYmVyZXphbnNreS50cihzKSB8fCBzO1xyXG5cclxuZXhwb3J0IHtcclxuICBfJCBhcyAkLFxyXG4gIF9odG1sMmNhbnZhcyBhcyBodG1sMmNhbnZhcyxcclxuICBfVEhSRUUgYXMgVEhSRUUsXHJcbiAgX1JlYWN0IGFzIFJlYWN0LFxyXG4gIF9SZWFjdERPTSBhcyBSZWFjdERPTSxcclxuICBfUERGSlMgYXMgUERGSlMsXHJcbiAgX3RyIGFzIHRyXHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9saWJzLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2xpYnMuanMiLCJjb25zdCBfJCA9IEdMT0JBTF9MSUJTLmpRdWVyeT8gd2luZG93LmpRdWVyeTogcmVxdWlyZSgnanF1ZXJ5JyksXHJcbiAgICAgIF9odG1sMmNhbnZhcyA9IEdMT0JBTF9MSUJTLmh0bWwyY2FudmFzPyB3aW5kb3cuaHRtbDJjYW52YXM6IHJlcXVpcmUoJ2h0bWwyY2FudmFzJyksXHJcbiAgICAgIF9USFJFRSA9IEdMT0JBTF9MSUJTLlRIUkVFPyB3aW5kb3cuVEhSRUU6IHJlcXVpcmUoJ3RocmVlJyksXHJcbiAgICAgIF9QREZKUyA9IEdMT0JBTF9MSUJTLlBERkpTPyB3aW5kb3cuUERGSlM6IHJlcXVpcmUoJ3BkZmpzJyksXHJcbiAgICAgIF90ciA9IChzKT0+ICh3aW5kb3cuaWJlcmV6YW5za3kgfHwge30pLnRyICYmIHdpbmRvdy5pYmVyZXphbnNreS50cihzKSB8fCBzO1xyXG5cclxuaWYod2luZG93LkZCM0RfTE9DQUxFKSB7XHJcbiAgd2luZG93LmliZXJlemFuc2t5ID0ge1xyXG4gICAgLi4ud2luZG93LmliZXJlemFuc2t5LFxyXG4gICAgdHI6IChzKT0+IChGQjNEX0xPQ0FMRS5kaWN0aW9uYXJ5IHx8IHt9KVtzXSB8fCBzXHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IHtcclxuICBfJCBhcyAkLFxyXG4gIF9odG1sMmNhbnZhcyBhcyBodG1sMmNhbnZhcyxcclxuICBfVEhSRUUgYXMgVEhSRUUsXHJcbiAgX1BERkpTIGFzIFBERkpTLFxyXG4gIF90ciBhcyB0clxyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9saWJzLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvbGlicy5qcyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNYXRoVXRpbHMge1xyXG4gIHN0YXRpYyBzdW0gPSBbQmFzZU1hdGhVdGlscy5zdW0xLCBCYXNlTWF0aFV0aWxzLnN1bTIsIEJhc2VNYXRoVXRpbHMuc3VtMywgQmFzZU1hdGhVdGlscy5zdW00XTtcclxuICBzdGF0aWMgZXBzID0gMWUtNDtcclxuXHJcbiAgc3RhdGljIHN1bTEoa2EsYSxrYixiKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBrYSphWzBdK2tiKmJbMF1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc3VtMihrYSxhLGtiLGIpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIGthKmFbMF0ra2IqYlswXSxcclxuICAgICAga2EqYVsxXStrYipiWzFdXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHN1bTMoa2EsYSxrYixiKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBrYSphWzBdK2tiKmJbMF0sXHJcbiAgICAgIGthKmFbMV0ra2IqYlsxXSxcclxuICAgICAga2EqYVsyXStrYipiWzJdXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHN1bTQoa2EsYSxrYixiKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBrYSphWzBdK2tiKmJbMF0sXHJcbiAgICAgIGthKmFbMV0ra2IqYlsxXSxcclxuICAgICAga2EqYVsyXStrYipiWzJdLFxyXG4gICAgICBrYSphWzNdK2tiKmJbM11cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcms0KGR5LCB0LCBkdCwgeSwgc3VtPUJhc2VNYXRoVXRpbHMuc3VtW3kubGVuZ3RoLTFdKSB7XHJcbiAgICBjb25zdCBrMT1keSh0LHkpLFxyXG4gICAgICAgICAgazI9ZHkodCtkdC8yLHN1bSgxLHksZHQvMixrMSkpLFxyXG4gICAgICAgICAgazM9ZHkodCtkdC8yLHN1bSgxLHksZHQvMixrMikpLFxyXG4gICAgICAgICAgazQ9ZHkodCtkdCxzdW0oMSx5LGR0LGszKSk7XHJcbiAgICByZXR1cm4gc3VtKDEseSxkdC82LHN1bSgxLHN1bSgxLGsxLDIsazIpLDEsc3VtKDIsazMsMSxrNCkpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBleHRyYXBvbGF0ZUxpbmVhcih4LHkseGkpIHtcclxuICAgIHJldHVybiB5WzBdKyh5WzFdLXlbMF0pLyh4WzFdLXhbMF0pKih4aS14WzBdKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpbnRlcnBvbGF0ZUxpbmVhcih4LHkseGkpIHtcclxuICAgIGxldCB5aTtcclxuICAgIGlmKHhbMF0+eFsxXSkge1xyXG4gICAgICB4PXgucmV2ZXJzZSgpO1xyXG4gICAgICB5PXkucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG4gICAgaWYoeGk8eFswXSkge1xyXG4gICAgICB5aT15WzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih4aT54WzFdKSB7XHJcbiAgICAgIHlpPXlbMV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgeWk9QmFzZU1hdGhVdGlscy5leHRyYXBvbGF0ZUxpbmVhcih4LHkseGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHlpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNhbGNTY2FsZShzcmNXLCBzcmNILCBkc3RXLCBkc3RIKSB7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oZHN0Vy9zcmNXLCBkc3RIL3NyY0gpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG11bE0oYSwgYikge1xyXG4gICAgY29uc3Qgcj1bXTtcclxuICAgIGZvcihsZXQgaT0wO2k8YS5sZW5ndGg7KytpKSB7XHJcbiAgICAgIHIucHVzaChbXSk7XHJcbiAgICAgIGZvcihsZXQgaj0wO2o8YlswXS5sZW5ndGg7KytqKSB7XHJcbiAgICAgICAgcltpXVtqXSA9IDA7XHJcbiAgICAgICAgZm9yKGxldCBrPTA7azxiLmxlbmd0aDsrK2spIHtcclxuICAgICAgICAgIHJbaV1bal0rPWFbaV1ba10qYltrXVtqXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRyYW5zTShtKSB7XHJcbiAgICBjb25zdCByPVtdO1xyXG4gICAgZm9yKGxldCBpPTA7aTxtLmxlbmd0aDsrK2kpIHtcclxuICAgICAgZm9yKGxldCBqPTA7ajxtWzBdLmxlbmd0aDsrK2opIHtcclxuICAgICAgICBpZighcltqXSkge1xyXG4gICAgICAgICAgcltqXT1bXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcltqXVtpXT1tW2ldW2pdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtYXQoZGF0YSkge1xyXG4gICAgbGV0IHM9MDtcclxuICAgIGZvcihsZXQgeCBvZiBkYXRhKSB7XHJcbiAgICAgIHMrPXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcy9kYXRhLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkaXNwKGRhdGEpIHtcclxuICAgIGNvbnN0IE09QmFzZU1hdGhVdGlscy5tYXQoZGF0YSk7XHJcbiAgICBsZXQgcz0wO1xyXG4gICAgZm9yKGxldCB4IG9mIGRhdGEpIHtcclxuICAgICAgcys9KHgtTSkqKHgtTSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcy9kYXRhLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwcmVkaWN0KGRhdGEsIG51bSkge1xyXG4gICAgY29uc3Qgcj1bXSwgbD1kYXRhLmxlbmd0aCwgRD1CYXNlTWF0aFV0aWxzLmRpc3AoZGF0YSk7XHJcbiAgICBpZihEPGwgJiYgbD4xKSB7XHJcbiAgICAgIGNvbnN0IGFtPVtdLCBibT1bXTtcclxuICAgICAgZm9yKGxldCBpPTA7aTxsOysraSkge1xyXG4gICAgICAgIGFtLnB1c2goW2ksMV0pO1xyXG4gICAgICAgIGJtLnB1c2goW2RhdGFbaV1dKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YT1CYXNlTWF0aFV0aWxzLnRyYW5zTShhbSksIGE9QmFzZU1hdGhVdGlscy5tdWxNKHRhLGFtKSwgYj1CYXNlTWF0aFV0aWxzLm11bE0odGEsYm0pLFxyXG4gICAgICBkPShhWzBdWzBdKmFbMV1bMV0tYVsxXVswXSphWzBdWzFdKSxcclxuICAgICAgcD1bXHJcbiAgICAgICAgLShhWzBdWzFdKmJbMV1bMF0tYlswXVswXSphWzFdWzFdKS9kLFxyXG4gICAgICAgIChhWzBdWzBdKmJbMV1bMF0tYVsxXVswXSpiWzBdWzBdKS9kXHJcbiAgICAgIF07XHJcbiAgICAgIGZvcihsZXQgaT0wO2k8bnVtOysraSkge1xyXG4gICAgICAgIGNvbnN0IHYgPSBNYXRoLnJvdW5kKHBbMF0qKGkrbCkrcFsxXSk7XHJcbiAgICAgICAgaWYoci5pbmRleE9mKHYpPT09LTEpIHtcclxuICAgICAgICAgIHIucHVzaCh2KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFVuaXF1ZSgpIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwoMWU5Kk1hdGgucmFuZG9tKCkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldFNwbGluZVBvaW50cyhzcGxpbmUsIHBzKSB7XHJcbiAgICBpZihzcGxpbmUucG9pbnRzLmxlbmd0aCE9PXBzLngubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybignc2V0U3BsaW5lUG9pbnRzOiBiYWQgcG9pbnRzJyk7XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IGk9MDsgaTxzcGxpbmUucG9pbnRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHNwbGluZS5wb2ludHNbaV0uc2V0KHBzLnhbaV0sIHBzLnlbaV0sIHBzLno/IHBzLnpbaV06IDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1hcGwyTChscywgbGVuLCBuLCBmKSB7XHJcbiAgICBjb25zdCBkTCA9IGxlbi8obi0xKTtcclxuICAgIGxldCBMPTA7XHJcbiAgICBmb3IobGV0IGk9MCwgZD1sc1swXTsgaTxscy5sZW5ndGgtMSAmJiBMPGxlbiswLjEqZEw7ICsraSwgZCs9bHNbaV0pIHtcclxuICAgICAgaWYoTWF0aC5hYnMoTC1kKTxNYXRoLmFicyhMLWQtbHNbaSsxXSkpIHtcclxuICAgICAgICBmKGksIEwpO1xyXG4gICAgICAgIEwrPWRMO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihMPGxlbiswLjEqZEwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdtYXBsMkw6IGxzIGlzIG5vdCBlbm91Z2h0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGV0MihhLGIsYyxkKSB7XHJcbiAgICByZXR1cm4gYSpkLWIqYztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzb2x2ZTJMaW4oYTEsYjEsYTIsYjIpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBjb25zdCBkPUJhc2VNYXRoVXRpbHMuZGV0MihhMVswXSxhMVsxXSxhMlswXSxhMlsxXSk7XHJcbiAgICBpZihNYXRoLmFicyhkKT5CYXNlTWF0aFV0aWxzLmVwcykge1xyXG4gICAgICBjb25zdCBkeD1CYXNlTWF0aFV0aWxzLmRldDIoYjEsYTFbMV0sYjIsYTJbMV0pLCBkeT1CYXNlTWF0aFV0aWxzLmRldDIoYTFbMF0sYjEsYTJbMF0sYjIpO1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgeDogZHgvZCxcclxuICAgICAgICB5OiBkeS9kXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzSW5zaWRlUG9seShwcywgcCkge1xyXG4gICAgbGV0IGRvbmUgPSBmYWxzZSwgY3Q7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxwcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBpZihCYXNlTWF0aFV0aWxzLnYyZGlzdChwLCBwc1tpXSk8QmFzZU1hdGhVdGlscy5lcHMpIHtcclxuICAgICAgICBjdD0xO1xyXG4gICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3aGlsZSghZG9uZSkge1xyXG4gICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgY3QgPSAwO1xyXG4gICAgICBsZXQgbnAgPSB7eDogcC54K01hdGgucmFuZG9tKCktMC41LCB5OiBwLnkrTWF0aC5yYW5kb20oKS0wLjV9LCBybiA9IHt4OiBucC54LXAueCwgeTogbnAueS1wLnl9LCBhMT1bcm4ueSwgLXJuLnhdLCBiMT1wLngqcm4ueS1wLnkqcm4ueDtcclxuICAgICAgZm9yKGxldCBpPTA7IGk8cHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjb25zdCBwMD1wc1tpXSwgcDE9cHNbKGkrMSklcHMubGVuZ3RoXSwgbiA9IHt4OiBwMS54LXAwLngsIHk6IHAxLnktcDAueX0sIGEyPVtuLnksIC1uLnhdLCBiMj1wMC54Km4ueS1wMC55Km4ueCxcclxuICAgICAgICAgIGlwID0gQmFzZU1hdGhVdGlscy5zb2x2ZTJMaW4oYTEsYjEsYTIsYjIpO1xyXG4gICAgICAgIGlmKGlwKSB7XHJcbiAgICAgICAgICBpZihCYXNlTWF0aFV0aWxzLnYyZGlzdChpcCwgcDApPEJhc2VNYXRoVXRpbHMuZXBzIHx8IEJhc2VNYXRoVXRpbHMudjJkaXN0KGlwLCBwMSk8QmFzZU1hdGhVdGlscy5lcHMpIHtcclxuICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYoaXAueD5NYXRoLm1pbihwMC54LHAxLngpLUJhc2VNYXRoVXRpbHMuZXBzJiZpcC54PE1hdGgubWF4KHAwLngscDEueCkrQmFzZU1hdGhVdGlscy5lcHMgJiZcclxuICAgICAgICAgICAgICAgICAgaXAueT5NYXRoLm1pbihwMC55LHAxLnkpLUJhc2VNYXRoVXRpbHMuZXBzJiZpcC55PE1hdGgubWF4KHAwLnkscDEueSkrQmFzZU1hdGhVdGlscy5lcHMpIHtcclxuICAgICAgICAgICAgaWYoQmFzZU1hdGhVdGlscy52MmRpc3QoaXAsIHApPEJhc2VNYXRoVXRpbHMuZXBzKSB7XHJcbiAgICAgICAgICAgICAgY3Q9MTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCB0bj17eDogaXAueC1wLngsIHk6IGlwLnktcC55fTtcclxuICAgICAgICAgICAgICBjdCArPSB0bi54KnJuLngrdG4ueSpybi55PjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdCUyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzSW5zaWRlQ29udlBvbHkocHMsIHApIHtcclxuICAgIGxldCBzZyA9IFswLCAwXTtcclxuICAgIGZvcihsZXQgaT0wOyBpPHBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHAwPXBzW2ldLCBwMT1wc1soaSsxKSVwcy5sZW5ndGhdLCBhPXt4OiBwMC54LXAueCwgeTogcDAueS1wLnl9LCBiPXt4OiBwMS54LXAueCwgeTogcDEueS1wLnl9O1xyXG4gICAgICArK3NnWyhhLngqYi55LWEueSpiLng8MCkrMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gfnNnLmluZGV4T2YocHMubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2Mmxlbih2Mikge1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh2Mi54KnYyLngrdjIueSp2Mi55KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2MmRpc3QodjIxLCB2MjIpIHtcclxuICAgIHJldHVybiBCYXNlTWF0aFV0aWxzLnYybGVuKHtcclxuICAgICAgeDogdjIyLngtdjIxLngsXHJcbiAgICAgIHk6IHYyMi55LXYyMS55XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb21wdXRlU3F1YXJlKHBzKSB7XHJcbiAgICBjb25zdCBhID0gW107XHJcbiAgICBsZXQgcCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxwcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBhLnB1c2goQmFzZU1hdGhVdGlscy52MmRpc3QocHNbaV0sIHBzWyhpKzEpJXBzLmxlbmd0aF0pKTtcclxuICAgICAgcCArPSAwLjUqYVtpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBNYXRoLnNxcnQocCoocC1hWzBdKSoocC1hWzFdKSoocC1hWzJdKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29tcHV0ZUludGVycENvZWZzKHRyaSwgcCkge1xyXG4gICAgY29uc3QgcyA9IEJhc2VNYXRoVXRpbHMuY29tcHV0ZVNxdWFyZSh0cmkpLCBjb2Vmcz1bXSwgbCA9IHRyaS5sZW5ndGg7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxsOyArK2kpIHtcclxuICAgICAgY29lZnNbaV0gPSBCYXNlTWF0aFV0aWxzLmNvbXB1dGVTcXVhcmUoW3AsIHRyaVsoaSsxKSVsXSwgdHJpWyhpKzIpJWxdXSkvcztcclxuICAgIH1cclxuICAgIHJldHVybiBjb2VmcztcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0Jhc2VNYXRoVXRpbHMuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9CYXNlTWF0aFV0aWxzLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJy4vQmFzZU1hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXRoVXRpbHMgZXh0ZW5kcyBCYXNlTWF0aFV0aWxzIHtcclxuICBzdGF0aWMgdjEgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG5cclxuICBzdGF0aWMgc3BsaXRTcGxpbmUoc3BsaW5lLCBOKSB7XHJcbiAgICBjb25zdCBvID0ge2xlbjogMCwgbHM6IFswXX0sIGRsPTEvTjtcclxuICAgIGZvcihsZXQgaT0wOyBpPD1OOyArK2kpIHtcclxuICAgICAgY29uc3QgcCA9IHNwbGluZS5nZXRQb2ludChpKmRsKTtcclxuICAgICAgaWYoaSkge1xyXG4gICAgICAgIGNvbnN0IGQgPSBNYXRoVXRpbHMudjEuZGlzdGFuY2VUbyhwKTtcclxuICAgICAgICBvLmxlbiArPSBkO1xyXG4gICAgICAgIG8ubHMucHVzaChkKTtcclxuICAgICAgfVxyXG4gICAgICBNYXRoVXRpbHMudjEuY29weShwKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldExpbmVhckluZGVjZXMoc3BsaW5lLCBuKSB7XHJcbiAgICBjb25zdCBkZWwgPSA1MDAwLCBkRGVsID0gMS9kZWw7XHJcbiAgICBjb25zdCBscz1bMF07XHJcbiAgICBsZXQgbCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTw9ZGVsOyArK2kpIHtcclxuICAgICAgY29uc3QgcCA9IHNwbGluZS5nZXRQb2ludChpKmREZWwpO1xyXG4gICAgICBpZihpKSB7XHJcbiAgICAgICAgY29uc3QgZD1NYXRoVXRpbHMudjEuZGlzdGFuY2VUbyhwKTtcclxuICAgICAgICBsICs9IGQ7XHJcbiAgICAgICAgbHMucHVzaChkKTtcclxuICAgICAgfVxyXG4gICAgICBNYXRoVXRpbHMudjEuY29weShwKTtcclxuICAgIH1cclxuICAgIGxzLnB1c2goMWU3KTtcclxuXHJcbiAgICBjb25zdCByZXMgPSBbXSwgZGwgPSBsLyhuLTEpO1xyXG4gICAgZm9yKGxldCBpPTAsIEw9MCwgZD1sc1swXTsgaTxscy5sZW5ndGgtMTsgKytpLCBkKz1sc1tpXSkge1xyXG4gICAgICBpZihNYXRoLmFicyhMLWQpPE1hdGguYWJzKEwtZC1sc1tpKzFdKSkge1xyXG4gICAgICAgIHJlcy5wdXNoKGkqZERlbCk7XHJcbiAgICAgICAgTCs9ZGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHJlZmluZVBvbHkocG9seSwgbWF4RGwpIHtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8cG9seS5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjb25zdCBwMCA9IHBvbHlbaV0sIHAxID0gcG9seVsoaSsxKSVwb2x5Lmxlbmd0aF0sIGwgPSBCYXNlTWF0aFV0aWxzLnYyZGlzdChwMCwgcDEpLCBuID0gTWF0aC5jZWlsKGwvbWF4RGwpLCBkbCA9IGwvbjtcclxuICAgICAgcmVzLnB1c2gocDApO1xyXG4gICAgICBmb3IobGV0IGo9MTsgajxuOyArK2opIHtcclxuICAgICAgICByZXMucHVzaChuZXcgVEhSRUUuVmVjdG9yMihcclxuICAgICAgICAgIHAwLngraipkbCoocDEueC1wMC54KS9sLFxyXG4gICAgICAgICAgcDAueStqKmRsKihwMS55LXAwLnkpL2xcclxuICAgICAgICApKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL01hdGhVdGlscy5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL01hdGhVdGlscy5qcyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFV0aWxzIHtcclxuXHJcbiAgc3RhdGljIG5vcm1hbGl6ZVVybCh1cmwpIHtcclxuICAgIGZ1bmN0aW9uIHNwbGl0KHMpIHtcclxuICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXFxcXC9nLCAnLycpLnNwbGl0KCcvJyk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBiYXNlID0gc3BsaXQod2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgdXJsID0gc3BsaXQodXJsKTtcclxuICAgIGlmKGJhc2VbMl09PT11cmxbMl0pIHtcclxuICAgICAgdXJsWzBdID0gYmFzZVswXTtcclxuICAgIH1cclxuICAgIHJldHVybiB1cmwuam9pbignLycpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGV4dGVuZHMoZGVyLCBiYXNlKSB7XHJcbiAgICBmb3IobGV0IG5hbWUgaW4gYmFzZSkge1xyXG4gICAgICBpZighZGVyLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbiAgICAgICAgZGVyW25hbWVdID0gYmFzZVtuYW1lXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRlZmF1bHRDbXAoYSwgYikge1xyXG4gICAgcmV0dXJuIGEtYjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBsb3dlckJvdW5kKGEsIHgsIGNtcCkge1xyXG4gICAgY21wID0gY21wIHx8IFV0aWxzLmRlZmF1bHRDbXA7XHJcbiAgICBsZXQgbCA9IDAsIGggPSBhLmxlbmd0aC0xO1xyXG4gICAgd2hpbGUoaC1sPjEpIHtcclxuICAgICAgbGV0IG1pZCA9IE1hdGguZmxvb3IoKGwgKyBoKSAvIDIpO1xyXG4gICAgICBpZihjbXAoeCwgYVttaWRdKTwwKSB7XHJcbiAgICAgICAgaCA9IG1pZDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsID0gbWlkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY21wKHgsIGFbaF0pPj0wPyBoOiBsO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVXRpbHMuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9VdGlscy5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBHcmFwaFV0aWxzIGZyb20gJy4vR3JhcGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZUJhc2Uge1xyXG5cclxuICBzdGF0aWMgcmVuZGVyQ2FudmFzID0gICQoJzxjYW52YXM+JylbMF07XHJcbiAgc3RhdGljIHJlbmRlckNhbnZhc0N0eCA9IEltYWdlQmFzZS5yZW5kZXJDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpIHtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICB0aGlzLnduZCA9IGNvbnRleHQud25kO1xyXG4gICAgdGhpcy5kb2MgPSBjb250ZXh0LmRvYztcclxuICAgIHRoaXMuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCB8fCBjb250ZXh0LmRvYy5ib2R5O1xyXG4gICAgdGhpcy5jID0gY29udGV4dC5yZW5kZXJDYW52YXMgfHwgSW1hZ2VCYXNlLnJlbmRlckNhbnZhcztcclxuICAgIHRoaXMuY3R4ID0gY29udGV4dC5yZW5kZXJDYW52YXNDdHggfHwgSW1hZ2VCYXNlLnJlbmRlckNhbnZhc0N0eDtcclxuICAgIHRoaXMucmVzVyA9IHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgIHRoaXMucmVzSCA9IHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgdGhpcy5jb2xvciA9IGNvbG9yO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVzb2x1dGlvbihyZXMpIHtcclxuICAgIHRoaXMucmVzVyA9IHJlcy53aWR0aDtcclxuICAgIHRoaXMucmVzSCA9IHJlcy5oZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHJlbmRlckJsYW5rUGFnZSgpIHtcclxuICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgdGhpcy5jdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKHRoaXMuY29sb3IsIDEpO1xyXG4gICAgdGhpcy5jdHgucmVjdCgwLCAwLCB0aGlzLmMud2lkdGgsIHRoaXMuYy5oZWlnaHQpO1xyXG4gICAgdGhpcy5jdHguZmlsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW1hZ2UoaW1hZ2UpIHtcclxuICAgIHRoaXMucHVzaEN0eCgpO1xyXG4gICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcclxuICAgIHRoaXMucG9wQ3R4KCk7XHJcbiAgfVxyXG5cclxuICBub3JtVG9Db252KHApIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IHAueCp0aGlzLmMud2lkdGgsXHJcbiAgICAgIHk6ICgxLXAueSkqdGhpcy5jLmhlaWdodFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbmRlckhpdChwb2x5KSB7XHJcbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcclxuICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgyNTUsMjU1LDAsMC40KSc7XHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBsZXQgcCA9IHRoaXMubm9ybVRvQ29udihwb2x5WzBdKTtcclxuICAgIGN0eC5tb3ZlVG8ocC54LCBwLnkpO1xyXG4gICAgZm9yKGxldCBpPTE7IGk8cG9seS5sZW5ndGg7ICsraSkge1xyXG4gICAgICBwID0gdGhpcy5ub3JtVG9Db252KHBvbHlbaV0pO1xyXG4gICAgICBjdHgubGluZVRvKHAueCwgcC55KTtcclxuICAgIH1cclxuICAgIGN0eC5jbG9zZVBhdGgoKTtcclxuICAgIGN0eC5maWxsKCk7XHJcbiAgfVxyXG5cclxuICBwdXNoQ3R4KCkge1xyXG4gICAgaWYodGhpcy5yZXNXIT10aGlzLmMud2lkdGgpIHtcclxuICAgICAgdGhpcy5jLndpZHRoID0gdGhpcy5yZXNXO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5yZXNIIT10aGlzLmMuaGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuYy5oZWlnaHQgPSB0aGlzLnJlc0g7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN0eC5zYXZlKCk7XHJcbiAgICB0aGlzLmN0eC5zY2FsZSh0aGlzLmMud2lkdGgvdGhpcy53aWR0aCwgdGhpcy5jLmhlaWdodC90aGlzLmhlaWdodCk7XHJcbiAgICByZXR1cm4gdGhpcy5jdHg7XHJcbiAgfVxyXG5cclxuICBwb3BDdHgoKSB7XHJcbiAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJOb3RGb3VuZFBhZ2UoKSB7XHJcbiAgICB0aGlzLnJlbmRlckJsYW5rUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgZmluaXNoUmVuZGVyKCkge1xyXG4gICAgaWYodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuYyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5pc2hMb2FkKCkge1xyXG4gICAgaWYodGhpcy5vbkxvYWQpIHtcclxuICAgICAgdGhpcy5vbkxvYWQoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0UmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTaW11bGF0ZWREb2MoKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvSW1hZ2VCYXNlLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvSW1hZ2VCYXNlLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50Q29udmVydGVyIHtcclxuXHJcbiAgLy8gdmlydHVhbHNcclxuICAvLyBnZXRPYmplY3QoZSwgZGF0YSk7XHJcbiAgLy8gZ2V0Q2FsbGJhY2sob2JqZWN0KTtcclxuICAvLyB0ZXN0KG9iamVjdDEsIG9iamVjdDEpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYykge1xyXG4gICAgdGhpcy53bmQgPSB3bmQ7XHJcbiAgICB0aGlzLmRvYyA9IGRvYztcclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRFbmFibGUodmwpIHtcclxuICAgIGlmKCF2bCkge1xyXG4gICAgICBpZih0aGlzLm1DYXBPYmplY3QpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1DYXBPYmplY3QsICQuRXZlbnQoJ21vdXNldXAnKSwgJ21vdXNldXAnKTtcclxuICAgICAgICB0aGlzLm1DYXBPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5tSG92T2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnkodGhpcy5tSG92T2JqZWN0LCAkLkV2ZW50KCdtb3VzZW91dCcpLCAnbW91c2VvdXQnKTtcclxuICAgICAgICB0aGlzLm1Ib3ZPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlZCA9IHZsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FsbGJhY2sob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgbm90aWZ5KG9iamVjdCwgZSwgdHlwZSkge1xyXG4gICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldENhbGxiYWNrKG9iamVjdCk7XHJcbiAgICBpZihjYWxsYmFjaykge1xyXG4gICAgICBjb25zdCBwcm9wcyA9IHtcclxuICAgICAgICAuLi5lLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgdmlldzogdGhpcy53bmRcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgakUgPSAkLkV2ZW50KHR5cGUsIHByb3BzKTtcclxuICAgICAgY2FsbGJhY2soakUsIG9iamVjdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0KGUsIGRhdGEpIHtcclxuICAgIGlmKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZih0aGlzLmZpbHRlcikge1xyXG4gICAgICBlID0gdGhpcy5maWx0ZXIodGhpcy5lbGVtZW50LCBlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYmplY3QgPSB0aGlzLmdldE9iamVjdChlLCBkYXRhKSxcclxuICAgICAgbm90aWZ5ID0gfmUudHlwZS5pbmRleE9mKCd0b3VjaCcpPyB0aGlzLmNvbnZlcnRUb3VjaChlLCBkYXRhLCBvYmplY3QpOiB0aGlzLmNvbnZlcnRNb3VzZShlLCBkYXRhLCBvYmplY3QpO1xyXG4gICAgaWYobm90aWZ5ICYmIG9iamVjdCkge1xyXG4gICAgICB0aGlzLm5vdGlmeShvYmplY3QsIGUsIGUudHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG91Y2goZSwgZGF0YSwgb2JqZWN0KSB7XHJcbiAgICBsZXQgbm90aWZ5ID0gdHJ1ZTtcclxuICAgIHN3aXRjaChlLnR5cGUpIHtcclxuICAgICAgY2FzZSAndG91Y2hzdGFydCc6IHtcclxuICAgICAgICBpZih0aGlzLnRDYXBPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMudENhcE9iamVjdCwgZSwgJ3RvdWNoZW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudENhcE9iamVjdCA9IG9iamVjdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICd0b3VjaGVuZCc6IHtcclxuICAgICAgICBpZih0aGlzLnRDYXBPYmplY3QgJiYgIXRoaXMudGVzdCh0aGlzLnRDYXBPYmplY3QsIG9iamVjdCkpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMudENhcE9iamVjdCwgZSwgJ3RvdWNoZW5kJyk7XHJcbiAgICAgICAgICBub3RpZnkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihvYmplY3QgJiYgdGhpcy50ZXN0KHRoaXMudENhcE9iamVjdCwgb2JqZWN0KSkge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnkob2JqZWN0LCBlLCAndG91Y2h0YXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50Q2FwT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3RvdWNodGFwJzoge1xyXG4gICAgICAgIG5vdGlmeSA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm90aWZ5O1xyXG4gIH1cclxuXHJcbiAgY29udmVydE1vdXNlKGUsIGRhdGEsIG9iamVjdCkge1xyXG4gICAgbGV0IG5vdGlmeSA9IHRydWU7XHJcbiAgICBzd2l0Y2goZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ21vdXNlZG93bic6IHtcclxuICAgICAgICBpZih0aGlzLm1DYXBPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMubUNhcE9iamVjdCwgZSwgJ21vdXNldXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tQ2FwT2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21vdXNldXAnOiB7XHJcbiAgICAgICAgaWYodGhpcy5tQ2FwT2JqZWN0ICYmICF0aGlzLnRlc3QodGhpcy5tQ2FwT2JqZWN0LCBvYmplY3QpKSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1DYXBPYmplY3QsIGUsICdtb3VzZXVwJyk7XHJcbiAgICAgICAgICBub3RpZnkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnY2xpY2snOiB7XHJcbiAgICAgICAgbm90aWZ5ID0gdGhpcy50ZXN0KHRoaXMubUNhcE9iamVjdCwgb2JqZWN0KTtcclxuICAgICAgICB0aGlzLm1DYXBPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbW91c2VlbnRlcic6XHJcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XHJcbiAgICAgIGNhc2UgJ21vdXNlbW92ZSc6IHtcclxuICAgICAgICBpZighdGhpcy50ZXN0KHRoaXMubUhvdk9iamVjdCwgb2JqZWN0KSAmJiB0aGlzLm1Ib3ZPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMubUhvdk9iamVjdCwgZSwgJ21vdXNlb3V0Jyk7XHJcbiAgICAgICAgICB0aGlzLm1Ib3ZPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLm1Ib3ZPYmplY3QgJiYgb2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeShvYmplY3QsIGUsICdtb3VzZW92ZXInKTtcclxuICAgICAgICAgIHRoaXMubUhvdk9iamVjdCA9IG9iamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm90aWZ5ID0gZS50eXBlID09PSAnbW91c2Vtb3ZlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtb3VzZWxlYXZlJzpcclxuICAgICAgY2FzZSAnbW91c2VvdXQnOiB7XHJcbiAgICAgICAgaWYodGhpcy5tSG92T2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1Ib3ZPYmplY3QsIGUsICdtb3VzZW91dCcpO1xyXG4gICAgICAgICAgdGhpcy5tSG92T2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub3RpZnkgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vdGlmeTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0V2ZW50Q29udmVydGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRXZlbnRDb252ZXJ0ZXIuanMiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBHcmFwaFV0aWxzIHtcclxuXHJcbiAgc3RhdGljIGV4dHJhcG9sYXRlTGluZWFyKHgseSx4aSkge1xyXG4gICAgcmV0dXJuIHlbMF0rKHlbMV0teVswXSkvKHhbMV0teFswXSkqKHhpLXhbMF0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGludGVycG9sYXRlMDEoeTEseTIsdCkge1xyXG4gICAgcmV0dXJuIEdyYXBoVXRpbHMuZXh0cmFwb2xhdGVMaW5lYXIoWzAsMV0sW3kxLHkyXSx0KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRDb2xvckJ5dGVzKGNvbG9yKSB7XHJcbiAgICByZXR1cm4gWyhjb2xvcj4+MTYpJjB4RkYsIChjb2xvcj4+OCkmMHhGRiwgY29sb3ImMHhGRl07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaW52ZXJzZUNvbG9yKGNvbG9yLCB0PTEpIHtcclxuICAgIGNvbnN0IGJzPUdyYXBoVXRpbHMuZ2V0Q29sb3JCeXRlcyhjb2xvciksXHJcbiAgICAgICAgICBpYnM9WzB4RkYtYnNbMF0sMHhGRi1ic1sxXSwweEZGLWJzWzJdXSxcclxuICAgICAgICAgIG5icz1bTWF0aC5yb3VuZChHcmFwaFV0aWxzLmludGVycG9sYXRlMDEoYnNbMF0saWJzWzBdLHQpKSxNYXRoLnJvdW5kKEdyYXBoVXRpbHMuaW50ZXJwb2xhdGUwMShic1sxXSxpYnNbMV0sdCkpLE1hdGgucm91bmQoR3JhcGhVdGlscy5pbnRlcnBvbGF0ZTAxKGJzWzJdLGlic1syXSx0KSldO1xyXG4gICAgcmV0dXJuIEdyYXBoVXRpbHMuYnl0ZXMyQ29sb3IobmJzKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb2xvcjJSZ2JhKGNvbG9yLCBhKSB7XHJcbiAgICByZXR1cm4gR3JhcGhVdGlscy5ieXRlczJSZ2JhKEdyYXBoVXRpbHMuZ2V0Q29sb3JCeXRlcyhjb2xvciksIGEpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGJ5dGVzMlJnYmEoYnMsIGEpIHtcclxuICAgIHJldHVybiAncmdiYSgnK2JzLmpvaW4oJywnKSsnLCcrYSsnKSc7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYnl0ZXMyQ29sb3IoYnMpIHtcclxuICAgIHJldHVybiBic1syXXwoYnNbMV08PDgpfChic1swXTw8MTYpXHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0dyYXBoVXRpbHMuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9HcmFwaFV0aWxzLmpzIiwiaW1wb3J0IENhY2hlIGZyb20gJy4vQ2FjaGUnO1xyXG5pbXBvcnQgQmxhbmtJbWFnZSBmcm9tICcuL0JsYW5rSW1hZ2UnO1xyXG5pbXBvcnQgU3RhdGljSW1hZ2UgZnJvbSAnLi9TdGF0aWNJbWFnZSc7XHJcbmltcG9ydCBQZGZJbWFnZSBmcm9tICcuL1BkZkltYWdlJztcclxuaW1wb3J0IEludGVyYWN0aXZlSW1hZ2UgZnJvbSAnLi9JbnRlcmFjdGl2ZUltYWdlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlRmFjdG9yeSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNhY2hlKSB7XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlIHx8IG5ldyBDYWNoZSgpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGQoaW5mbywgbj0wLCB3aWR0aFRleGVscz0yMTAsIGhlaWdodFRleGVscz0yOTcsIGNvbG9yPTB4RkZGRkZGLCBpbmplY3Rvcj11bmRlZmluZWQpIHtcclxuICAgIGxldCBpbWFnZTtcclxuICAgIHN3aXRjaChpbmZvLnR5cGUpIHtcclxuICAgICAgY2FzZSAnaHRtbCc6IHtcclxuICAgICAgICBpbWFnZSA9IG5ldyBJbnRlcmFjdGl2ZUltYWdlKHRoaXMuY29udGV4dCwgd2lkdGhUZXhlbHMsIGhlaWdodFRleGVscywgY29sb3IsIGluZm8uc3JjLCB0aGlzLmNhY2hlLCBpbmplY3Rvcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnaW1hZ2UnOiB7XHJcbiAgICAgICAgaW1hZ2UgPSBuZXcgU3RhdGljSW1hZ2UodGhpcy5jb250ZXh0LCB3aWR0aFRleGVscywgaGVpZ2h0VGV4ZWxzLCBjb2xvciwgaW5mby5zcmMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3BkZic6IHtcclxuICAgICAgICBpbWFnZSA9IG5ldyBQZGZJbWFnZSh0aGlzLmNvbnRleHQsIHdpZHRoVGV4ZWxzLCBoZWlnaHRUZXhlbHMsIGNvbG9yLCBpbmZvLnNyYywgbik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnYmxhbmsnOlxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgaW1hZ2UgPSBuZXcgQmxhbmtJbWFnZSh0aGlzLmNvbnRleHQsIHdpZHRoVGV4ZWxzLCBoZWlnaHRUZXhlbHMsIGNvbG9yKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGltYWdlO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9JbWFnZUZhY3RvcnkuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9JbWFnZUZhY3RvcnkuanMiLCJpbXBvcnQge3Byb3BzIGFzICBib29rUHJvcHN9IGZyb20gJy4uL3Byb3BzL2Jvb2snO1xyXG5pbXBvcnQgQmFzZU1hdGhVdGlscyBmcm9tICdCYXNlTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2tQcm9wc0J1aWxkZXIge1xyXG4gIGNvbnN0cnVjdG9yKG9uUmVhZHkpIHtcclxuICAgIHRoaXMub25SZWFkeSA9IG9uUmVhZHk7XHJcbiAgICB0aGlzLmRlZmF1bHRzID0gYm9va1Byb3BzKCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGNhbGNTaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIGNvbnN0IHNjYWxlID0gQmFzZU1hdGhVdGlscy5jYWxjU2NhbGUod2lkdGgsIGhlaWdodCwgdGhpcy5kZWZhdWx0cy53aWR0aCwgdGhpcy5kZWZhdWx0cy5oZWlnaHQpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGg6IHNjYWxlKndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHNjYWxlKmhlaWdodFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNhbGNUZXhlbHMod2lkdGgsIGhlaWdodCkge1xyXG4gICAgY29uc3Qgc2hlZXQgPSB0aGlzLmRlZmF1bHRzLnNoZWV0LCBzY2FsZSA9IEJhc2VNYXRoVXRpbHMuY2FsY1NjYWxlKHdpZHRoLCBoZWlnaHQsIHNoZWV0LndpZHRoVGV4ZWxzLCBzaGVldC5oZWlnaHRUZXhlbHMpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGhUZXhlbHM6IHNjYWxlKndpZHRoLFxyXG4gICAgICBoZWlnaHRUZXhlbHM6IHNjYWxlKmhlaWdodFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNhbGNQcm9wcyh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi50aGlzLmRlZmF1bHRzLFxyXG4gICAgICAuLi50aGlzLmNhbGNTaXplKHdpZHRoLCBoZWlnaHQpLFxyXG4gICAgICBzaGVldDoge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdHMuc2hlZXQsXHJcbiAgICAgICAgLi4udGhpcy5jYWxjVGV4ZWxzKHdpZHRoLCBoZWlnaHQpXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvdmVyOiB7XHJcbiAgICAgICAgLi4udGhpcy5kZWZhdWx0cy5jb3ZlcixcclxuICAgICAgfSxcclxuICAgICAgcGFnZToge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdHMucGFnZSxcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNhbGNTaGVldHMocGFnZXMpIHtcclxuICAgIHJldHVybiB0aGlzLnNoZWV0cyA9IE1hdGguY2VpbChNYXRoLm1heCgwLCBwYWdlcy00KS8yKTtcclxuICB9XHJcblxyXG4gIGdldFNoZWV0cygpIHtcclxuICAgIHJldHVybiB0aGlzLnNoZWV0cztcclxuICB9XHJcblxyXG4gIGdldFByb3BzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlQ2FsbGJhY2soKSB7XHJcbiAgICByZXR1cm4gdGhpcy5iaW5kcy5wYWdlQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICByZWFkeSgpIHtcclxuICAgIGlmKHRoaXMub25SZWFkeSkge1xyXG4gICAgICB0aGlzLm9uUmVhZHkodGhpcy5nZXRQcm9wcygpLCB0aGlzLmdldFNoZWV0cygpLCB0aGlzLmdldFBhZ2VDYWxsYmFjaygpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Cb29rUHJvcHNCdWlsZGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9Cb29rUHJvcHNCdWlsZGVyLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBzaGVldEJsb2NrIGZyb20gJy4uL21vZGVscy9zaGVldEJsb2NrJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdNYXRoVXRpbHMnO1xyXG5pbXBvcnQgVGhyZWVVdGlscyBmcm9tICdUaHJlZVV0aWxzJztcclxuLy8gaW1wb3J0IFRocmVlTWFya3VwIGZyb20gJy4vVGhyZWVNYXJrdXAnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlZXRCbG9jayB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgcCwgZmlyc3QsIGxhc3QsIGFuZ2xlPTAsIHN0YXRlPSdjbG9zZWQnLCBoZWlnaHQ9MCkge1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIC4uLnAsXHJcbiAgICAgIGZpcnN0LFxyXG4gICAgICBsYXN0XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKCk7XHJcblxyXG4gICAgY29uc3QgbG9hZGVkUG9pbnRzID0gdGhpcy5sb2FkUG9pbnRzKCk7XHJcbiAgICBPYmplY3Qua2V5cyhsb2FkZWRQb2ludHMpLm1hcCgoayk9PiB7XHJcbiAgICAgIHRoaXNba10gPSBsb2FkZWRQb2ludHNba11bcHJvcHMuc2hhcGVdIHx8IGxvYWRlZFBvaW50c1trXVswXTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucFNwbGluZSA9IG5ldyBUSFJFRS5TcGxpbmUoW10pO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8dGhpcy5pbnRlcnBvbGF0aW9uUG9pbnRzLnhbMF0ubGVuZ3RoOyArK2kpIHtcclxuICAgIFx0dGhpcy5wU3BsaW5lLnBvaW50cy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaVNwbGluZSA9IG5ldyBUSFJFRS5TcGxpbmUoW10pO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8c2hlZXRCbG9jay5yZXNYOyArK2kpIHtcclxuICAgIFx0dGhpcy5pU3BsaW5lLnBvaW50cy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYVNwbGluZXMgPSBbXTtcclxuXHJcbiAgICAvL3RoaXMudGhyZWUgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuXHJcbiAgICB0aGlzLmdlb21ldHJ5ID0gc2hlZXRCbG9jay5nZW9tZXRyeS5jbG9uZSgpO1xyXG5cclxuICAgIHRoaXMucC5zaWRlRmFjZXMgPSBbe1xyXG4gICAgICAgIGZpcnN0OiAwLFxyXG4gICAgICAgIGxhc3Q6IHNoZWV0QmxvY2suZmFjZXNbMF1cclxuICAgICAgfSwge1xyXG4gICAgICAgIGZpcnN0OiBzaGVldEJsb2NrLmZhY2VzWzBdLFxyXG4gICAgICAgIGxhc3Q6IHNoZWV0QmxvY2suZmFjZXNbMV1cclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnNpZGVUZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoKTtcclxuICAgIHRoaXMuc2lkZVRleHR1cmUud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgIHRoaXMuc2lkZVRleHR1cmUucmVwZWF0LnNldCgwLCBsYXN0LWZpcnN0KTtcclxuICAgIHRoaXMuc2lkZVRleHR1cmUuaW1hZ2UgPSBwcm9wcy5zaWRlVGV4dHVyZTtcclxuICAgIHRoaXMuc2lkZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7bWFwOiB0aGlzLnNpZGVUZXh0dXJlfSksXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHttYXA6IHRoaXMuc2lkZVRleHR1cmV9KSxcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe21hcDogdGhpcy5zaWRlVGV4dHVyZX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7bWFwOiB0aGlzLnNpZGVUZXh0dXJlfSlcclxuICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICB0aGlzLnAuc2V0VGV4dHVyZSh0aGlzLm1hdGVyaWFsc1swXSwgMipmaXJzdCk7XHJcbiAgICB0aGlzLnAuc2V0VGV4dHVyZSh0aGlzLm1hdGVyaWFsc1sxXSwgMipsYXN0LTEpO1xyXG5cclxuICAgIHRoaXMubWVzaCA9IG5ldyBUSFJFRS5NZXNoKHRoaXMuZ2VvbWV0cnksIG5ldyBUSFJFRS5NZXNoRmFjZU1hdGVyaWFsKHRoaXMubWF0ZXJpYWxzKSk7XHJcbiAgICB0aGlzLm1lc2guY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5tZXNoLnJlY2VpdmVTaGFkb3cgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMubWVzaC5mcnVzdHVtQ3VsbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvL3RoaXMudGhyZWUuYWRkKHRoaXMubWVzaCk7XHJcbiAgICB0aGlzLnRocmVlID0gdGhpcy5tZXNoO1xyXG4gICAgdGhpcy50aHJlZS51c2VyRGF0YS5zZWxmID0gdGhpcztcclxuXHJcbiAgICB0aGlzLm1hcmtlcnMgPSBbXTtcclxuICAgIGlmKHRoaXMucC5tYXJrZXIudXNlKSB7XHJcbiAgICAgIGNvbnN0IGw9dGhpcy5nZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGg7XHJcbiAgICAgIGxldCBpcztcclxuICAgICAgLy8gaXMgPSBbMCwgc2hlZXRCbG9jay5yZXNYLTEsIChzaGVldEJsb2NrLnJlc1otMSkqc2hlZXRCbG9jay5yZXNYLCBzaGVldEJsb2NrLnJlc1oqc2hlZXRCbG9jay5yZXNYLTFdO1xyXG4gICAgICBpcyA9IEFycmF5LmFwcGx5KDAsIEFycmF5KGwpKS5tYXAoKF8sIGkpPT4gaSk7XHJcblxyXG4gICAgICBmb3IobGV0IGkgb2YgaXMpIHtcclxuICAgICAgICBjb25zdCBtYXJrZXIgPSBUaHJlZVV0aWxzLmNyZWF0ZU1hcmtlcih0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW2ldLCBpPGwvMj8weEZGMDAwMDoweDAwRkYwMCwgdGhpcy5wLm1hcmtlci5zaXplKTtcclxuICAgICAgICB0aGlzLm1hcmtlcnMucHVzaCh7XHJcbiAgICAgICAgICBtYXJrZXIsXHJcbiAgICAgICAgICB2ZXJ0ZXg6IGlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRocmVlLmFkZChtYXJrZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb3JuZXIgPSB7XHJcbiAgICAgIHVzZTogdHJ1ZSxcclxuICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICBtYXhEaXN0YW5jZTogMCxcclxuICAgICAgcG9pbnRzOiBbXSxcclxuICAgICAgT1o6IG5ldyBUSFJFRS5WZWN0b3IzKDAsMCwxKSxcclxuICAgICAgYXhpczogbmV3IFRIUkVFLlZlY3RvcjMoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0KDAsICdjbG9zZWQnLCBoZWlnaHQsIGZpcnN0LCBsYXN0KTsgLy8gY2FsY3VsYXRlIGNvcm5lciBwb2ludHNcclxuXHJcbiAgICB0aGlzLnNldChhbmdsZSwgc3RhdGUsIGhlaWdodCwgZmlyc3QsIGxhc3QpOyAvLyBpbml0IHBvc2l0aW9uXHJcblxyXG4gICAgLy8gaWYoIVNoZWV0QmxvY2subWFya3VwKSB7XHJcbiAgICAvLyAgIFNoZWV0QmxvY2subWFya3VwPXRydWU7XHJcbiAgICAvLyAgIHRoaXMubWFya3VwID0gbmV3IFRocmVlTWFya3VwKHRoaXMsIDAsIFt7XHJcbiAgICAvLyAgICAgeDogMCxcclxuICAgIC8vICAgICB5OiAwLFxyXG4gICAgLy8gICB9LCB7XHJcbiAgICAvLyAgICAgeDogMC41LFxyXG4gICAgLy8gICAgIHk6IDFcclxuICAgIC8vICAgfSwge1xyXG4gICAgLy8gICAgIHg6IDEsXHJcbiAgICAvLyAgICAgeTogMFxyXG4gICAgLy8gICB9XS5tYXAoKHApPT5uZXcgVEhSRUUuVmVjdG9yMihwLngsIHAueSkpLCB7fSk7XHJcbiAgICAvLyB9XHJcblxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGZvcihsZXQgbSBvZiB0aGlzLm1hdGVyaWFscykge1xyXG4gICAgICBpZihtLm1hcCkge1xyXG4gICAgICAgIG0ubWFwID0gbnVsbDtcclxuICAgICAgICBtLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLm1hdGVyaWFscztcclxuICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnAubGFzdC10aGlzLnAuZmlyc3Q7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wcygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnRoaXMucC5wYWdlLFxyXG4gICAgICBzaGVldHM6IHRoaXMucC5zaGVldHNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRUb3BDZXJuZXJzKCkge1xyXG4gICAgY29uc3Qgb2ZmID0gdGhpcy5hbmdsZT5NYXRoLlBJLzI/IHRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoLzI6IDA7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbb2ZmXSxcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3NoZWV0QmxvY2sucmVzWC0xK29mZl0sXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1soc2hlZXRCbG9jay5yZXNaLTEpKnNoZWV0QmxvY2sucmVzWCtvZmZdLFxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbc2hlZXRCbG9jay5yZXNaKnNoZWV0QmxvY2sucmVzWC0xK29mZl1cclxuICAgICAgXTtcclxuICB9XHJcblxyXG4gIGdldFRvcFNpemUoKSB7XHJcbiAgICAvLyBjb25zdCBsPXRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoLCBvZmYgPSB0aGlzLmFuZ2xlPk1hdGguUEkvMj8gbC8yOiAwLFxyXG4gICAgLy8gICB2MCA9IHRoaXMuZ2VvbWV0cnkudmVydGljZXNbb2ZmXSwgdjEgPSB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3NoZWV0QmxvY2sucmVzWipzaGVldEJsb2NrLnJlc1gtMStvZmZdO1xyXG4gICAgLy8gLy8gaXMgPSBbMCwgc2hlZXRCbG9jay5yZXNYLTEsIChzaGVldEJsb2NrLnJlc1otMSkqc2hlZXRCbG9jay5yZXNYLCBzaGVldEJsb2NrLnJlc1oqc2hlZXRCbG9jay5yZXNYLTFdO1xyXG4gICAgLy8gcmV0dXJuIHtcclxuICAgIC8vICAgd2lkdGg6IE1hdGguYWJzKHYxLngtdjAueCksXHJcbiAgICAvLyAgIGhlaWdodDogTWF0aC5hYnModjEuei12MC56KVxyXG4gICAgLy8gfTtcclxuICAgIGNvbnN0IHZzID0gdGhpcy5nZXRUb3BDZXJuZXJzKCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogdnNbMF0uZGlzdGFuY2VUbyh2c1sxXSksXHJcbiAgICAgIGhlaWdodDogdnNbMF0uZGlzdGFuY2VUbyh2c1syXSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRUb3BXb3JsZFJvdGF0aW9uKHEpIHtcclxuICAgIHEueCA9IC1NYXRoLlBJLzI7XHJcbiAgICByZXR1cm4gcTtcclxuICB9XHJcblxyXG4gIGdldFRvcFdvcmxkUG9zaXRpb24odikge1xyXG4gICAgY29uc3QgbD10aGlzLmdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCwgb2ZmID0gdGhpcy5hbmdsZT5NYXRoLlBJLzI/IGwvMjogMCwgdnMgPSBbXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tvZmZdLFxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbc2hlZXRCbG9jay5yZXNYLTErb2ZmXSxcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzWyhzaGVldEJsb2NrLnJlc1otMSkqc2hlZXRCbG9jay5yZXNYK29mZl0sXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tzaGVldEJsb2NrLnJlc1oqc2hlZXRCbG9jay5yZXNYLTErb2ZmXVxyXG4gICAgICBdO1xyXG4gICAgdi5zZXQoMCwgMCwgMCk7XHJcbiAgICBmb3IobGV0IHZpIG9mIHZzKSB7XHJcbiAgICAgIHYueCArPSAwLjI1KnZpLng7XHJcbiAgICAgIHYueSArPSAwLjI1KnZpLnk7XHJcbiAgICAgIHYueiArPSAwLjI1KnZpLno7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRocmVlLmxvY2FsVG9Xb3JsZCh2KTtcclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0SW50ZXJwb2xhdGlvblBvaW50cyhpbmRzLCBtb2QpIHtcclxuICAgIGNvbnN0IHBzID0ge3g6IFtdLCB5OiBbXX0sIEsgPSB0aGlzLmdldFByb3BzKCkud2F2ZTtcclxuICAgIGZvcihsZXQgaSBvZiBpbmRzKSB7XHJcbiAgICAgIHBzLngucHVzaChbLi4udGhpcy5pbnRlcnBvbGF0aW9uUG9pbnRzLnhbaV1dKTtcclxuICAgICAgcHMueS5wdXNoKH5tb2QuaW5kZXhPZihpKT8gdGhpcy5pbnRlcnBvbGF0aW9uUG9pbnRzLnlbaV0ubWFwKChuKT0+IEsqbik6IFsuLi50aGlzLmludGVycG9sYXRpb25Qb2ludHMueVtpXV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBzO1xyXG4gIH1cclxuXHJcbiAgc2V0KGFuZ2xlLCBzdGF0ZT10aGlzLnN0YXRlLCBoZWlnaHQ9dGhpcy5jb3JuZXIuaGVpZ2h0LCBmaXJzdD10aGlzLnAuZmlyc3QsIGxhc3Q9dGhpcy5wLmxhc3QpIHtcclxuICAgIGNvbnN0IFBJID0gTWF0aC5QSTtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIGxldCBjbG9zZWRBbmdsZSwgYmluZGVyVHVybjtcclxuICAgIGlmKHR5cGVvZiBhbmdsZT09PSdvYmplY3QnKSB7XHJcbiAgICAgIHRoaXMuYW5nbGUgPSBhbmdsZS5vcGVuZWRBbmdsZTtcclxuICAgICAgY2xvc2VkQW5nbGUgPSBhbmdsZS5jbG9zZWRBbmdsZTtcclxuICAgICAgYmluZGVyVHVybiA9IGFuZ2xlLmJpbmRlclR1cm4+UEkvMj9QSS1hbmdsZS5iaW5kZXJUdXJuOmFuZ2xlLmJpbmRlclR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hbmdsZSA9IGFuZ2xlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb3JuZXIuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgaWYodGhpcy5wLmZpcnN0IT09Zmlyc3QgfHwgdGhpcy5wLmxhc3QhPT1sYXN0KSB7XHJcbiAgICAgIHRoaXMuc2lkZVRleHR1cmUucmVwZWF0LnNldCgwLCBsYXN0LWZpcnN0KTtcclxuICAgICAgdGhpcy5zaWRlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIGlmKHRoaXMucC5maXJzdCE9PWZpcnN0KSB7XHJcbiAgICAgICAgdGhpcy5wLnNldFRleHR1cmUodGhpcy5tYXRlcmlhbHNbMF0sIDIqZmlyc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMucC5sYXN0IT09bGFzdCkge1xyXG4gICAgICAgIHRoaXMucC5zZXRUZXh0dXJlKHRoaXMubWF0ZXJpYWxzWzFdLCAyKmxhc3QtMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucC5maXJzdCA9IGZpcnN0O1xyXG4gICAgdGhpcy5wLmxhc3QgPSBsYXN0O1xyXG4gICAgbGV0IHBvaW50cztcclxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcygpO1xyXG4gICAgaWYodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcclxuICAgICAgcG9pbnRzID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMsIHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLnN0YXRlID09PSAnb3BlbmVkJykge1xyXG4gICAgICBpZihjbG9zZWRBbmdsZSE9PXVuZGVmaW5lZCAmJiBNYXRoLmFicyhjbG9zZWRBbmdsZS1QSS8yKT4xZS0yKSB7XHJcbiAgICAgICAgcG9pbnRzID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMuZmxhdEludGVycG9sYXRpb25JbmRlY2VzLCBbXSk7XHJcbiAgICAgICAgY29uc3QgcHMgPSB0aGlzLmdldFBvaW50c0F0QW5nbGUodGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMsIHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMpLCBjbG9zZWRBbmdsZT5QSS8yP1BJLWNsb3NlZEFuZ2xlOmNsb3NlZEFuZ2xlKTtcclxuICAgICAgICBwb2ludHMueCA9IFtwcy54LC4uLnBvaW50cy54XTtcclxuICAgICAgICBwb2ludHMueSA9IFtwcy55LC4uLnBvaW50cy55XTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcG9pbnRzID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMub3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMsIHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgaGwsIGhyLCBvZmZzZXQgPSAwLjUqcHJvcHMuc2hlZXRzKnByb3BzLmRlcHRoO1xyXG4gICAgaWYodGhpcy5zdGF0ZT09PSdjbG9zZWQnKSB7XHJcbiAgICAgIG9mZnNldCAtPSA3ZS02KnRoaXMucC5zY2FsZTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuYW5nbGU8PVBJLzIpIHtcclxuICAgICAgaGwgPSAocHJvcHMuc2hlZXRzLWZpcnN0KSpwcm9wcy5kZXB0aDtcclxuICAgICAgaHIgPSAocHJvcHMuc2hlZXRzLWxhc3QpKnByb3BzLmRlcHRoO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGhsID0gZmlyc3QqcHJvcHMuZGVwdGg7XHJcbiAgICAgIGhyID0gbGFzdCpwcm9wcy5kZXB0aDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbkFuZ2xlID0gdGhpcy5hbmdsZT5QSS8yP1BJLXRoaXMuYW5nbGU6dGhpcy5hbmdsZSwgaEFuZ2xlID0gdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCc/IGluQW5nbGU6IChiaW5kZXJUdXJuPT09dW5kZWZpbmVkPyBQSS8yOiBiaW5kZXJUdXJuKTtcclxuICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSB0aGlzLmdldFBvaW50c0F0QW5nbGVBbmRIcyhwb2ludHMsIGluQW5nbGUsIGhBbmdsZSwgW2hsL3Byb3BzLndpZHRoLCBoci9wcm9wcy53aWR0aF0pO1xyXG4gICAgaWYodGhpcy5hbmdsZT5QSS8yKSB7XHJcbiAgICAgIHRoaXMuaW52ZXJzZShsZWZ0KTtcclxuICAgICAgdGhpcy5pbnZlcnNlKHJpZ2h0KTtcclxuICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0UG9pbnRzKGxlZnQsIHJpZ2h0LCBvZmZzZXQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UG9pbnRzKGxlZnQsIHJpZ2h0LCBvZmZzZXQpIHtcclxuICAgIGNvbnN0IHAgPSB0aGlzLmdldFByb3BzKCk7XHJcbiAgICBsZXQgaSA9IDA7XHJcblxyXG4gICAgY29uc3QgeXMgPSBbcmlnaHQsIGxlZnRdO1xyXG4gICAgZm9yKGxldCB5ID0gMDsgeTxzaGVldEJsb2NrLnJlc1k7ICsreSkge1xyXG4gICAgICBmb3IobGV0IHogPSAwOyB6PHNoZWV0QmxvY2sucmVzWjsgKyt6KSB7XHJcbiAgICAgICAgZm9yKGxldCB4ID0gMDsgeDxzaGVldEJsb2NrLnJlc1g7ICsreCkge1xyXG4gICAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tpKytdLnNldChcclxuICAgICAgICAgICAgeXNbeV0ueFt4XSpwLndpZHRoK29mZnNldCxcclxuICAgICAgICAgICAgeXNbeV0ueVt4XSpwLndpZHRoLFxyXG4gICAgICAgICAgICB6KnAuaGVpZ2h0LyhzaGVldEJsb2NrLnJlc1otMSktMC41KnAuaGVpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoaSE9PXRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybignc2V0UG9pbnRzOiBiYWQgbWFwcGluZyEnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmNvcm5lci51c2UgJiYgIXRoaXMuY29ybmVyLnBvaW50cy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcGxhbmUgPSBuZXcgVEhSRUUuUGxhbmUoKSwgbm9ybWFsID0gcGxhbmUubm9ybWFsLCBwbGFuZU9mZnNldCA9ICgxLXRoaXMuZ2V0UHJvcHMoKS5mbGV4aWJsZUNvcm5lcikqTWF0aC5taW4ocC53aWR0aCwgcC5oZWlnaHQpLCBwcm9qID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgcGxhbmUuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQobmV3IFRIUkVFLlZlY3RvcjMoLTEsMCwtMSkubm9ybWFsaXplKCksIG5ldyBUSFJFRS5WZWN0b3IzKHBsYW5lT2Zmc2V0K29mZnNldCwgMCwgMC41KnAuaGVpZ2h0KSk7XHJcbiAgICAgIGZvcihsZXQgaT0wLCBsPXRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoO2k8bDsrK2kpIHtcclxuICAgICAgICBwbGFuZS5wcm9qZWN0UG9pbnQodGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tpXSwgcHJvaik7XHJcbiAgICAgICAgcHJvai5zdWIodGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tpXSk7XHJcbiAgICAgICAgaWYocHJvai54Km5vcm1hbC54K3Byb2oueSpub3JtYWwueStwcm9qLnoqbm9ybWFsLno+MCkge1xyXG4gICAgICAgICAgY29uc3QgZCA9IHByb2oubGVuZ3RoKCkvcGxhbmVPZmZzZXQ7XHJcbiAgICAgICAgICB0aGlzLmNvcm5lci5tYXhEaXN0YW5jZSA9IE1hdGgubWF4KHRoaXMuY29ybmVyLm1heERpc3RhbmNlLCBkKTtcclxuICAgICAgICAgIHRoaXMuY29ybmVyLnBvaW50cy5wdXNoKHt2ZXJ0ZXg6IGksIGRpc3RhbmNlOiBkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5jb3JuZXIudXNlICYmIE1hdGguYWJzKHRoaXMuY29ybmVyLmhlaWdodCk+MWUtMykge1xyXG4gICAgICBjb25zdCBkMkFuZ2xlID0gKGQpPT4gcC5jb3JuZXJEZXZpYXRpb24qdGhpcy5jb3JuZXIuaGVpZ2h0LygxK01hdGguZXhwKC1wLmJlbmRpbmcqKGQtMC41KnRoaXMuY29ybmVyLm1heERpc3RhbmNlKSkpO1xyXG4gICAgICB0aGlzLmNvcm5lci5heGlzLnNldCgtMSwwLDEpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICB0aGlzLmNvcm5lci5heGlzLmFwcGx5QXhpc0FuZ2xlKHRoaXMuY29ybmVyLk9aLCB0aGlzLmFuZ2xlKTtcclxuICAgICAgZm9yKGxldCBwb2ludCBvZiB0aGlzLmNvcm5lci5wb2ludHMpIHtcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3BvaW50LnZlcnRleF0uYXBwbHlBeGlzQW5nbGUodGhpcy5jb3JuZXIuYXhpcywgZDJBbmdsZShwb2ludC5kaXN0YW5jZSkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IG0gb2YgdGhpcy5tYXJrZXJzKSB7XHJcbiAgICAgIG0ubWFya2VyLnBvc2l0aW9uLmNvcHkodGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1ttLnZlcnRleF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VvbWV0cnkuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgIC8vdGhpcy5nZW9tZXRyeS5jb21wdXRlRmFjZU5vcm1hbHMoKTtcclxuICAgIHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XHJcbiAgICAvL3RoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgaWYodGhpcy5tYXJrdXApIHtcclxuICAgICAgdGhpcy5tYXJrdXAuY29tcHV0ZVZlcnRpY2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZlcnNlKHBzKSB7XHJcbiAgICBmb3IobGV0IGkgPSAwO2k8cHMueC5sZW5ndGg7ICsraSkge1xyXG4gICAgICBwcy54W2ldPS1wcy54W2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9pbnRzQXRIcyhwcywgYW5nbGUsIGhzKSB7XHJcbiAgICBjb25zdCBOID0gMTAwMDtcclxuICAgIE1hdGhVdGlscy5zZXRTcGxpbmVQb2ludHModGhpcy5wU3BsaW5lLCBwcyk7XHJcbiAgICBsZXQgYmwgPSBNYXRoVXRpbHMuc3BsaXRTcGxpbmUodGhpcy5wU3BsaW5lLCBOKSwgcj1bXTtcclxuICAgIHtcclxuICAgICAgY29uc3QgcDEgPSB7Li4udGhpcy5wU3BsaW5lLmdldFBvaW50KChOLTEpL04pfSwgcDIgPSB7Li4udGhpcy5wU3BsaW5lLmdldFBvaW50KDEpfSxcclxuICAgICAgICBkcCA9IHt4OiBwMi54LXAxLngsIHk6IHAyLnktcDEueX0sIGxuID0gTWF0aC5zcXJ0KGRwLngqZHAueCtkcC55KmRwLnkpLFxyXG4gICAgICAgIHNwID0gdGhpcy5wU3BsaW5lLnBvaW50c1t0aGlzLnBTcGxpbmUucG9pbnRzLmxlbmd0aC0xXTtcclxuICAgICAgc3Auc2V0KHNwLngrMC4xKmRwLngvbG4sIHNwLnkrMC4xKmRwLnkvbG4sIDApO1xyXG4gICAgICBibCA9IE1hdGhVdGlscy5zcGxpdFNwbGluZSh0aGlzLnBTcGxpbmUsIE4pO1xyXG4gICAgfVxyXG4gICAgYmwubHMucHVzaCgxZTcpO1xyXG4gICAgTWF0aFV0aWxzLm1hcGwyTChibC5scywgYmwubGVuLCBzaGVldEJsb2NrLnJlc1gsIChpKT0+IHtcclxuICAgICAgZm9yKGxldCBqPTA7IGo8aHMubGVuZ3RoOyArK2opIHtcclxuICAgICAgICBpZighaSkge1xyXG4gICAgICAgICAgcltqXSA9IHt4OiBbLWhzW2pdKk1hdGguc2luKGFuZ2xlKV0sIHk6IFtoc1tqXSpNYXRoLmNvcyhhbmdsZSldfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBwMCA9IHsuLi50aGlzLnBTcGxpbmUuZ2V0UG9pbnQoKGktMSkvTil9LFxyXG4gICAgICAgICAgICAgICAgcDEgPSB0aGlzLnBTcGxpbmUuZ2V0UG9pbnQoaS9OKSxcclxuICAgICAgICAgICAgICAgIHg9LShwMS55LXAwLnkpLCB5PShwMS54LXAwLngpLCBsPU1hdGguc3FydCh4KngreSp5KTtcclxuICAgICAgICAgIHJbal0ueC5wdXNoKHAxLngreC9sKmhzW2pdKTtcclxuICAgICAgICAgIHJbal0ueS5wdXNoKHAxLnkreS9sKmhzW2pdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG5wcz1bXTtcclxuICAgIGZvcihsZXQgaj0wOyBqPGhzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgIG5wc1tqXT17eDpbXSx5OltdfTtcclxuICAgICAgTWF0aFV0aWxzLnNldFNwbGluZVBvaW50cyh0aGlzLmlTcGxpbmUsIHJbal0pO1xyXG4gICAgICBjb25zdCBsID0gTWF0aFV0aWxzLnNwbGl0U3BsaW5lKHRoaXMuaVNwbGluZSwgTik7XHJcbiAgICAgIGwubHMucHVzaCgxZTcpO1xyXG4gICAgICBNYXRoVXRpbHMubWFwbDJMKGwubHMsIDEsIHNoZWV0QmxvY2sucmVzWCwgKGkpPT4ge1xyXG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLmlTcGxpbmUuZ2V0UG9pbnQoaS9OKTtcclxuICAgICAgICBucHNbal0ueC5wdXNoKHAueCk7XHJcbiAgICAgICAgbnBzW2pdLnkucHVzaChwLnkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBucHM7XHJcbiAgfVxyXG5cclxuICBnZXRQb2ludHNBdEFuZ2xlQW5kSHMocG9pbnRzLCBhbmdsZSwgaEFuZ2xlLCBocykge1xyXG4gICAgY29uc3QgcHMgPSB0aGlzLmdldFBvaW50c0F0QW5nbGUocG9pbnRzLCBhbmdsZSk7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQb2ludHNBdEhzKHBzLCBoQW5nbGUsIGhzKTtcclxuICB9XHJcblxyXG4gIGdldFBvaW50c0F0QW5nbGUocG9pbnRzLCBhbmdsZSkge1xyXG4gICAgY29uc3QgcHM9e3g6IFtdLCB5OltdfSwgYW5nbGVzPVtdO1xyXG4gICAgYW5nbGUvPU1hdGguUEkvMjtcclxuICAgIGZvcihsZXQgaiA9IDA7IGo8cG9pbnRzLngubGVuZ3RoOyArK2opIHtcclxuICAgICAgYW5nbGVzLnB1c2goai8ocG9pbnRzLngubGVuZ3RoLTEpKTtcclxuICAgIH1cclxuICAgIGZvcihsZXQgaSA9IDA7IGk8cG9pbnRzLnhbMF0ubGVuZ3RoOyArK2kpIHtcclxuICAgICAgY29uc3QgeHBzID0gW10sIHlwcyA9IFtdO1xyXG4gICAgICBmb3IobGV0IGogPSAwOyBqPHBvaW50cy54Lmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgeHBzLnB1c2gocG9pbnRzLnhbal1baV0pO1xyXG4gICAgICAgIHlwcy5wdXNoKHBvaW50cy55W2pdW2ldKTtcclxuICAgICAgfVxyXG4gICAgICBwcy54LnB1c2godGhpcy5pbnRlcnBvbGF0ZShhbmdsZXMseHBzLGFuZ2xlKSk7XHJcbiAgICAgIHBzLnkucHVzaCh0aGlzLmludGVycG9sYXRlKGFuZ2xlcyx5cHMsYW5nbGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcztcclxuICB9XHJcblxyXG4gIGludGVycG9sYXRlKHgseSx4aSkge1xyXG4gICAgaWYoIXRoaXMuYVNwbGluZXNbeC5sZW5ndGhdKSB7XHJcbiAgICAgIHRoaXMuYVNwbGluZXNbeC5sZW5ndGhdID0gbmV3IFRIUkVFLlNwbGluZShbXSk7XHJcbiAgICAgIGNvbnN0IHBzID0gdGhpcy5hU3BsaW5lc1t4Lmxlbmd0aF0ucG9pbnRzO1xyXG4gICAgICBmb3IobGV0IGk9MDtpPHgubGVuZ3RoOysraSkge1xyXG4gICAgICAgIHBzLnB1c2gobmV3IFRIUkVFLlZlY3RvcjMoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHNwbGluZSA9IHRoaXMuYVNwbGluZXNbeC5sZW5ndGhdO1xyXG4gICAgZm9yKGxldCBpPTA7aTx4Lmxlbmd0aDsrK2kpIHtcclxuICAgICAgc3BsaW5lLnBvaW50c1tpXS5zZXQoeFtpXSwgeVtpXSwgMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3BsaW5lLmdldFBvaW50KE1hdGgubWluKDEsIE1hdGgubWF4KHhpLCAwKSkpLnk7XHJcbiAgfVxyXG5cclxuICBsb2FkUG9pbnRzKCkge1xyXG4gICAgY29uc3QgeD1bXSx5PVtdO1xyXG4gICAgZm9yKGxldCByIG9mIFswLCAwLjI4NzcsIDAuNjM0NywgMC44MTc0LCAxLjAwMDBdKSB7XHJcbiAgICAgIHgucHVzaChyKk1hdGguY29zKDAuOSpNYXRoLlBJLzQpKTtcclxuICAgICAgeS5wdXNoKHIqTWF0aC5zaW4oMC45Kk1hdGguUEkvNCkpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFsyLDMsNF0sXHJcbiAgICAgIFsyLDMsNCw1LDZdXHJcbiAgICBdLFxyXG4gICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFswLDEsMl0sXHJcbiAgICAgIFswLDEsMl1cclxuICAgIF0sXHJcbiAgICBmbGF0SW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFs1LDRdLFxyXG4gICAgICBbNyw2XVxyXG4gICAgXSxcclxuICAgIGludGVycG9sYXRpb25Qb2ludHMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICB4OiBbXHJcbiAgICAgICAgICBbMCwwLjI4NzcsMC42MzQ3LDAuODE3NCwxLjAwMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjg2LDAuNjMyLDAuODE1LDAuOTk3XSxcclxuICAgICAgICAgIFswLjAwMCwwLjI3OSwwLjYyMywwLjgwNiwwLjk4OF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4xMjYsMC40MTEsMC41OTMsMC43NzRdLFxyXG4gICAgICAgICAgWzAsMCwwLDAsMF0sXHJcbiAgICAgICAgICB4XHJcbiAgICAgICAgXSxcclxuICAgICAgICB5OiBbXHJcbiAgICAgICAgICBbMCwwLDAsMCwwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjAzMCwwLjAxMCwwLjAwMiwwLjAwMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4wNjAsMC4wMTcsMC4wMDQsMC4wMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjU5LDAuNDQwLDAuNDQ2LDAuNDI5XSxcclxuICAgICAgICAgIFswLCAwLjI4NzcsIDAuNjM0NywgMC44MTc0LCAxLjAwMDBdLFxyXG4gICAgICAgICAgeVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHg6IFtcclxuICAgICAgICAgIFswLDAuMjg3NywwLjYzNDcsMC44MTc0LDEuMDAwMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4yODYsMC42MzIsMC44MTUsMC45OTddLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjc5LDAuNjIzLDAuODA2LDAuOTg4XSxcclxuICAgICAgICAgIFswLjAwMCwwLjIzMywwLjU2MywwLjc0NiwwLjkyN10sXHJcbiAgICAgICAgICBbMC4wMDAsMC4xNDQsMC40MzMsMC42MTMsMC43OTZdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMDcwLDAuMjg4LDAuNDU1LDAuNjI2XSxcclxuICAgICAgICAgIFswLDAsMCwwLDBdLFxyXG4gICAgICAgICAgeFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgeTogW1xyXG4gICAgICAgICAgWzAsMCwwLDAsMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4wMzAsMC4wMTAsMC4wMDIsMC4wMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMDYwLDAuMDE3LDAuMDA0LDAuMDAwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjE2OCwwLjI2OSwwLjI3MCwwLjI1NV0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4yNDUsMC40MzUsMC40NTgsMC40NjBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjc4LDAuNTQ0LDAuNjE0LDAuNjczXSxcclxuICAgICAgICAgIFswLCAwLjI4NzcsIDAuNjM0NywgMC44MTc0LCAxLjAwMDBdLFxyXG4gICAgICAgICAgeVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpbnRlcnBvbGF0aW9uUG9pbnRzLFxyXG4gICAgICBvcGVuZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyxcclxuICAgICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMsXHJcbiAgICAgIGZsYXRJbnRlcnBvbGF0aW9uSW5kZWNlc1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9TaGVldEJsb2NrLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9TaGVldEJsb2NrLmpzIiwiXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9wcygpIHtcclxuICAvLyBjb25zdCBwcm9wcyA9IHtcclxuICAvLyAgIGhlaWdodCxcclxuICAvLyAgIHdpZHRoLFxyXG4gIC8vICAgZ3Jhdml0eSxcclxuICAvLyAgIGluamVjdG9yLFxyXG4gIC8vICAgY2FjaGVkUGFnZXMsXHJcbiAgLy8gICByZW5kZXJJbmFjdGl2ZVBhZ2VzLFxyXG4gIC8vICAgcmVuZGVyV2hpbGVGbGlwcGluZyxcclxuICAvLyAgIHBhZ2VzRm9yUHJlZGljdGluZyxcclxuICAvLyAgIHByZWxvYWRQYWdlcyxcclxuICAvLyAgIHNoZWV0OiB7XHJcbiAgLy8gICAgIHN0YXJ0VmVsb2NpdHksXHJcbiAgLy8gICAgIGNvcm5lckRldmlhdGlvbixcclxuICAvLyAgICAgZmxleGliaWxpdHksXHJcbiAgLy8gICAgIGZsZXhpYmxlQ29ybmVyLFxyXG4gIC8vICAgICBiZW5kaW5nLFxyXG4gIC8vICAgICB3YXZlLFxyXG4gIC8vICAgICBzaGFwZSxcclxuICAvLyAgICAgd2lkdGhUZXhlbHMsXHJcbiAgLy8gICAgIGhlaWdodFRleGVscyxcclxuICAvLyAgICAgY29sb3IsXHJcbiAgLy8gICAgIHNpZGVUZXh0dXJlXHJcbiAgLy8gICB9LFxyXG4gIC8vICAgY292ZXI6IHtcclxuICAvLyAgICAgLi4uc2hlZXQsXHJcbiAgLy8gICAgIHBhZGRpbmcsXHJcbiAgLy8gICAgIGJpbmRlclRleHR1cmUsXHJcbiAgLy8gICAgIGRlcHRoLFxyXG4gIC8vICAgICBtYXNzXHJcbiAgLy8gICB9LFxyXG4gIC8vICAgcGFnZToge1xyXG4gIC8vICAgICAuLi5zaGVldCxcclxuICAvLyAgICAgZGVwdGgsXHJcbiAgLy8gICAgIG1hc3NcclxuICAvLyAgIH1cclxuICAvLyB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaGVpZ2h0OiAwLjI5NyxcclxuICAgIHdpZHRoOiAwLjIxLFxyXG4gICAgZ3Jhdml0eTogMSxcclxuICAgIGNhY2hlZFBhZ2VzOiA1MCxcclxuICAgIHJlbmRlckluYWN0aXZlUGFnZXM6IHRydWUsXHJcbiAgICByZW5kZXJJbmFjdGl2ZVBhZ2VzT25Nb2JpbGU6IGZhbHNlLFxyXG4gICAgcmVuZGVyV2hpbGVGbGlwcGluZzogZmFsc2UsXHJcbiAgICBwYWdlc0ZvclByZWRpY3Rpbmc6IDUsXHJcbiAgICBwcmVsb2FkUGFnZXM6IDUsXHJcbiAgICBydGw6IGZhbHNlLFxyXG4gICAgc2hlZXQ6IHtcclxuICAgICAgc3RhcnRWZWxvY2l0eTogMC45LFxyXG4gICAgICBjb3JuZXJEZXZpYXRpb246IDAuMjUsXHJcbiAgICAgIGZsZXhpYmlsaXR5OiAxMCxcclxuICAgICAgZmxleGlibGVDb3JuZXI6IDAuNSxcclxuICAgICAgYmVuZGluZzogMTEsXHJcbiAgICAgIHdhdmU6IDAuNSxcclxuICAgICAgc2hhcGU6IDAsXHJcbiAgICAgIHdpZHRoVGV4ZWxzOiA1KjIxMCxcclxuICAgICAgaGVpZ2h0VGV4ZWxzOiA1KjI5NyxcclxuICAgICAgY29sb3I6IDB4RkZGRkZGXHJcbiAgICB9LFxyXG4gICAgY292ZXI6IHtcclxuICAgICAgYmluZGVyVGV4dHVyZTogJycsXHJcbiAgICAgIGRlcHRoOiAwLjAwMDMsXHJcbiAgICAgIHBhZGRpbmc6IDAsXHJcbiAgICAgIG1hc3M6IDAuMDAzXHJcbiAgICB9LFxyXG4gICAgcGFnZToge1xyXG4gICAgICBkZXB0aDogMC4wMDAxLFxyXG4gICAgICBtYXNzOiAwLjAwMVxyXG4gICAgfSxcclxuICAgIGNzc0xheWVyUHJvcHM6IHtcclxuICAgICAgd2lkdGg6IDEwMjRcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wcm9wcy9ib29rLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvcHJvcHMvYm9vay5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuVEhSRUUuQ1NTM0RPYmplY3QgPSBjbGFzcyBDU1MzRE9iamVjdCBleHRlbmRzIFRIUkVFLk9iamVjdDNEIHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50PXVuZGVmaW5lZCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIFxyXG4gICAgaWYoZWxlbWVudCkge1xyXG4gICAgICB0aGlzLnNldChlbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldChlbGVtZW50KSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gIFx0dGhpcy5lbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuXHJcbiAgXHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3JlbW92ZWQnLCBmdW5jdGlvbigpIHtcclxuICBcdFx0aWYgKHRoaXMuZWxlbWVudC5wYXJlbnROb2RlICE9PSBudWxsKSB7XHJcbiAgXHRcdFx0dGhpcy5lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50KTtcclxuICBcdFx0fVxyXG4gIFx0fSk7XHJcbiAgfVxyXG59O1xyXG5cclxuVEhSRUUuQ1NTM0RTcHJpdGUgPSBjbGFzcyBDU1MzRFNwcml0ZSBleHRlbmRzIFRIUkVFLkNTUzNET2JqZWN0IHtcclxuICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XHJcbiAgICBzdXBlcihlbGVtZW50KTtcclxuICB9XHJcbn07XHJcblxyXG5USFJFRS5DU1MzRFJlbmRlcmVyID0gY2xhc3MgQ1NTM0RSZW5kZXJlciB7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gIFx0dmFyIF93aWR0aCwgX2hlaWdodDtcclxuICBcdHZhciBfd2lkdGhIYWxmLCBfaGVpZ2h0SGFsZjtcclxuXHJcbiAgXHR2YXIgbWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcclxuXHJcbiAgXHR2YXIgY2FjaGUgPSB7XHJcbiAgXHRcdGNhbWVyYTogeyBmb3Y6IDAsIHN0eWxlOiAnJyB9LFxyXG4gIFx0XHRvYmplY3RzOiB7fVxyXG4gIFx0fTtcclxuXHJcbiAgXHR2YXIgZG9tRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdkaXYnKTtcclxuICBcdGRvbUVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcclxuXHJcbiAgXHR0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xyXG5cclxuICBcdHZhciBjYW1lcmFFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicpO1xyXG5cclxuICBcdGNhbWVyYUVsZW1lbnQuc3R5bGUuV2Via2l0VHJhbnNmb3JtU3R5bGUgPSAncHJlc2VydmUtM2QnO1xyXG4gIFx0Y2FtZXJhRWxlbWVudC5zdHlsZS5Nb3pUcmFuc2Zvcm1TdHlsZSA9ICdwcmVzZXJ2ZS0zZCc7XHJcbiAgXHRjYW1lcmFFbGVtZW50LnN0eWxlLnRyYW5zZm9ybVN0eWxlID0gJ3ByZXNlcnZlLTNkJztcclxuXHJcbiAgXHRkb21FbGVtZW50LmFwcGVuZENoaWxkKCBjYW1lcmFFbGVtZW50KTtcclxuXHJcbiAgXHR2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdCggbmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcblxyXG4gIFx0dGhpcy5zZXRDbGVhckNvbG9yID0gZnVuY3Rpb24gKCkge307XHJcblxyXG4gIFx0dGhpcy5nZXRTaXplID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICBcdFx0cmV0dXJuIHtcclxuICBcdFx0XHR3aWR0aDogX3dpZHRoLFxyXG4gIFx0XHRcdGhlaWdodDogX2hlaWdodFxyXG4gIFx0XHR9O1xyXG5cclxuICBcdH07XHJcblxyXG4gIFx0dGhpcy5zZXRTaXplID0gZnVuY3Rpb24od2lkdGgsIGhlaWdodCkge1xyXG5cclxuICBcdFx0X3dpZHRoID0gd2lkdGg7XHJcbiAgXHRcdF9oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgXHRcdF93aWR0aEhhbGYgPSBfd2lkdGggLyAyO1xyXG4gIFx0XHRfaGVpZ2h0SGFsZiA9IF9oZWlnaHQgLyAyO1xyXG5cclxuICBcdFx0ZG9tRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcclxuICBcdFx0ZG9tRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xyXG5cclxuICBcdFx0Y2FtZXJhRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgJ3B4JztcclxuICBcdFx0Y2FtZXJhRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xyXG5cclxuICBcdH07XHJcblxyXG4gIFx0ZnVuY3Rpb24gZXBzaWxvbiggdmFsdWUpIHtcclxuXHJcbiAgXHRcdHJldHVybiBNYXRoLmFicyggdmFsdWUpIDwgMWUtMTAgPyAwIDogdmFsdWU7XHJcblxyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIGdldENhbWVyYUNTU01hdHJpeCggbWF0cml4KSB7XHJcblxyXG4gIFx0XHR2YXIgZWxlbWVudHMgPSBtYXRyaXguZWxlbWVudHM7XHJcblxyXG4gIFx0XHRyZXR1cm4gJ21hdHJpeDNkKCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAwIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyAxIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMiBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDMgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyA0IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyA1IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgNiBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDcgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyA4IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyA5IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTAgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxMSBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDEyIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyAxMyBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDE0IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTUgXSkgK1xyXG4gIFx0XHQnKSc7XHJcblxyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIGdldE9iamVjdENTU01hdHJpeCggbWF0cml4LCBjYW1lcmFDU1NNYXRyaXgpIHtcclxuXHJcbiAgXHRcdHZhciBlbGVtZW50cyA9IG1hdHJpeC5lbGVtZW50cztcclxuICBcdFx0dmFyIG1hdHJpeDNkID0gJ21hdHJpeDNkKCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAwIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMSBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDIgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAzIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyA0IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyA1IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyA2IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCAtIGVsZW1lbnRzWyA3IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgOCBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDkgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxMCBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDExIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTIgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxMyBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDE0IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTUgXSkgK1xyXG4gIFx0XHQnKSc7XHJcblxyXG4gIFx0XHRpZihpc0lFKSB7XHJcblxyXG4gIFx0XHRcdHJldHVybiAndHJhbnNsYXRlKC01MCUsLTUwJSknICtcclxuICBcdFx0XHRcdCd0cmFuc2xhdGUoJyArIF93aWR0aEhhbGYgKyAncHgsJyArIF9oZWlnaHRIYWxmICsgJ3B4KScgK1xyXG4gIFx0XHRcdFx0Y2FtZXJhQ1NTTWF0cml4ICtcclxuICBcdFx0XHRcdG1hdHJpeDNkO1xyXG5cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuICd0cmFuc2xhdGUoLTUwJSwtNTAlKScgKyBtYXRyaXgzZDtcclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gcmVuZGVyT2JqZWN0KCBvYmplY3QsIGNhbWVyYSwgY2FtZXJhQ1NTTWF0cml4KSB7XHJcblxyXG4gIFx0XHRpZihvYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5DU1MzRE9iamVjdCkge1xyXG5cclxuICBcdFx0XHR2YXIgc3R5bGU7XHJcblxyXG4gIFx0XHRcdGlmKG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkNTUzNEU3ByaXRlKSB7XHJcbiAgXHRcdFx0XHRtYXRyaXguY29weSggY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XHJcbiAgXHRcdFx0XHRtYXRyaXgudHJhbnNwb3NlKCk7XHJcbiAgXHRcdFx0XHRtYXRyaXguY29weVBvc2l0aW9uKCBvYmplY3QubWF0cml4V29ybGQpO1xyXG4gIFx0XHRcdFx0bWF0cml4LnNjYWxlKCBvYmplY3Quc2NhbGUpO1xyXG5cclxuICBcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1sgMyBdID0gMDtcclxuICBcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1sgNyBdID0gMDtcclxuICBcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1sgMTEgXSA9IDA7XHJcbiAgXHRcdFx0XHRtYXRyaXguZWxlbWVudHNbIDE1IF0gPSAxO1xyXG5cclxuICBcdFx0XHRcdHN0eWxlID0gZ2V0T2JqZWN0Q1NTTWF0cml4KCBtYXRyaXgsIGNhbWVyYUNTU01hdHJpeCk7XHJcblxyXG4gIFx0XHRcdH0gZWxzZSB7XHJcblxyXG4gIFx0XHRcdFx0c3R5bGUgPSBnZXRPYmplY3RDU1NNYXRyaXgoIG9iamVjdC5tYXRyaXhXb3JsZCwgY2FtZXJhQ1NTTWF0cml4KTtcclxuXHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHR2YXIgZWxlbWVudCA9IG9iamVjdC5lbGVtZW50O1xyXG4gIFx0XHRcdHZhciBjYWNoZWRTdHlsZSA9IGNhY2hlLm9iamVjdHNbIG9iamVjdC5pZCBdICYmIGNhY2hlLm9iamVjdHNbIG9iamVjdC5pZCBdLnN0eWxlO1xyXG5cclxuICBcdFx0XHRpZihjYWNoZWRTdHlsZSA9PT0gdW5kZWZpbmVkIHx8IGNhY2hlZFN0eWxlICE9PSBzdHlsZSkge1xyXG4gIFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5XZWJraXRUcmFuc2Zvcm0gPSBzdHlsZTtcclxuICBcdFx0XHRcdGVsZW1lbnQuc3R5bGUuTW96VHJhbnNmb3JtID0gc3R5bGU7XHJcbiAgXHRcdFx0XHRlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IHN0eWxlO1xyXG5cclxuICBcdFx0XHRcdGNhY2hlLm9iamVjdHNbIG9iamVjdC5pZCBdID0geyBzdHlsZTogc3R5bGUgfTtcclxuICBcdFx0XHRcdGlmKGlzSUUpIHtcclxuICBcdFx0XHRcdFx0Y2FjaGUub2JqZWN0c1sgb2JqZWN0LmlkIF0uZGlzdGFuY2VUb0NhbWVyYVNxdWFyZWQgPSBnZXREaXN0YW5jZVRvU3F1YXJlZCggY2FtZXJhLCBvYmplY3QpO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0aWYoZWxlbWVudC5wYXJlbnROb2RlICE9PSBjYW1lcmFFbGVtZW50KSB7XHJcbiAgXHRcdFx0XHRjYW1lcmFFbGVtZW50LmFwcGVuZENoaWxkKCBlbGVtZW50KTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZvcih2YXIgaSA9IDAsIGwgPSBvYmplY3QuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSArKykge1xyXG5cclxuICBcdFx0XHRyZW5kZXJPYmplY3QoIG9iamVjdC5jaGlsZHJlblsgaSBdLCBjYW1lcmEsIGNhbWVyYUNTU01hdHJpeCk7XHJcblxyXG4gIFx0XHR9XHJcblxyXG4gIFx0fVxyXG5cclxuICBcdHZhciBnZXREaXN0YW5jZVRvU3F1YXJlZCA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdHZhciBhID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBcdFx0dmFyIGIgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG5cclxuICBcdFx0cmV0dXJuIGZ1bmN0aW9uKG9iamVjdDEsIG9iamVjdDIpIHtcclxuXHJcbiAgXHRcdFx0YS5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG9iamVjdDEubWF0cml4V29ybGQpO1xyXG4gIFx0XHRcdGIuc2V0RnJvbU1hdHJpeFBvc2l0aW9uKCBvYmplY3QyLm1hdHJpeFdvcmxkKTtcclxuXHJcbiAgXHRcdFx0cmV0dXJuIGEuZGlzdGFuY2VUb1NxdWFyZWQoIGIpO1xyXG5cclxuICBcdFx0fTtcclxuXHJcbiAgXHR9KCk7XHJcblxyXG4gIFx0ZnVuY3Rpb24gek9yZGVyKCBzY2VuZSkge1xyXG5cclxuICBcdFx0dmFyIG9yZGVyID0gT2JqZWN0LmtleXMoIGNhY2hlLm9iamVjdHMpLnNvcnQoIGZ1bmN0aW9uKGEsIGIpIHtcclxuXHJcbiAgXHRcdFx0cmV0dXJuIGNhY2hlLm9iamVjdHNbIGEgXS5kaXN0YW5jZVRvQ2FtZXJhU3F1YXJlZCAtIGNhY2hlLm9iamVjdHNbIGIgXS5kaXN0YW5jZVRvQ2FtZXJhU3F1YXJlZDtcclxuXHJcbiAgXHRcdH0pO1xyXG4gIFx0XHR2YXIgek1heCA9IG9yZGVyLmxlbmd0aDtcclxuXHJcbiAgXHRcdHNjZW5lLnRyYXZlcnNlKCBmdW5jdGlvbihvYmplY3QpIHtcclxuXHJcbiAgXHRcdFx0dmFyIGluZGV4ID0gb3JkZXIuaW5kZXhPZiggb2JqZWN0LmlkICsgJycpO1xyXG5cclxuICBcdFx0XHRpZihpbmRleCAhPT0gLSAxKSB7XHJcblxyXG4gIFx0XHRcdFx0b2JqZWN0LmVsZW1lbnQuc3R5bGUuekluZGV4ID0gek1heCAtIGluZGV4O1xyXG5cclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHR9KTtcclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0dGhpcy5yZW5kZXIgPSBmdW5jdGlvbihzY2VuZSwgY2FtZXJhKSB7XHJcblxyXG4gIFx0XHR2YXIgZm92ID0gY2FtZXJhLnByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbIDUgXSAqIF9oZWlnaHRIYWxmO1xyXG5cclxuICBcdFx0aWYoY2FjaGUuY2FtZXJhLmZvdiAhPT0gZm92KSB7XHJcblxyXG4gIFx0XHRcdGRvbUVsZW1lbnQuc3R5bGUuV2Via2l0UGVyc3BlY3RpdmUgPSBmb3YgKyAncHgnO1xyXG4gIFx0XHRcdGRvbUVsZW1lbnQuc3R5bGUuTW96UGVyc3BlY3RpdmUgPSBmb3YgKyAncHgnO1xyXG4gIFx0XHRcdGRvbUVsZW1lbnQuc3R5bGUucGVyc3BlY3RpdmUgPSBmb3YgKyAncHgnO1xyXG5cclxuICBcdFx0XHRjYWNoZS5jYW1lcmEuZm92ID0gZm92O1xyXG5cclxuICBcdFx0fVxyXG5cclxuICBcdFx0c2NlbmUudXBkYXRlTWF0cml4V29ybGQoKTtcclxuXHJcbiAgXHRcdGlmKGNhbWVyYS5wYXJlbnQgPT09IG51bGwpIGNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG5cclxuICBcdFx0dmFyIGNhbWVyYUNTU01hdHJpeCA9ICd0cmFuc2xhdGVaKCcgKyBmb3YgKyAncHgpJyArXHJcbiAgXHRcdFx0Z2V0Q2FtZXJhQ1NTTWF0cml4KCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcclxuXHJcbiAgXHRcdHZhciBzdHlsZSA9IGNhbWVyYUNTU01hdHJpeCArXHJcbiAgXHRcdFx0J3RyYW5zbGF0ZSgnICsgX3dpZHRoSGFsZiArICdweCwnICsgX2hlaWdodEhhbGYgKyAncHgpJztcclxuXHJcbiAgXHRcdGlmKGNhY2hlLmNhbWVyYS5zdHlsZSAhPT0gc3R5bGUgJiYgISBpc0lFKSB7XHJcblxyXG4gIFx0XHRcdGNhbWVyYUVsZW1lbnQuc3R5bGUuV2Via2l0VHJhbnNmb3JtID0gc3R5bGU7XHJcbiAgXHRcdFx0Y2FtZXJhRWxlbWVudC5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSBzdHlsZTtcclxuICBcdFx0XHRjYW1lcmFFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IHN0eWxlO1xyXG5cclxuICBcdFx0XHRjYWNoZS5jYW1lcmEuc3R5bGUgPSBzdHlsZTtcclxuXHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJlbmRlck9iamVjdCggc2NlbmUsIGNhbWVyYSwgY2FtZXJhQ1NTTWF0cml4KTtcclxuXHJcbiAgXHRcdGlmKGlzSUUpIHtcclxuXHJcbiAgXHRcdFx0Ly8gSUUxMCBhbmQgMTEgZG9lcyBub3Qgc3VwcG9ydCAncHJlc2VydmUtM2QnLlxyXG4gIFx0XHRcdC8vIFRodXMsIHotb3JkZXIgaW4gM0Qgd2lsbCBub3Qgd29yay5cclxuICBcdFx0XHQvLyBXZSBoYXZlIHRvIGNhbGMgei1vcmRlciBtYW51YWxseSBhbmQgc2V0IENTUyB6LWluZGV4IGZvciBJRS5cclxuICBcdFx0XHQvLyBGWUk6IHotaW5kZXggY2FuJ3QgaGFuZGxlIG9iamVjdCBpbnRlcnNlY3Rpb25cclxuICBcdFx0XHR6T3JkZXIoIHNjZW5lKTtcclxuXHJcbiAgXHRcdH1cclxuXHJcbiAgXHR9O1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFRIUkVFLkNTUzNEUmVuZGVyZXI7XHJcblxyXG5jb25zdCBfQ1NTM0RPYmplY3QgPSBUSFJFRS5DU1MzRE9iamVjdCwgX0NTUzNEU3ByaXRlID0gVEhSRUUuQ1NTM0RTcHJpdGU7XHJcbmV4cG9ydCB7XHJcbiAgX0NTUzNET2JqZWN0IGFzIENTUzNET2JqZWN0LFxyXG4gIF9DU1MzRFNwcml0ZSBhcyBDU1MzRFNwcml0ZVxyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9DU1MzRFJlbmRlcmVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvQ1NTM0RSZW5kZXJlci5qcyIsImltcG9ydCB7VEhSRUUsICR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQge0NTUzNET2JqZWN0fSBmcm9tICcuL0NTUzNEUmVuZGVyZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ1NTTGF5ZXIgZXh0ZW5kcyBDU1MzRE9iamVjdCB7XHJcblxyXG4gIHN0YXRpYyBkZWxheTtcclxuICBzdGF0aWMgc3R5bGU7XHJcbiAgc3RhdGljIGluaXQoZG9jLCBkZWxheT0xNTApIHtcclxuICAgIENTU0xheWVyLmRlbGF5ID0gZGVsYXk7XHJcbiAgICBDU1NMYXllci5zdHlsZSA9ICQoYDxzdHlsZSB0eXBlPXRleHQvY3NzPlxyXG4gICAgICAuY3NzLWxheWVyIHtcclxuICAgIFx0XHRvcGFjaXR5OiAxO1xyXG4gICAgXHRcdHRyYW5zaXRpb246IG9wYWNpdHkgJHtkZWxheX1tcyBlYXNlLW91dDtcclxuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xyXG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICBcdH1cclxuICAgIFx0LmNzcy1sYXllci5oaWRkZW4ge1xyXG4gICAgXHRcdHRyYW5zaXRpb246IG9wYWNpdHkgJHtkZWxheX1tcyBlYXNlLWluLCB2aXNpYmlsaXR5ICR7ZGVsYXl9bXMgc3RlcC1lbmQ7XHJcbiAgICBcdFx0b3BhY2l0eTogMDtcclxuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XHJcbiAgICAgIH1cclxuICAgIDwvc3R5bGU+YCkuYXBwZW5kVG8oZG9jLmhlYWQpO1xyXG4gIH1cclxuICBzdGF0aWMgZGlzcG9zZSgpIHtcclxuICAgIENTU0xheWVyLnN0eWxlLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3Iod2lkdGgsIGhlaWdodCwgcHJvcHMpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XHJcbiAgICB0aGlzLmpDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwiaGlkZGVuIGNzcy1sYXllclwiPjwvZGl2PicpO1xyXG4gIFx0Y29uc3Qgd2lkdGhQeHMgPSBwcm9wcy53aWR0aCwgaGVpZ2h0UHhzID0gaGVpZ2h0L3dpZHRoKndpZHRoUHhzO1xyXG4gICAgdGhpcy5qQ29udGFpbmVyLndpZHRoKHdpZHRoUHhzKS5oZWlnaHQoaGVpZ2h0UHhzKTtcclxuICBcdHRoaXMuc2NhbGUueCAvPSB3aWR0aFB4cy93aWR0aDtcclxuICBcdHRoaXMuc2NhbGUueSAvPSB3aWR0aFB4cy93aWR0aDtcclxuXHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICAgIHRoaXMuc2V0KHRoaXMuakNvbnRhaW5lclswXSk7XHJcbiAgfVxyXG5cclxuICBjYWxsSW50ZXJuYWwobmFtZSkge1xyXG4gICAgaWYodGhpcy5vYmplY3QgJiYgdGhpcy5vYmplY3RbbmFtZV0pIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLm9iamVjdFtuYW1lXSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jbGVhckludGVybmFscygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJJbnRlcm5hbHMoKSB7XHJcbiAgICB0aGlzLmNhbGxJbnRlcm5hbCgnZGlzcG9zZScpO1xyXG4gICAgIXRoaXMuY3NzIHx8IHRoaXMuY3NzLnJlbW92ZSgpO1xyXG4gICAgIXRoaXMuaHRtbCB8fCB0aGlzLmh0bWwucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBzZXREYXRhKGNzcz0nJywgaHRtbD0nJywganM9JycpIHtcclxuICAgIHRoaXMuY2xlYXJJbnRlcm5hbHMoKTtcclxuXHJcbiAgICB0aGlzLmNzcyA9ICQoYDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj4ke2Nzc308L3N0eWxlPmApLmFwcGVuZFRvKHRoaXMuakNvbnRhaW5lcik7XHJcbiAgICB0aGlzLmh0bWwgPSAkKGh0bWwpLmFwcGVuZFRvKHRoaXMuakNvbnRhaW5lcik7XHJcbiAgICBjb25zdCBpbml0ID0gZXZhbChqcyk7XHJcbiAgICBpZihpbml0KSB7XHJcbiAgICAgIHRoaXMub2JqZWN0ID0gaW5pdCh0aGlzLmpDb250YWluZXIsIHRoaXMucHJvcHMpIHx8IHt9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGVuZGVkQ2FsbChjbGIpIHtcclxuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHRoaXMudGltZXN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIGlmKHRpbWVzdGFtcD09PXRoaXMudGltZXN0YW1wKSB7XHJcbiAgICAgICAgY2xiKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIENTU0xheWVyLmRlbGF5KTtcclxuICB9XHJcblxyXG4gIGlzSGlkZGVuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuakNvbnRhaW5lci5oYXNDbGFzcygnaGlkZGVuJyk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgbGV0IHJlcztcclxuICAgIGlmKCF0aGlzLmlzSGlkZGVuKCkpIHtcclxuICAgICAgdGhpcy5qQ29udGFpbmVyLmFkZENsYXNzKCdoaWRkZW4nKTtcclxuICAgICAgdGhpcy5jYWxsSW50ZXJuYWwoJ2hpZGUnKTtcclxuICAgICAgcmVzID0gbmV3IFByb21pc2UoKHJlc29sdmUpPT4ge1xyXG4gICAgICAgIHRoaXMucGVuZGVkQ2FsbCgoKT0+IHtcclxuICAgICAgICAgIHRoaXMuY2FsbEludGVybmFsKCdoaWRkZW4nKTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBpZih0aGlzLmlzSGlkZGVuKCkpIHtcclxuICAgICAgdGhpcy5qQ29udGFpbmVyLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTtcclxuICAgICAgdGhpcy5jYWxsSW50ZXJuYWwoJ3Nob3cnKTtcclxuICAgICAgcmVzID0gbmV3IFByb21pc2UoKHJlc29sdmUpPT4ge1xyXG4gICAgICAgIHRoaXMucGVuZGVkQ2FsbCgoKT0+IHtcclxuICAgICAgICAgIHRoaXMuY2FsbEludGVybmFsKCdzaG93bicpO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXMgPSBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9DU1NMYXllci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0NTU0xheWVyLmpzIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FjaGUge1xyXG5cclxuICBjb25zdHJ1Y3RvcihtYXhTaXplPUluZmluaXR5LCBzaXplb2Y9Q2FjaGUuY291bnRTaXplb2YpIHtcclxuICAgIHRoaXMub3MgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLnNpemVvZiA9IHNpemVvZjtcclxuICAgIHRoaXMubWF4U2l6ZSA9IG1heFNpemU7XHJcbiAgICB0aGlzLnNpemUgPSAwO1xyXG4gIH1cclxuXHJcbiAgZm9yRWFjaChjbGIpIHtcclxuICAgIHRoaXMub3MuZm9yRWFjaCgodiwgayk9PiBjbGIoW2ssdl0pKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb3VudFNpemVvZih2YWx1ZSkge1xyXG4gICAgcmV0dXJuIDE7XHJcbiAgfVxyXG5cclxuICByZW1vdmUoaykge1xyXG4gICAgbGV0IHJlcyA9IGZhbHNlO1xyXG4gICAgY29uc3QgdiA9IHRoaXMub3MuZ2V0KGspO1xyXG4gICAgaWYoIXYubG9ja2VkIHx8ICF2LmxvY2tlZChrKSkge1xyXG4gICAgICB0aGlzLnNpemUgLT0gdGhpcy5zaXplb2Yodik7XHJcbiAgICAgIGlmKHYuZGlzcG9zZSkge1xyXG4gICAgICAgIHYuZGlzcG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3MuZGVsZXRlKGspO1xyXG4gICAgICByZXMgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGZyZWVTcGFjZSgpIHtcclxuICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgZm9yKGxldCBwIG9mIHRoaXMub3MpIHtcclxuICAgICAgYXJyLnB1c2goe3RpbWVzdGFtcDogcFsxXS50aW1lc3RhbXAsIGtleTogcFswXX0pO1xyXG4gICAgfVxyXG4gICAgYXJyLnNvcnQoKGEsIGIpPT4gYS50aW1lc3RhbXAtYi50aW1lc3RhbXApO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8YXJyLmxlbmd0aCAmJiB0aGlzLnNpemU+Myp0aGlzLm1heFNpemUvNDsgKytpKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlKGFycltpXS5rZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgZm9yKGxldCBwIG9mIHRoaXMub3MpIHtcclxuICAgICAgYXJyLnB1c2goe3Y6IHBbMV0sIGs6IHBbMF19KTtcclxuICAgIH1cclxuICAgIGZvcihsZXQgbyBvZiBhcnIpIHtcclxuICAgICAgaWYoby52LmRpc3Bvc2UpIHtcclxuICAgICAgICBvLnYuZGlzcG9zZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMub3MuZGVsZXRlKG8uayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVjdXJzaW9uU2l6ZW9mKHZhbHVlKSB7XHJcbiAgICBsZXQgc2l6ZSA9IDA7XHJcbiAgICBpZih2YWx1ZSkge1xyXG4gICAgICArK3NpemU7XHJcbiAgICAgIGNvbnN0IGxlbiA9IHZhbHVlLmxlbmd0aDtcclxuICAgICAgaWYobGVuPT09dW5kZWZpbmVkKSB7XHJcbiAgICAgICAgZm9yIChsZXQgcCBpbiB2YWx1ZSkge1xyXG4gICAgICAgICAgaWYodmFsdWUuaGFzT3duUHJvcGVydHkocCkpIHtcclxuICAgICAgICAgICAgc2l6ZSs9Q2FjaGUucmVjdXJzaW9uU2l6ZW9mKHZhbHVlW3BdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2l6ZSs9bGVuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzaXplO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGltZXN0YW1wKCkge1xyXG4gICAgcmV0dXJuIERhdGUubm93KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0KGtleSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm9zLmdldChrZXkpO1xyXG4gICAgaWYodmFsdWUpIHtcclxuICAgICAgdmFsdWUudGltZXN0YW1wID0gdGhpcy5nZXRUaW1lc3RhbXAoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1dChrZXksIHZhbHVlKSB7XHJcbiAgICB2YWx1ZS50aW1lc3RhbXAgPSB0aGlzLmdldFRpbWVzdGFtcCgpO1xyXG4gICAgdGhpcy5vcy5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICB0aGlzLnNpemUrPXRoaXMuc2l6ZW9mKHZhbHVlKTtcclxuICAgIGlmKHRoaXMuc2l6ZT50aGlzLm1heFNpemUpIHtcclxuICAgICAgdGhpcy5mcmVlU3BhY2UoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvQ2FjaGUuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9DYWNoZS5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udHJvbGxlciBleHRlbmRzIFRIUkVFLkV2ZW50RGlzcGF0Y2hlciB7XHJcblxyXG4gIGhhbmRsZURlZmF1bHQoaWQsIGUsIGRhdGEpIHtcclxuICAgIC8vY29uc29sZS5sb2coaWQrJy0nK2UudHlwZSsnLScrZGF0YSk7XHJcbiAgfVxyXG5cclxuICBkaXNwYXRjaEFzeW5jKGUpIHtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZSkpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuXHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Db250cm9sbGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvQ29udHJvbGxlci5qcyIsImltcG9ydCBFdmVudENvbnZlcnRlciBmcm9tICcuL0V2ZW50Q29udmVydGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUV2ZW50Q29udmVydGVyIGV4dGVuZHMgRXZlbnRDb252ZXJ0ZXIge1xyXG5cclxuICAvLyBjdXN0b21cclxuICAvLyB0ZXN0SW50ZXJzZWN0aW9uKGUsIGRhdGEpO1xyXG4gIC8vIGN1c3RvbS5vYmplY3RcclxuICAvLyB0ZXN0KG9iamVjdCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHduZCwgZG9jLCBjdXN0b21UZXN0PSgpPT4gZmFsc2UsIGVEb2MpIHtcclxuICAgIHN1cGVyKHduZCwgZG9jKTtcclxuXHJcbiAgICB0aGlzLmVEb2MgPSBlRG9jO1xyXG4gICAgdGhpcy5jdXN0b21UZXN0ID0gY3VzdG9tVGVzdDtcclxuICAgIHRoaXMuY3VzdG9tcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgdGVzdChvYmplY3QxLCBvYmplY3QyKSB7XHJcbiAgICByZXR1cm4gb2JqZWN0MSAmJiBvYmplY3QyPyB0aGlzLmN1c3RvbVRlc3Qob2JqZWN0MSwgb2JqZWN0Mik6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FsbGJhY2sob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gb2JqZWN0LnRhcmdldC5jYWxsYmFjaztcclxuICB9XHJcblxyXG4gIGFkZEN1c3RvbShjdXN0b20pIHtcclxuICAgIHRoaXMuY3VzdG9tcy5wdXNoKGN1c3RvbSk7XHJcbiAgfVxyXG5cclxuICBnZXRPYmplY3QoZSwgZGF0YSkge1xyXG4gICAgbGV0IG9iamVjdDtcclxuICAgIGlmKGRhdGEuZG9jPT09dGhpcy5lRG9jKSB7XHJcbiAgICAgIGZvcihsZXQgY3VzdG9tIG9mIHRoaXMuY3VzdG9tcykge1xyXG4gICAgICAgIG9iamVjdCA9IGN1c3RvbS50ZXN0SW50ZXJzZWN0aW9uKGUsIGRhdGEpO1xyXG4gICAgICAgIGlmKG9iamVjdCkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqZWN0O1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvQ3VzdG9tRXZlbnRDb252ZXJ0ZXIuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9DdXN0b21FdmVudENvbnZlcnRlci5qcyIsImltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbmRlciB7XHJcblxyXG4gIHN0YXRpYyBERUxJTUlURVIgPSAnICc7XHJcblxyXG4gIHN0YXRpYyBpc0RlbGltZXRyKHMpIHtcclxuICAgIHJldHVybiBzPT09RmluZGVyLkRFTElNSVRFUjtcclxuICB9XHJcblxyXG4gIG1lcmdlKCkge1xyXG4gICAgY29uc3QgYXMgPSBbXSwgbWFwID0gW10sIHN0cnMgPSB0aGlzLnN0cnM7XHJcbiAgICBsZXQgcCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxzdHJzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmKHN0cnNbaV0ubGVuZ3RoKSB7XHJcbiAgICAgICAgbWFwLnB1c2goe1xyXG4gICAgICAgICAgYmFzZTogaSxcclxuICAgICAgICAgIG9mZnNldDogcFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFzLnB1c2goc3Ryc1tpXSk7XHJcbiAgICAgICAgcCArPSBzdHJzW2ldLmxlbmd0aDtcclxuICAgICAgICBpZihpPHN0cnMubGVuZ3RoLTEgJiYgIUZpbmRlci5pc0RlbGltZXRyKHN0cnNbaV0uY2hhckF0KHN0cnNbaV0ubGVuZ3RoLTEpKSAmJiAhRmluZGVyLmlzRGVsaW1ldHIoc3Ryc1tpKzFdLmNoYXJBdCgwKSkpIHtcclxuICAgICAgICAgIGFzLnB1c2goRmluZGVyLkRFTElNSVRFUik7XHJcbiAgICAgICAgICArK3A7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcCA9IG1hcDtcclxuICAgIHRoaXMuc3RyID0gYXMuam9pbignJyk7XHJcbiAgfVxyXG5cclxuICBhZGRIaXRzKHApIHtcclxuICAgIGNvbnN0IGluZm8gPSB0aGlzLm1hcFtVdGlscy5sb3dlckJvdW5kKHRoaXMubWFwLCB7b2Zmc2V0OiBwfSwgKGEsIGIpPT4gYS5vZmZzZXQtYi5vZmZzZXQpXTtcclxuICAgIGxldCBjaGFycyA9IHRoaXMucGF0dGVybi5sZW5ndGgsIGkgPSBpbmZvLmJhc2U7XHJcbiAgICBwIC09IGluZm8ub2Zmc2V0O1xyXG4gICAgd2hpbGUoY2hhcnMpIHtcclxuICAgICAgaWYodGhpcy5zdHJzW2ldLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRlbGltZXRlciA9IGk8dGhpcy5zdHJzLmxlbmd0aC0xICYmICFGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cnNbaV0uY2hhckF0KHRoaXMuc3Ryc1tpXS5sZW5ndGgtMSkpICYmICFGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cnNbaSsxXS5jaGFyQXQoMCkpLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCA9IE1hdGgubWluKHRoaXMuc3Ryc1tpXS5sZW5ndGgrKGRlbGltZXRlcj8gMTogMCktcCwgY2hhcnMpO1xyXG4gICAgICAgIGlmKHA8dGhpcy5zdHJzW2ldLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5oaXRzLnB1c2goe1xyXG4gICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgb2Zmc2V0OiBwLFxyXG4gICAgICAgICAgICBsZW5ndGg6IE1hdGgubWluKGxlbmd0aCwgdGhpcy5zdHJzW2ldLmxlbmd0aC1wKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjaGFycyAtPSBsZW5ndGg7XHJcbiAgICAgICAgKytpO1xyXG4gICAgICAgIHAgPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDb250ZXh0KHApIHtcclxuICAgIGxldCBmID0gcCwgbCA9IHArdGhpcy5wYXR0ZXJuLmxlbmd0aC0xLCBkZWxzID0gdGhpcy5wcm9wcy5jb250ZXh0TGVuZ3RoLCBwcmV2RGVscyA9IGRlbHMrMTtcclxuICAgIHdoaWxlKGRlbHMgJiYgcHJldkRlbHMtZGVscykge1xyXG4gICAgICBwcmV2RGVscyA9IGRlbHM7XHJcbiAgICAgIGlmKGRlbHMlMikge1xyXG4gICAgICAgIGZvcihsZXQgaT1mLTI7IGk+PTA7IC0taSkge1xyXG4gICAgICAgICAgaWYoRmluZGVyLmlzRGVsaW1ldHIodGhpcy5zdHJbaV0pIHx8IGk9PT0wKSB7XHJcbiAgICAgICAgICAgIGYgPSBpPT09MD8gMDogaSsxO1xyXG4gICAgICAgICAgICAtLWRlbHM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmb3IobGV0IGk9bCsyOyBpPHRoaXMuc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICBpZihGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cltpXSkgfHwgaT09PXRoaXMuc3RyLmxlbmd0aC0xKSB7XHJcbiAgICAgICAgICAgIGwgPSBpPT09dGhpcy5zdHIubGVuZ3RoLTE/IGk9PT10aGlzLnN0ci5sZW5ndGgtMTogaS0xO1xyXG4gICAgICAgICAgICAtLWRlbHM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250ZXh0cy5wdXNoKHRoaXMuc3RyLnN1YnN0cihmLCBsLWYrMSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGl0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpdHM7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRleHRzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xyXG4gICAgY29udGV4dExlbmd0aDogNyxcclxuICAgIGhpdHM6IHRydWUsXHJcbiAgICBjb250ZXh0czogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHN0cnMsIHBhdHRlcm4sIHByb3BzKSB7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi5GaW5kZXIuZGVmYXVsdHMsXHJcbiAgICAgIC4uLnByb3BzXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zdHJzID0gc3RycztcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLm1lcmdlKHN0cnMpO1xyXG4gICAgdGhpcy5oaXRzID0gW107XHJcbiAgICB0aGlzLmNvbnRleHRzID0gW107XHJcbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmxzdHIgPSB0aGlzLnN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgbGV0IHAgPSAwO1xyXG4gICAgd2hpbGUodHJ1ZSkge1xyXG4gICAgICBwID0gdGhpcy5sc3RyLmluZGV4T2YodGhpcy5wYXR0ZXJuLCBwKTtcclxuICAgICAgaWYocD09PS0xKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZGRIaXRzKHApO1xyXG4gICAgICAgIHRoaXMuYWRkQ29udGV4dChwKTtcclxuICAgICAgICBwICs9IHRoaXMucGF0dGVybi5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRmluZGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRmluZGVyLmpzIiwiaW1wb3J0IHtQREZKU30gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcblBERkpTLndvcmtlclNyYyA9ICh3aW5kb3cuUERGSlNfTE9DQUxFPyBQREZKU19MT0NBTEU6IEdMT0JBTF9QQVRIUykucGRmSnNXb3JrZXI7XHJcblBERkpTLmNNYXBVcmwgPSAod2luZG93LlBERkpTX0xPQ0FMRT8gUERGSlNfTE9DQUxFOiBHTE9CQUxfUEFUSFMpLnBkZkpzQ01hcFVybDtcclxuUERGSlMuY01hcFBhY2tlZCA9IHRydWU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZGYge1xyXG5cclxuICBjb25zdHJ1Y3RvcihzcmMsIGxvYWRpbmdQcm9ncmVzcykge1xyXG4gICAgdGhpcy5zcmMgPSBVdGlscy5ub3JtYWxpemVVcmwoc3JjKTtcclxuICAgIHRoaXMuaGFuZGxlclF1ZXVlID0gW107XHJcbiAgICB0aGlzLnByb2dyZXNEYXRhID0ge2xvYWRlZDogLTEsIHRvdGFsOiAxfTtcclxuICAgIHRoaXMubG9hZGluZ1Byb2dyZXNzID0gbG9hZGluZ1Byb2dyZXNzO1xyXG5cclxuICAgIFBERkpTLmdldERvY3VtZW50KHtcclxuICAgICAgdXJsOiB0aGlzLnNyYyxcclxuICAgICAgcmFuZ2VDaHVua1NpemU6IDUxMioxMDI0XHJcbiAgICB9LCBudWxsLCBudWxsLCAoZGF0YSk9PiB7XHJcbiAgICAgIGlmKHRoaXMubG9hZGluZ1Byb2dyZXNzKSB7XHJcbiAgICAgICAgbGV0IGN1ciA9IE1hdGguZmxvb3IoMTAwKmRhdGEubG9hZGVkL2RhdGEudG90YWwpLFxyXG4gICAgICAgICAgICAgIG9sZCA9IE1hdGguZmxvb3IoMTAwKnRoaXMucHJvZ3Jlc0RhdGEubG9hZGVkL3RoaXMucHJvZ3Jlc0RhdGEudG90YWwpO1xyXG4gICAgICAgIGlmKGN1ciE9PW9sZCkge1xyXG4gICAgICAgICAgY3VyID0gaXNOYU4oY3VyKT8gMDogY3VyO1xyXG4gICAgICAgICAgY3VyID0gY3VyPjEwMD8gMTAwOiBjdXI7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdQcm9ncmVzcyhjdXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByb2dyZXNEYXRhID0gZGF0YTtcclxuICAgIH0pLlxyXG4gICAgdGhlbigoaGFuZGxlcik9PiB7XHJcbiAgICAgIGlmKGhhbmRsZXIubnVtUGFnZXM+MSkge1xyXG4gICAgICAgIFByb21pc2UuYWxsKFtoYW5kbGVyLmdldFBhZ2UoMSksIGhhbmRsZXIuZ2V0UGFnZSgyKV0pLlxyXG4gICAgICAgIHRoZW4oKHBhZ2VzKT0+IHtcclxuICAgICAgICAgIHRoaXMuaW5pdChoYW5kbGVyLCBwYWdlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbml0KGhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXQoaGFuZGxlciwgcGFnZXMpIHtcclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmRvdWJsZWRQYWdlcyA9IHBhZ2VzPyAoTWF0aC5hYnMoMipQZGYuZ2V0UGFnZVNpemUocGFnZXNbMF0pLndpZHRoLVBkZi5nZXRQYWdlU2l6ZShwYWdlc1sxXSkud2lkdGgpL1BkZi5nZXRQYWdlU2l6ZShwYWdlc1swXSkud2lkdGg8MWUtNCk6IGZhbHNlO1xyXG4gICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcik7XHJcbiAgICBmb3IobGV0IGNsYiBvZiB0aGlzLmhhbmRsZXJRdWV1ZS5yZXZlcnNlKCkpIHtcclxuICAgICAgZG9uZSA9IGRvbmUudGhlbigoaGFuZGxlcik9PiB7XHJcbiAgICAgICAgY2xiKGhhbmRsZXIpO1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBhZ2VUeXBlKG4pIHtcclxuICAgIHJldHVybiAhdGhpcy5kb3VibGVkUGFnZXMgfHwgbj09PTAgfHwgbj09PXRoaXMuZ2V0UGFnZXNOdW0oKS0xPyAnZnVsbCc6IChuJjE/ICdsZWZ0JzogJ3JpZ2h0Jyk7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlKG4pIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIuZ2V0UGFnZSh0aGlzLmRvdWJsZWRQYWdlcz8gTWF0aC5jZWlsKG4vMikrMTogbisxKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmhhbmRsZXJRdWV1ZS5zcGxpY2UoMCwgdGhpcy5oYW5kbGVyUXVldWUubGVuZ3RoKTtcclxuICAgIGRlbGV0ZSB0aGlzLmhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nUHJvZ3Jlc3NDbGIoY2xiKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdQcm9ncmVzcyA9IGNsYjtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VzTnVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcj8gKHRoaXMuZG91YmxlZFBhZ2VzPyAyKih0aGlzLmhhbmRsZXIubnVtUGFnZXMtMSk6IHRoaXMuaGFuZGxlci5udW1QYWdlcyk6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRQYWdlU2l6ZShwYWdlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogcGFnZS52aWV3WzJdLXBhZ2Uudmlld1swXSxcclxuICAgICAgaGVpZ2h0OiBwYWdlLnZpZXdbM10tcGFnZS52aWV3WzFdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbi8vICAgaWYocGFnZXM+MSkge1xyXG4vLyAgIGhhbmRsZXIuZ2V0UGFnZSgyKS5cclxuLy8gICB0aGVuKChwYWdlKT0+IHtcclxuLy8gICAgIGNvbnN0IHNpemUxID0gUGRmLmdldFBhZ2VTaXplKHBhZ2UpO1xyXG4vLyAgICAgdGhpcy5wcm9wcy5kb3VibGVkUGFnZXMgPSAyKnNpemUwLndpZHRoPT09c2l6ZTEud2lkdGg7XHJcbi8vICAgICB0aGlzLnJlYWR5KCk7XHJcbi8vICAgfSkuXHJcbi8vICAgY2F0Y2goKCk9PiB0aGlzLnJlYWR5KCkpO1xyXG4vLyB9XHJcbi8vIGVsc2Uge1xyXG5cclxuICBnZXRIYW5kbGVyKGNsYikge1xyXG4gICAgaWYodGhpcy5oYW5kbGVyKSB7XHJcbiAgICAgIGNsYih0aGlzLmhhbmRsZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlclF1ZXVlLnB1c2goY2xiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1BkZi5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1BkZi5qcyIsImltcG9ydCB7VEhSRUUsICR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVFdmVudENvbnZlcnRlckZzIHtcclxuXHJcbiAgc3RhdGljIG9iamVjdHNUZXN0KG9iamVjdDEsIG9iamVjdDIpIHtcclxuICAgIHJldHVybiBvYmplY3QxICYmIG9iamVjdDI/IG9iamVjdDEub2JqZWN0PT09b2JqZWN0Mi5vYmplY3Q6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG9iamVjdHNBbmRGYWNlc1Rlc3Qob2JqZWN0MSwgb2JqZWN0Mikge1xyXG4gICAgcmV0dXJuIG9iamVjdDEgJiYgb2JqZWN0Mj8gb2JqZWN0MS5vYmplY3Q9PT1vYmplY3QyLm9iamVjdCAmJiBvYmplY3QxLmZhY2UubWF0ZXJpYWxJbmRleD09PW9iamVjdDIuZmFjZS5tYXRlcmlhbEluZGV4OiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbFdvcmxkLCB0ZXN0PVRocmVlRXZlbnRDb252ZXJ0ZXJGcy5vYmplY3RzQW5kRmFjZXNUZXN0KSB7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbFdvcmxkO1xyXG4gICAgdGhpcy5jb29yZHMgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG4gICAgdGhpcy5yYXljYXN0ZXIgPSB0aGlzLnZpc3VhbC5yYXljYXN0ZXI7XHJcbiAgICB0aGlzLmNhbWVyYSA9IHRoaXMudmlzdWFsLmNhbWVyYTtcclxuICAgIHRoaXMudGhyZWVzID0gW107XHJcbiAgICB0aGlzLnRlc3QgPSB0ZXN0O1xyXG4gIH1cclxuXHJcbiAgYWRkVGhyZWUodGhyZWUpIHtcclxuICAgIHRoaXMudGhyZWVzLnB1c2godGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVGhyZWUodGhyZWUpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnRocmVlcy5pbmRleE9mKHRocmVlKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMudGhyZWVzLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE9iamVjdChlKSB7XHJcbiAgICB0aGlzLnNldENvb3Jkc0Zyb21FdmVudChlKTtcclxuICAgIHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEodGhpcy5jb29yZHMsIHRoaXMuY2FtZXJhKTtcclxuICAgIGNvbnN0IGludGVyc2VjdHMgPSB0aGlzLnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzKHRoaXMudGhyZWVzKTtcclxuICAgIHJldHVybiBpbnRlcnNlY3RzWzBdO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVFdmVudENvbnZlcnRlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1RocmVlRXZlbnRDb252ZXJ0ZXIuanMiLCJpbXBvcnQgQmFzZU1hdGhVdGlscyBmcm9tICcuL0Jhc2VNYXRoVXRpbHMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVVdGlscyB7XHJcblxyXG4gIHN0YXRpYyB2ZXJ0aWNlczJVVnModmVydGljZXMsIGluZGVjZXMsIGZpcnN0LCBsYXN0LCBjb252ZXJDbGIpIHtcclxuICAgIGNvbnN0IHIgPSBbXTtcclxuICAgIGZvcihsZXQgaSA9IGZpcnN0OyBpPGxhc3Q7ICsraSkge1xyXG4gICAgICBjb25zdCB2aXMgPSBbaW5kZWNlc1tpXS5hLGluZGVjZXNbaV0uYixpbmRlY2VzW2ldLmNdO1xyXG4gICAgICBmb3IobGV0IGogPSAwOyBqPHZpcy5sZW5ndGg7ICsraikge1xyXG4gICAgICAgIGlmKCFyW3Zpc1tqXV0pIHtcclxuICAgICAgICAgIHJbdmlzW2pdXSA9IGNvbnZlckNsYih2ZXJ0aWNlc1t2aXNbal1dKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNvbXB1dGVGYWNlVmVydGV4VXZzKGdlb21ldHJ5LCBmYWNlcykge1xyXG4gICAgY29uc3QgdXZzID0gW1xyXG4gICAgICAgICAgICAgICAgVGhyZWVVdGlscy52ZXJ0aWNlczJVVnMoZ2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LmZhY2VzLCAwLCBmYWNlc1swXSwgKHApPT5uZXcgVEhSRUUuVmVjdG9yMihwLngsIDEtcC56KSksXHJcbiAgICAgICAgICAgICAgICBUaHJlZVV0aWxzLnZlcnRpY2VzMlVWcyhnZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkuZmFjZXMsIGZhY2VzWzBdLCBmYWNlc1sxXSwgKHApPT5uZXcgVEhSRUUuVmVjdG9yMigxLXAueCwgMS1wLnopKSxcclxuICAgICAgICAgICAgICAgIFRocmVlVXRpbHMudmVydGljZXMyVVZzKGdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS5mYWNlcywgZmFjZXNbMV0sIGZhY2VzWzJdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKHAueCwgcC55KSksXHJcbiAgICAgICAgICAgICAgICBUaHJlZVV0aWxzLnZlcnRpY2VzMlVWcyhnZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkuZmFjZXMsIGZhY2VzWzJdLCBmYWNlc1szXSwgKHApPT5uZXcgVEhSRUUuVmVjdG9yMigxLXAueCwgcC55KSksXHJcbiAgICAgICAgICAgICAgICBUaHJlZVV0aWxzLnZlcnRpY2VzMlVWcyhnZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkuZmFjZXMsIGZhY2VzWzNdLCBmYWNlc1s0XSwgKHApPT5uZXcgVEhSRUUuVmVjdG9yMihwLnosIHAueSkpLFxyXG4gICAgICAgICAgICAgICAgVGhyZWVVdGlscy52ZXJ0aWNlczJVVnMoZ2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LmZhY2VzLCBmYWNlc1s0XSwgZ2VvbWV0cnkuZmFjZXMubGVuZ3RoLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKDEtcC56LCBwLnkpKVxyXG4gICAgXTtcclxuXHJcbiAgICBsZXQgdXZzaSA9IDA7XHJcbiAgICBmb3IobGV0IGkgPSAwOyBpPGdlb21ldHJ5LmZhY2VzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHV2c2kgKz0gZmFjZXNbdXZzaV0gPT09IGk7XHJcbiAgICAgIGNvbnN0IGYgPSBnZW9tZXRyeS5mYWNlc1tpXTtcclxuICAgICAgZi5tYXRlcmlhbEluZGV4ID0gdXZzaTtcclxuICAgICAgZ2VvbWV0cnkuZmFjZVZlcnRleFV2c1swXVtpXSA9IFt1dnNbdXZzaV1bZi5hXSwgdXZzW3V2c2ldW2YuYl0sIHV2c1t1dnNpXVtmLmNdXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVNYXJrZXIocCwgYywgc2l6ZSkge1xyXG4gICAgY29uc3QgbWFya2VyID0gbmV3IFRIUkVFLk1lc2gobmV3IFRIUkVFLlNwaGVyZUdlb21ldHJ5KHNpemUpLCBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoeyBjb2xvcjogYyB9KSk7XHJcbiAgICBtYXJrZXIucG9zaXRpb24uc2V0KHAueCxwLnkscC56KTtcclxuICAgIHJldHVybiBtYXJrZXI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZmluZFV2VHJpcyhnZW9tZXRyeSwgcHMsIGZpcnN0LCBsYXN0KSB7XHJcbiAgICBjb25zdCByZXMgPSBbXTtcclxuICAgIGZvcihsZXQgcCBvZiBwcykge1xyXG4gICAgICBsZXQgZm91bmQgPSBmYWxzZTtcclxuICAgICAgZm9yKGxldCBpPWZpcnN0OyBpPGxhc3QgJiYgIWZvdW5kOyArK2kpIHtcclxuICAgICAgICBjb25zdCB0cmkgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWzBdW2ldO1xyXG4gICAgICAgIGlmKEJhc2VNYXRoVXRpbHMuaXNJbnNpZGVDb252UG9seSh0cmksIHApKSB7XHJcbiAgICAgICAgICByZXMucHVzaCh7XHJcbiAgICAgICAgICAgIGNvZWZzOiBCYXNlTWF0aFV0aWxzLmNvbXB1dGVJbnRlcnBDb2Vmcyh0cmksIHApLFxyXG4gICAgICAgICAgICBpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoIWZvdW5kKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignQmFkIHBvaW50Jyk7XHJcbiAgICAgICAgcmVzLnB1c2godW5kZWZpbmVkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaW5kSW50ZXJuYWxWZXJ0aWNlcyhnZW9tZXRyeSwgcHMsIGZpcnN0LCBsYXN0KSB7XHJcbiAgICBjb25zdCByZXMgPSB7fTtcclxuICAgIGZvcihsZXQgaT1maXJzdDsgaTxsYXN0OyArK2kpIHtcclxuICAgICAgY29uc3QgdHJpID0gZ2VvbWV0cnkuZmFjZVZlcnRleFV2c1swXVtpXSwgZiA9IGdlb21ldHJ5LmZhY2VzW2ldLCB2cyA9IFtmLmEsIGYuYiwgZi5jXTtcclxuICAgICAgZm9yKGxldCBqPTA7IGo8dHJpLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgaWYocmVzW3ZzW2pdXT09PXVuZGVmaW5lZCAmJiBCYXNlTWF0aFV0aWxzLmlzSW5zaWRlUG9seShwcywgdHJpW2pdKSkge1xyXG4gICAgICAgICAgcmVzW3ZzW2pdXSA9IHtcclxuICAgICAgICAgICAgcDogdHJpW2pdLFxyXG4gICAgICAgICAgICBpOiB2c1tqXSxcclxuICAgICAgICAgICAgbjogZi52ZXJ0ZXhOb3JtYWxzW2pdXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVzKTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlVXRpbHMuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9UaHJlZVV0aWxzLmpzIiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRhcmdldCB7XHJcblxyXG4gIHN0YXRpYyB0ZXN0KG9iamVjdDEsIG9iamVjdDIpIHtcclxuICAgIHJldHVybiBvYmplY3QxLnRhcmdldD09PW9iamVjdDIudGFyZ2V0O1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvdGFyZ2V0cy9UYXJnZXQuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy90YXJnZXRzL1RhcmdldC5qcyIsImltcG9ydCB7JCwgdHJ9IGZyb20gJy4vanMvbGlicyc7XHJcbmltcG9ydCBEZXRlY3RvciBmcm9tICdEZXRlY3Rvcic7XHJcbmltcG9ydCBWaXN1YWxXb3JsZCBmcm9tICdWaXN1YWxXb3JsZCc7XHJcbmltcG9ydCBQZGZMaW5rc0hhbmRsZXIgZnJvbSAnLi9qcy9jbGFzc2VzL1BkZkxpbmtzSGFuZGxlcic7XHJcbmltcG9ydCBCb29rIGZyb20gJy4vanMvY2xhc3Nlcy9Cb29rJztcclxuaW1wb3J0IEJvb2tWaWV3IGZyb20gJy4vanMvY2xhc3Nlcy9Cb29rVmlldyc7XHJcbmltcG9ydCBCb29rQ29udHJvbGxlciBmcm9tICcuL2pzL2NsYXNzZXMvQm9va0NvbnRyb2xsZXInO1xyXG5pbXBvcnQgUGRmQm9va1Byb3BzQnVpbGRlciBmcm9tICcuL2pzL2NsYXNzZXMvUGRmQm9va1Byb3BzQnVpbGRlcic7XHJcbmltcG9ydCBDbGJCb29rUHJvcHNCdWlsZGVyIGZyb20gJy4vanMvY2xhc3Nlcy9DbGJCb29rUHJvcHNCdWlsZGVyJztcclxuaW1wb3J0IExvYWRpbmdDb250cm9sbGVyIGZyb20gJ0xvYWRpbmdDb250cm9sbGVyJztcclxuaW1wb3J0IFNlYXJjaCBmcm9tICdTZWFyY2gnO1xyXG5pbXBvcnQgQm9va21hcmtzIGZyb20gJ0Jvb2ttYXJrcyc7XHJcbmltcG9ydCBUaHVtYm5haWxzIGZyb20gJ1RodW1ibmFpbHMnO1xyXG5pbXBvcnQgVG9jQ29udHJvbGxlciBmcm9tICcuL2pzL2NsYXNzZXMvVG9jQ29udHJvbGxlcic7XHJcbmltcG9ydCBCb29rUHJpbnRlciBmcm9tICcuL2pzL2NsYXNzZXMvQm9va1ByaW50ZXInO1xyXG5pbXBvcnQgQXV0b05hdmlnYXRvciBmcm9tICcuL2pzL2NsYXNzZXMvQXV0b05hdmlnYXRvcic7XHJcbmltcG9ydCBTb3VuZHNFbnZpcm9tZW50IGZyb20gJy4vanMvY2xhc3Nlcy9Tb3VuZHNFbnZpcm9tZW50JztcclxuXHJcbiQuZm4uRmxpcEJvb2sgPSBmdW5jdGlvbihvcHRpb25zKSB7XHJcbiAgY29uc3Qgc2NlbmUgPSB7XHJcbiAgICBkaXNwb3NlKCkge1xyXG4gICAgICBpZih0aGlzLnJlYWR5KSB7XHJcbiAgICAgICAgIXNjZW5lLnBkZkxpbmtzSGFuZGxlciB8fCBzY2VuZS5wZGZMaW5rc0hhbmRsZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5wZGZMaW5rc0hhbmRsZXI7XHJcbiAgICAgICAgc2NlbmUuc291bmRzLmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUuc291bmRzO1xyXG4gICAgICAgIHNjZW5lLnRvY0N0cmwuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS50b2NDdHJsO1xyXG4gICAgICAgIHNjZW5lLnRodW1ibmFpbHMuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS50aHVtYm5haWxzO1xyXG4gICAgICAgICFzY2VuZS5ib29rbWFya3MgfHwgc2NlbmUuYm9va21hcmtzLmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUuYm9va21hcmtzO1xyXG4gICAgICAgIHNjZW5lLmN0cmwuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5jdHJsO1xyXG4gICAgICAgIHNjZW5lLmJvb2tQcmludGVyLmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUuYm9va1ByaW50ZXI7XHJcbiAgICAgICAgc2NlbmUuYm9vay5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmJvb2s7XHJcbiAgICAgICAgc2NlbmUucHJvcHNCdWlsZGVyLmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUucHJvcHNCdWlsZGVyO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5ib29rQnVpbGRlcjtcclxuICAgICAgICBzY2VuZS52aXN1YWwuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS52aXN1YWw7XHJcbiAgICAgICAgc2NlbmUudmlldy5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnZpZXc7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmRpc3Bvc2U7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nRGlzcG9zZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG4gIG9wdGlvbnMgPSB7Li4ub3B0aW9uc307XHJcbiAgc2NlbmUudmlldyA9IG5ldyBCb29rVmlldyh0aGlzLmxlbmd0aD8gdGhpc1swXTogJCgnPGRpdj4nKS5hcHBlbmRUbygnYm9keScpLCAoKT0+IHtcclxuICAgIGlmKCFEZXRlY3Rvci53ZWJnbCkge1xyXG4gICAgICBEZXRlY3Rvci5hZGRHZXRXZWJHTE1lc3NhZ2Uoe3BhcmVudDogc2NlbmUudmlldy5nZXRWaWV3KCl9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzY2VuZS5sb2FkaW5nQ3RybCA9IG5ldyBMb2FkaW5nQ29udHJvbGxlcihzY2VuZS52aWV3LCB0cnVlLCAocHJvZ3Jlc3MpPT4gcHJvZ3Jlc3M9PT0wPyB0cignUGxlYXNlIHdhaXQuLi4gdGhlIEFwcGxpY2F0aW9uIGlzIExvYWRpbmcnKTogdHIoJ1BERiBpcyBMb2FkaW5nOicpKycgJytwcm9ncmVzcysnJScpO1xyXG4gICAgICBzY2VuZS52aXN1YWwgPSBuZXcgVmlzdWFsV29ybGQoc2NlbmUudmlldy5nZXRDb250YWluZXIoKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LCBzY2VuZS52aWV3LmdldENvbnRhaW5lcigpLm93bmVyRG9jdW1lbnQsIHNjZW5lLnZpZXcuZ2V0VmlldygpKTtcclxuICAgICAgc2NlbmUuYm9va0J1aWxkZXIgPSAocHJvcHMsIHNoZWV0cywgcGFnZUNhbGxiYWNrKT0+IHtcclxuICAgICAgICBwcm9wcy5jc3NMYXllclByb3BzID0ge1xyXG4gICAgICAgICAgLi4ucHJvcHMuY3NzTGF5ZXJQcm9wcyxcclxuICAgICAgICAgIHNjZW5lXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZihvcHRpb25zLnByb3BlcnRpZXNDYWxsYmFjaykge1xyXG4gICAgICAgICAgcHJvcHMgPSBvcHRpb25zLnByb3BlcnRpZXNDYWxsYmFjayhwcm9wcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjZW5lLmJvb2sgPSBuZXcgQm9vayhzY2VuZS52aXN1YWwsIHNoZWV0cywgcGFnZUNhbGxiYWNrLCBwcm9wcyk7XHJcbiAgICAgICAgc2NlbmUuYm9va1ByaW50ZXIgPSBuZXcgQm9va1ByaW50ZXIoc2NlbmUudmlzdWFsLCBzY2VuZS5ib29rLCAob3B0aW9ucy50ZW1wbGF0ZSB8fCB7fSkucHJpbnRTdHlsZSk7XHJcbiAgICAgICAgc2NlbmUubG9hZGluZ0N0cmwuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5sb2FkaW5nQ3RybDtcclxuICAgICAgICBzY2VuZS5jdHJsID0gbmV3IEJvb2tDb250cm9sbGVyKHNjZW5lLmJvb2ssIHNjZW5lLnZpZXcsIG9wdGlvbnMuY29udHJvbHNQcm9wcyk7XHJcbiAgICAgICAgc2NlbmUuYm9vay5zZXRJbmplY3Rvcigodyk9PiB7XHJcbiAgICAgICAgICB3LmpRdWVyeSA9IHcuJCA9ICQ7XHJcbiAgICAgICAgICB3LmJvb2sgPSBzY2VuZS5ib29rO1xyXG4gICAgICAgICAgdy5ib29rQ3RybCA9IHNjZW5lLmN0cmw7XHJcbiAgICAgICAgICBpZihwcm9wcy5pbmplY3Rvcikge1xyXG4gICAgICAgICAgICBwcm9wcy5pbmplY3Rvcih3KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzY2VuZS52aWV3LmFkZEhhbmRsZXIoc2NlbmUuY3RybCk7XHJcbiAgICAgICAgc2NlbmUuY3RybC5zZXRQcmludGVyKHNjZW5lLmJvb2tQcmludGVyKTtcclxuICAgICAgICBjb25zdCB0ZXN0ID0gcGFnZUNhbGxiYWNrKDApO1xyXG5cclxuICAgICAgICBzY2VuZS5zZWFyY2ggPSBuZXcgU2VhcmNoKHNjZW5lLnZpZXcuZ2V0U2VhcmNoVmlldygpLCBzY2VuZS5ib29rLmdldFBhZ2VzKCkpO1xyXG4gICAgICAgIHNjZW5lLnNlYXJjaC5vblF1ZXJ5ID0gc2NlbmUuYm9vay5zZXRRdWVyeS5iaW5kKHNjZW5lLmJvb2spO1xyXG4gICAgICAgIHNjZW5lLmJvb2suYWRkRXZlbnRMaXN0ZW5lcignc2VhcmNoUmVzdWx0cycsIChlKT0+IHtcclxuICAgICAgICAgIHNjZW5lLnNlYXJjaC5zZXRSZXN1bHRzKGUucmVzdWx0cywgZS5sYXN0UGFnZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNjZW5lLnRodW1ibmFpbHMgPSBuZXcgVGh1bWJuYWlscyhzY2VuZS52aXN1YWwsIHNjZW5lLnZpZXcuZ2V0VGh1bWJuYWlsc1ZpZXcoKSwgcGFnZUNhbGxiYWNrLCAyKihzaGVldHMrMiksIHtrV3RvSDogcHJvcHMud2lkdGgvcHJvcHMuaGVpZ2h0fSk7XHJcbiAgICAgICAgc2NlbmUudG9jQ3RybCA9IG5ldyBUb2NDb250cm9sbGVyKHNjZW5lLnZpZXcsIHNjZW5lLmN0cmwpO1xyXG4gICAgICAgIHNjZW5lLnRvY0N0cmwuc2V0VGh1bWJuYWlscyhzY2VuZS50aHVtYm5haWxzKTtcclxuICAgICAgICBzY2VuZS50b2NDdHJsLnNldFNlYXJjaChzY2VuZS5zZWFyY2gpO1xyXG4gICAgICAgIHNjZW5lLmN0cmwuc2V0VG9jQ3RybChzY2VuZS50b2NDdHJsKTtcclxuICAgICAgICBzY2VuZS52aWV3LmFkZEhhbmRsZXIoc2NlbmUudG9jQ3RybCk7XHJcblxyXG4gICAgICAgIGlmKHRlc3QudHlwZT09PSdwZGYnKSB7XHJcbiAgICAgICAgICBzY2VuZS5wZGZMaW5rc0hhbmRsZXIgPSBuZXcgUGRmTGlua3NIYW5kbGVyKHRlc3Quc3JjLCBzY2VuZS5jdHJsLCBzY2VuZS52aXN1YWwuZWxlbWVudCk7XHJcbiAgICAgICAgICBzY2VuZS5ib29rLmFkZEV2ZW50TGlzdGVuZXIoJ3BkZkFubm90YXRpb24nLCBzY2VuZS5wZGZMaW5rc0hhbmRsZXIuaGFuZGxlRXZlbnQuYmluZChzY2VuZS5wZGZMaW5rc0hhbmRsZXIpKTtcclxuICAgICAgICAgIHRlc3Quc3JjLmdldEhhbmRsZXIoKGhhbmRsZXIpPT4ge1xyXG4gICAgICAgICAgICBoYW5kbGVyLmdldE91dGxpbmUoKS5cclxuICAgICAgICAgICAgICB0aGVuKChvdXRsaW5lKT0+IHtcclxuICAgICAgICAgICAgICAgIHNjZW5lLmJvb2ttYXJrcyA9IG5ldyBCb29rbWFya3Moc2NlbmUudmlldy5nZXRCb29rbWFya3NWaWV3KCksIG91dGxpbmUpO1xyXG4gICAgICAgICAgICAgICAgc2NlbmUudG9jQ3RybC5zZXRCb29rbWFya3Moc2NlbmUuYm9va21hcmtzLCB0ZXN0LnNyYyk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmKG9wdGlvbnMucGRmTGlua3MgJiYgb3B0aW9ucy5wZGZMaW5rcy5oYW5kbGVyKSB7XHJcbiAgICAgICAgICAgIHNjZW5lLnBkZkxpbmtzSGFuZGxlci5zZXRIYW5kbGVyKG9wdGlvbnMucGRmTGlua3MuaGFuZGxlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2VuZS5zb3VuZHMgPSBuZXcgU291bmRzRW52aXJvbWVudChvcHRpb25zLnRlbXBsYXRlKTtcclxuICAgICAgICBzY2VuZS5jdHJsLnNldFNvdW5kcyhzY2VuZS5zb3VuZHMpO1xyXG4gICAgICAgIHNjZW5lLnNvdW5kcy5zdWJzY3JpYmVGbGlwcyhzY2VuZS5jdHJsKTtcclxuXHJcbiAgICAgICAgc2NlbmUucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIG5ldyBBdXRvTmF2aWdhdG9yKHNjZW5lLnZpc3VhbCwgc2NlbmUuY3RybCwgb3B0aW9ucy5hdXRvTmF2aWdhdGlvbikuZGlzcG9zZSgpO1xyXG4gICAgICAgIGlmKG9wdGlvbnMucmVhZHkpIHtcclxuICAgICAgICAgIG9wdGlvbnMucmVhZHkoc2NlbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihzY2VuZS5wZW5kaW5nRGlzcG9zZSkge1xyXG4gICAgICAgICAgc2NlbmUuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgaWYob3B0aW9ucy5wZGYpIHtcclxuICAgICAgICBzY2VuZS5wcm9wc0J1aWxkZXIgPSBuZXcgUGRmQm9va1Byb3BzQnVpbGRlcihvcHRpb25zLnBkZiwgc2NlbmUuYm9va0J1aWxkZXIpO1xyXG4gICAgICAgIHNjZW5lLnByb3BzQnVpbGRlci5wZGYuc2V0TG9hZGluZ1Byb2dyZXNzQ2xiKHNjZW5lLmxvYWRpbmdDdHJsLnNldFByb2dyZXNzLmJpbmQoc2NlbmUubG9hZGluZ0N0cmwpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKG9wdGlvbnMucGFnZUNhbGxiYWNrKSB7XHJcbiAgICAgICAgc2NlbmUucHJvcHNCdWlsZGVyID0gbmV3IENsYkJvb2tQcm9wc0J1aWxkZXIoc2NlbmUudmlzdWFsLCBvcHRpb25zLnBhZ2VDYWxsYmFjaywgb3B0aW9ucy5wYWdlcywgc2NlbmUuYm9va0J1aWxkZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNjZW5lLnByb3BzQnVpbGRlciA9IG5ldyBDbGJCb29rUHJvcHNCdWlsZGVyKHNjZW5lLnZpc3VhbCwgQm9vay5wYWdlQ2FsbGJhY2ssIDYsIHNjZW5lLmJvb2tCdWlsZGVyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sIG9wdGlvbnMudGVtcGxhdGUpO1xyXG4gIHJldHVybiBzY2VuZTtcclxufVxyXG5cclxuJCgoKT0+IHtcclxuICBsZXQgY29udGFpbmVycyA9ICQoJy5mbGlwLWJvb2stY29udGFpbmVyJyk7XHJcbiAgZm9yKGxldCBpID0gMDsgaTxjb250YWluZXJzLmxlbmd0aDsgKytpKSB7XHJcbiAgICBjb25zdCBqQ29udGFpbmVyID0gJChjb250YWluZXJzW2ldKSwgc3JjID0gakNvbnRhaW5lci5hdHRyKCdzcmMnKTtcclxuICAgIGlmKCEhc3JjKSB7XHJcbiAgICAgIGpDb250YWluZXIuRmxpcEJvb2soe3BkZjogc3JjfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59KTtcclxuXHJcbndpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9ICQ7XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2luZGV4LmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vaW5kZXguanMiLCJpZiAoIUFycmF5LnByb3RvdHlwZS5maWxsKSB7XHJcbiAgQXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG5cclxuICAgIC8vINCo0LDQs9C4IDEtMi5cclxuICAgIGlmICh0aGlzID09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XHJcblxyXG4gICAgLy8g0KjQsNCz0LggMy01LlxyXG4gICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xyXG5cclxuICAgIC8vINCo0LDQs9C4IDYtNy5cclxuICAgIHZhciBzdGFydCA9IGFyZ3VtZW50c1sxXTtcclxuICAgIHZhciByZWxhdGl2ZVN0YXJ0ID0gc3RhcnQgPj4gMDtcclxuXHJcbiAgICAvLyDQqNCw0LMgOC5cclxuICAgIHZhciBrID0gcmVsYXRpdmVTdGFydCA8IDAgP1xyXG4gICAgICBNYXRoLm1heChsZW4gKyByZWxhdGl2ZVN0YXJ0LCAwKSA6XHJcbiAgICAgIE1hdGgubWluKHJlbGF0aXZlU3RhcnQsIGxlbik7XHJcblxyXG4gICAgLy8g0KjQsNCz0LggOS0xMC5cclxuICAgIHZhciBlbmQgPSBhcmd1bWVudHNbMl07XHJcbiAgICB2YXIgcmVsYXRpdmVFbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/XHJcbiAgICAgIGxlbiA6IGVuZCA+PiAwO1xyXG5cclxuICAgIC8vINCo0LDQsyAxMS5cclxuICAgIHZhciBmaW5hbCA9IHJlbGF0aXZlRW5kIDwgMCA/XHJcbiAgICAgIE1hdGgubWF4KGxlbiArIHJlbGF0aXZlRW5kLCAwKSA6XHJcbiAgICAgIE1hdGgubWluKHJlbGF0aXZlRW5kLCBsZW4pO1xyXG5cclxuICAgIC8vINCo0LDQsyAxMi5cclxuICAgIHdoaWxlIChrIDwgZmluYWwpIHtcclxuICAgICAgT1trXSA9IHZhbHVlO1xyXG4gICAgICBrKys7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0KjQsNCzIDEzLlxyXG4gICAgcmV0dXJuIE87XHJcbiAgfTtcclxufVxyXG5cclxuaWYgKCFBcnJheS5wcm90b3R5cGUuZmluZCkge1xyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdmaW5kJywge1xyXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xyXG4gICAgICd1c2Ugc3RyaWN0JztcclxuICAgICBpZiAodGhpcyA9PSBudWxsKSB7XHJcbiAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcclxuICAgICB9XHJcbiAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgICB9XHJcbiAgICAgdmFyIGxpc3QgPSBPYmplY3QodGhpcyk7XHJcbiAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xyXG4gICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzWzFdO1xyXG4gICAgIHZhciB2YWx1ZTtcclxuXHJcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgdmFsdWUgPSBsaXN0W2ldO1xyXG4gICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBsaXN0KSkge1xyXG4gICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xyXG4gIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcclxuICAgIGlmICh0aGlzID09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJlZGljYXRlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHZhciBsaXN0ID0gT2JqZWN0KHRoaXMpO1xyXG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xyXG4gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHNbMV07XHJcbiAgICB2YXIgdmFsdWU7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICB2YWx1ZSA9IGxpc3RbaV07XHJcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaSwgbGlzdCkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH07XHJcbn1cclxuXHJcbmlmICghT2JqZWN0LnZhbHVlcykge1xyXG5cdE9iamVjdC52YWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMoTykge1xyXG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKE8pLm1hcCgobmFtZSk9Pk9bbmFtZV0pIHx8IFtdO1xyXG5cdH07XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL3BvbHlmaWxsLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL3BvbHlmaWxsLmpzIiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9OYXZpZ2F0b3Ige1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBib29rQ3RybCwgcHJvcHM9e30pIHtcclxuICAgIHByb3BzID0ge1xyXG4gICAgICAuLi5wcm9wcyxcclxuICAgICAgdXJsUGFyYW06IHByb3BzLnVybFBhcmFtIHx8ICdmYjNkLXBhZ2UnLFxyXG4gICAgICBuYXZpZ2F0ZXM6IHByb3BzLm5hdmlnYXRlcz09PXVuZGVmaW5lZD8gMTogcHJvcHMubmF2aWdhdGVzXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIHRoaXMuYm9va0N0cmwgPSBib29rQ3RybDtcclxuICAgIHRoaXMudXJsUGFyYW0gPSBwcm9wcy51cmxQYXJhbTtcclxuICAgIHRoaXMud25kID0gY29udGV4dC53bmQ7XHJcblxyXG4gICAgdGhpcy53bmQuZmIzZCA9IHtcclxuICAgICAgLi4udGhpcy53bmQuZmIzZFxyXG4gICAgfTtcclxuICAgIHRoaXMud25kLmZiM2QubmF2aWdhdG9yID0ge1xyXG4gICAgICAuLi50aGlzLnduZC5mYjNkLm5hdmlnYXRvclxyXG4gICAgfTtcclxuICAgIHRoaXMubmF2aWdhdG9yID0gdGhpcy53bmQuZmIzZC5uYXZpZ2F0b3JbdGhpcy51cmxQYXJhbV0gPSB7XHJcbiAgICAgIC4uLnRoaXMud25kLmZiM2QubmF2aWdhdG9yW3RoaXMudXJsUGFyYW1dXHJcbiAgICB9O1xyXG4gICAgdGhpcy5uYXZpZ2F0b3IuaW5zdGFuY2VzID0gKHRoaXMubmF2aWdhdG9yLmluc3RhbmNlcyB8fCAwKSsxO1xyXG5cclxuICAgIGlmKHRoaXMubmF2aWdhdG9yLmluc3RhbmNlczw9dGhpcy5wcm9wcy5uYXZpZ2F0ZXMpIHtcclxuICAgICAgdGhpcy5ib29rQ3RybC5nb1RvUGFnZSh0aGlzLmdldFBhZ2VOdW1iZXIoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lLCB1cmwpIHtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgfVxyXG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xcW1xcXV0vZywgJ1xcXFwkJicpO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKCdbPyZdJyArIG5hbWUgKyAnKD0oW15dKil8JnwjfCQpJyksXHJcbiAgICByZXN1bHRzID0gcmVnZXguZXhlYyh1cmwpO1xyXG4gICAgaWYgKCFyZXN1bHRzKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICghcmVzdWx0c1syXSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzJdLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VOdW1iZXIoKSB7XHJcbiAgICBsZXQgbnVtYmVyID0gdGhpcy5nZXRQYXJhbWV0ZXJCeU5hbWUodGhpcy51cmxQYXJhbSk7XHJcbiAgICBudW1iZXIgPSBwYXJzZUludChudW1iZXIpO1xyXG4gICAgaWYoaXNOYU4obnVtYmVyKSkge1xyXG4gICAgICBudW1iZXIgPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bWJlci0xO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9BdXRvTmF2aWdhdG9yLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9BdXRvTmF2aWdhdG9yLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnTWF0aFV0aWxzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmluZGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBwKSB7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbDtcclxuICAgIHRoaXMucCA9IHtcclxuICAgICAgLi4ucCxcclxuICAgICAgYmFja1NpemU6IDIqcC5jb3Zlci5kZXB0aCtwLnNoZWV0cypwLnBhZ2UuZGVwdGhcclxuICAgIH07XHJcbiAgICB0aGlzLk9aID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwwLDEpO1xyXG5cclxuICAgIHRoaXMuYmFja0cgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkocC5jb3Zlci5kZXB0aCwgdGhpcy5wLmJhY2tTaXplLCBwLmNvdmVyLmhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSlcclxuICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICBjb25zdCBiYWNrTSA9IG5ldyBUSFJFRS5NZXNoKHRoaXMuYmFja0csIG5ldyBUSFJFRS5NZXNoRmFjZU1hdGVyaWFsKHRoaXMubWF0ZXJpYWxzKSk7XHJcblxyXG4gICAgaWYocC5jb3Zlci5iaW5kZXJUZXh0dXJlIT09JycpIHtcclxuICAgICAgdGhpcy52aXN1YWwudGV4dHVyZUxvYWRlci5sb2FkKHAuY292ZXIuYmluZGVyVGV4dHVyZSwgKHRleHR1cmUpPT4ge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzWzFdLmNvbG9yLnNldEhleCgweEZGRkZGRik7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNbMV0ubWFwID0gdGV4dHVyZTtcclxuICAgICAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICAgICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc1sxXS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGhyZWUgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMuYmFjayA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5iYWNrUlQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMuYmFja1JSID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLmJhY2tMVCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5iYWNrTFIgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMubGVmdFBpdm90ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLnJpZ2h0UGl2b3QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuXHJcbiAgICB0aGlzLmJhY2suYWRkKGJhY2tNKTtcclxuICAgIHRoaXMuYmFjay5hZGQodGhpcy5sZWZ0UGl2b3QpO1xyXG4gICAgdGhpcy5iYWNrLmFkZCh0aGlzLnJpZ2h0UGl2b3QpO1xyXG4gICAgdGhpcy5iYWNrUlQuYWRkKHRoaXMuYmFjayk7XHJcbiAgICB0aGlzLmJhY2tSUi5hZGQodGhpcy5iYWNrUlQpO1xyXG4gICAgdGhpcy5iYWNrTFQuYWRkKHRoaXMuYmFja1JSKTtcclxuICAgIHRoaXMuYmFja0xSLmFkZCh0aGlzLmJhY2tMVCk7XHJcbiAgICB0aGlzLnRocmVlLmFkZCh0aGlzLmJhY2tMUik7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgZm9yKGxldCBtIG9mIHRoaXMubWF0ZXJpYWxzKSB7XHJcbiAgICAgIGlmKG0ubWFwKSB7XHJcbiAgICAgICAgbS5tYXAgPSBudWxsO1xyXG4gICAgICAgIG0ubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIG0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMubWF0ZXJpYWxzO1xyXG4gICAgdGhpcy5iYWNrRy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBzZXQoYW5nbGUpIHtcclxuICAgIGxldCByaWdodCwgbGVmdDtcclxuICAgIGlmKGFuZ2xlPk1hdGguUEkvMikge1xyXG4gICAgICByaWdodCA9IE1hdGguUEkvMjtcclxuICAgICAgbGVmdCA9IGFuZ2xlLU1hdGguUEkvMjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByaWdodCA9IGFuZ2xlO1xyXG4gICAgICBsZWZ0ID0gMDtcclxuICAgIH1cclxuICAgIGNvbnN0IHAgPSB0aGlzLnAsdHIxPXt4Oi0wLjUqcC5jb3Zlci5kZXB0aCx5OjAuNSpwLmJhY2tTaXplLXAuY292ZXIuZGVwdGh9O1xyXG4gICAgdGhpcy5iYWNrUlQucG9zaXRpb24uc2V0KHRyMS54LHRyMS55LDApO1xyXG4gICAgdGhpcy5iYWNrUlIucG9zaXRpb24uc2V0KC10cjEueCwtdHIxLnksMCk7XHJcbiAgICB0aGlzLmJhY2tSUi5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodGhpcy5PWiwgcmlnaHQpO1xyXG5cclxuICAgIGNvbnN0IHRyMj17eDpwLmJhY2tTaXplLTIqcC5jb3Zlci5kZXB0aC0wLjUqcC5jb3Zlci5kZXB0aCx5OjAuNSpwLmJhY2tTaXplLXAuY292ZXIuZGVwdGh9O1xyXG4gICAgdGhpcy5iYWNrTFQucG9zaXRpb24uc2V0KHRyMi54LHRyMi55LDApO1xyXG4gICAgdGhpcy5iYWNrTFIucG9zaXRpb24uc2V0KC10cjIueCwtdHIyLnksMCk7XHJcbiAgICB0aGlzLmJhY2tMUi5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodGhpcy5PWiwgbGVmdCk7XHJcbiAgfVxyXG5cclxuICBzZXRMZWZ0KGFuZ2xlKSB7XHJcbiAgICBjb25zdCBQSSA9IE1hdGguUEk7XHJcbiAgICB0aGlzLmxlZnRQaXZvdC5wb3NpdGlvbi5zZXQoTWF0aFV0aWxzLmludGVycG9sYXRlTGluZWFyKFstUEksLVBJLzJdLFswLHRoaXMucC5jb3Zlci5kZXB0aF0sYW5nbGUpLDAuNSp0aGlzLnAuYmFja1NpemUtMC41KnRoaXMucC5jb3Zlci5kZXB0aCwwKTtcclxuICAgIHRoaXMubGVmdFBpdm90LnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0aGlzLk9aLCBhbmdsZSk7XHJcbiAgfVxyXG5cclxuICBzZXRSaWdodChhbmdsZSkge1xyXG4gICAgY29uc3QgUEkgPSBNYXRoLlBJO1xyXG4gICAgICB0aGlzLnJpZ2h0UGl2b3QucG9zaXRpb24uc2V0KE1hdGhVdGlscy5pbnRlcnBvbGF0ZUxpbmVhcihbLVBJLzIsMF0sW3RoaXMucC5jb3Zlci5kZXB0aCwwXSxhbmdsZSksLTAuNSp0aGlzLnAuYmFja1NpemUrMC41KnRoaXMucC5jb3Zlci5kZXB0aCwwKTtcclxuICAgICAgdGhpcy5yaWdodFBpdm90LnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0aGlzLk9aLCBhbmdsZSk7XHJcbiAgfVxyXG5cclxuICBqb2luTGVmdENvdmVyKGNvdmVyKSB7XHJcbiAgICBjb3Zlci50aHJlZS5wb3NpdGlvbi5zZXQoMCwtMC41KnRoaXMucC5jb3Zlci5kZXB0aCwwKTtcclxuICAgIHRoaXMubGVmdFBpdm90LmFkZChjb3Zlci50aHJlZSk7XHJcbiAgfVxyXG5cclxuICBkaXNjb25uZWN0TGVmdENvdmVyKGNvdmVyKSB7XHJcbiAgICB0aGlzLmxlZnRQaXZvdC5yZW1vdmUoY292ZXIudGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgam9pblJpZ2h0Q292ZXIoY292ZXIpIHtcclxuICAgIGNvdmVyLnRocmVlLnBvc2l0aW9uLnNldCgwLC0wLjUqdGhpcy5wLmNvdmVyLmRlcHRoLDApO1xyXG4gICAgdGhpcy5yaWdodFBpdm90LmFkZChjb3Zlci50aHJlZSk7XHJcbiAgfVxyXG5cclxuICBkaXNjb25uZWN0UmlnaHRDb3Zlcihjb3Zlcikge1xyXG4gICAgdGhpcy5yaWdodFBpdm90LnJlbW92ZShjb3Zlci50aHJlZSk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9CaW5kZXIuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9qcy9jbGFzc2VzL0JpbmRlci5qcyIsImltcG9ydCB7JCwgVEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQge3Byb3BzIGFzICBib29rUHJvcHN9IGZyb20gJy4uL3Byb3BzL2Jvb2snO1xyXG5pbXBvcnQgR3JhcGhVdGlscyBmcm9tICdHcmFwaFV0aWxzJztcclxuaW1wb3J0IEJpbmRlciBmcm9tICcuL0JpbmRlcic7XHJcbmltcG9ydCBDb3ZlciBmcm9tICcuL0NvdmVyJztcclxuaW1wb3J0IFNoZWV0QmxvY2sgZnJvbSAnLi9TaGVldEJsb2NrJztcclxuaW1wb3J0IFNoZWV0UGh5c2ljcyBmcm9tICcuL1NoZWV0UGh5c2ljcyc7XHJcbmltcG9ydCBQYWdlTWFuYWdlciBmcm9tICcuL1BhZ2VNYW5hZ2VyJztcclxuaW1wb3J0IENTU0xheWVyIGZyb20gJ0NTU0xheWVyJztcclxuaW1wb3J0IENzc0xheWVyc01hbmFnZXIgZnJvbSAnLi9Dc3NMYXllcnNNYW5hZ2VyJztcclxuaW1wb3J0IFNlYXJjaEVuZ2luZSBmcm9tICcuL1NlYXJjaEVuZ2luZSc7XHJcbmltcG9ydCBDdXN0b21FdmVudENvbnZlcnRlciBmcm9tICdDdXN0b21FdmVudENvbnZlcnRlcic7XHJcbmltcG9ydCBDaXJjbGVUYXJnZXQgZnJvbSAndGFyZ2V0cy9DaXJjbGVUYXJnZXQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9vayBleHRlbmRzIFRIUkVFLkV2ZW50RGlzcGF0Y2hlciB7XHJcbiAgLy8gcGFnZUNhbGxiYWNrIHNhbXBsZXNcclxuXHJcbiAgLy8gKG4pPT4gKHtcclxuICAvLyAgIHR5cGU6ICdpbWFnZScsXHJcbiAgLy8gICBzcmM6ICdzYW1wbGUucG5nJyxcclxuICAvLyAgIGludGVyYWN0aXZlOiBmYWxzZVxyXG4gIC8vIH0pO1xyXG4gIC8vXHJcbiAgLy8gKG4pPT4gKHtcclxuICAvLyAgIHR5cGU6ICdodG1sJyxcclxuICAvLyAgIHNyYzogJ3NhbXBsZS5odG1sJyxcclxuICAvLyAgIGludGVyYWN0aXZlOiB0cnVlXHJcbiAgLy8gfSk7XHJcbiAgLy9cclxuICAvLyBjb25zdCBwZGYgPSBuZXcgUGRmKCdzYW1wbGUucGRmJyk7XHJcbiAgLy8gKG4pPT4gKHtcclxuICAvLyAgIHR5cGU6ICdwZGYnLFxyXG4gIC8vICAgc3JjOiBwZGYsXHJcbiAgLy8gICBpbnRlcmFjdGl2ZTogZmFsc2VcclxuICAvLyB9KTtcclxuXHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBzaGVldHMsIHBhZ2VDYWxsYmFjaywgcHJvcHMpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICBzaGVldHMgPSBNYXRoLm1pbigzLCBzaGVldHMpO1xyXG4gICAgdmlzdWFsLmpDb250YWluZXIuYXBwZW5kKGBcclxuICAgICAgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxyXG4gICAgICAgIC5kZW1vLW1zZyB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICB0b3A6IDEwcHg7XHJcbiAgICAgICAgICByaWdodDogMTBweDtcclxuICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlNGUxO1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4O1xyXG4gICAgICAgIH1cclxuICAgICAgPC9zdHlsZT5cclxuICAgICAgPGRpdiBjbGFzcz1cImRlbW8tbXNnXCI+XHJcbiAgICAgICAgVGhpcyBpcyB0aGUgZGVtbyB2ZXJzaW9uLCBvbmx5IDEwIHBhZ2VzIGFyZSBhdmFpbGFibGUuIFVzZSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vZ29vLmdsL2J0M1poaFwiIHRhcmdldD1cIl9ibGFua1wiPmZ1bGwgdmVyc2lvbjwvYT4uXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgYCk7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbDtcclxuICAgIHRoaXMubW91c2VDb250cm9sbGVyID0gdHJ1ZTtcclxuICAgIHRoaXMucCA9IHtcclxuICAgICAgLi4uQm9vay5wcmVwYXJlUHJvcHMocHJvcHMpLFxyXG4gICAgICBzaGVldHMsXHJcbiAgICAgIHBhZ2VDYWxsYmFjayxcclxuICAgICAgem9vbTogMSxcclxuICAgICAgc2luZ2xlUGFnZTogZmFsc2UsXHJcbiAgICAgIGF1dG9SZXNvbHV0aW9uOiB7XHJcbiAgICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgICBrOiAxLjVcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMucGFnZU1hbmFnZXIgPSBuZXcgUGFnZU1hbmFnZXIodmlzdWFsLCB0aGlzLCB0aGlzLnApO1xyXG4gICAgQ1NTTGF5ZXIuaW5pdCh2aXN1YWwuZG9jKTtcclxuICAgIHRoaXMubGF5ZXJNYW5hZ2VyID0gbmV3IENzc0xheWVyc01hbmFnZXIodGhpcyk7XHJcbiAgICB0aGlzLnNlYXJjaEVuZ2luZSA9IG5ldyBTZWFyY2hFbmdpbmUocGFnZUNhbGxiYWNrLCAyKihzaGVldHMrMikpO1xyXG4gICAgdGhpcy5zZWFyY2hFbmdpbmUub25QYWdlSGl0c0NoYW5nZWQgPSAocGFnZSwgcXVlcnkpPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VNYW5hZ2VyLnJlZnJlc2hQYWdlUXVlcnkocGFnZSwgcXVlcnkpO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe1xyXG4gICAgICAgIHR5cGU6ICdzZWFyY2hSZXN1bHRzJyxcclxuICAgICAgICByZXN1bHRzOiB0aGlzLnNlYXJjaEVuZ2luZS5yZXN1bHRzLFxyXG4gICAgICAgIGxhc3RQYWdlOiBwYWdlLFxyXG4gICAgICAgIHF1ZXJ5XHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnRocmVlID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcblxyXG4gICAgdGhpcy5iaW5kZXIgPSBuZXcgQmluZGVyKHZpc3VhbCwgdGhpcy5wKTtcclxuICAgIHRoaXMudGhyZWUuYWRkKHRoaXMuYmluZGVyLnRocmVlKTtcclxuXHJcbiAgICB0aGlzLmxlZnRDb3ZlciA9IG5ldyBDb3Zlcih2aXN1YWwsIHsuLi50aGlzLnAsIHNldFRleHR1cmU6IHRoaXMuc2V0TGVmdENvdmVyVGV4dHVyZS5iaW5kKHRoaXMpfSwgTWF0aC5QSS8yLCAnb3BlbmVkJyk7XHJcbiAgICB0aGlzLmJpbmRlci5qb2luTGVmdENvdmVyKHRoaXMubGVmdENvdmVyKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlU2hlZXRCbG9jayh0aGlzLmxlZnRDb3ZlciwgMCk7XHJcbiAgICB0aGlzLnJpZ2h0Q292ZXIgPSBuZXcgQ292ZXIodmlzdWFsLCB7Li4udGhpcy5wLCBzZXRUZXh0dXJlOiB0aGlzLnNldFJpZ2h0Q292ZXJUZXh0dXJlLmJpbmQodGhpcyl9LCAwLCAnY2xvc2VkJyk7XHJcbiAgICB0aGlzLmJpbmRlci5qb2luUmlnaHRDb3Zlcih0aGlzLnJpZ2h0Q292ZXIpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVTaGVldEJsb2NrKHRoaXMucmlnaHRDb3ZlciwgMioodGhpcy5wLnNoZWV0cysxKSk7XHJcblxyXG4gICAgdGhpcy50aHJlZVNoZWV0QmxvY2tzID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLnRocmVlLmFkZCh0aGlzLnRocmVlU2hlZXRCbG9ja3MpO1xyXG4gICAgdGhpcy50aHJlZVNoZWV0QmxvY2tzLnBvc2l0aW9uLnNldCgwLjUqdGhpcy5wLmNvdmVyLmRlcHRoLTAuNSpzaGVldHMqdGhpcy5wLnBhZ2UuZGVwdGgsLTAuNSpzaGVldHMqdGhpcy5wLnBhZ2UuZGVwdGgsMCk7XHJcblxyXG4gICAgdGhpcy5zaGVldEJsb2NrcyA9IFtdO1xyXG4gICAgaWYoc2hlZXRzPjApIHtcclxuICAgICAgdGhpcy5hZGRTaGVldEJsb2NrKDAsIG5ldyBTaGVldEJsb2NrKHZpc3VhbCwgey4uLnRoaXMucCwgc2V0VGV4dHVyZTogdGhpcy5zZXRQYWdlVGV4dHVyZS5iaW5kKHRoaXMpfSwgMCwgc2hlZXRzLCAwLCAnY2xvc2VkJykpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYW5nbGUgPSB0aGlzLnAucnRsPyBNYXRoLlBJOiAwO1xyXG4gICAgdGhpcy5jbG9zZWRBbmdsZSA9IDA7XHJcbiAgICB0aGlzLnNldCh0aGlzLmFuZ2xlLDApO1xyXG4gICAgdGhpcy5sYXN0TW91c2VQb3MgPSB7XHJcbiAgICAgIHQ6IDBcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy50aHJlZS5wb3NpdGlvbi5zZXQoLTAuNSp0aGlzLnAuY292ZXIuZGVwdGgrMC41KnNoZWV0cyp0aGlzLnAucGFnZS5kZXB0aCwwLDApO1xyXG4gICAgdGhpcy5zaGVldFBoeXNpY3MgPSBuZXcgU2hlZXRQaHlzaWNzKHRoaXMucC5wYWdlLndpZHRoL3RoaXMucC5zY2FsZSwgdGhpcy5wLmdyYXZpdHksIHRoaXMucC5wYWdlLmNvcm5lckRldmlhdGlvbik7XHJcblxyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBsYXN0TW91c2VQb3M6IChlKT0+IHtcclxuICAgICAgICB0aGlzLmxhc3RNb3VzZVBvcyA9IHtcclxuICAgICAgICAgIC4uLnRoaXMubGFzdE1vdXNlUG9zLFxyXG4gICAgICAgICAgcGFnZVg6IGUucGFnZVgsXHJcbiAgICAgICAgICBwYWdlWTogZS5wYWdlWVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnZpc3VhbC5hZGRSZW5kZXJDYWxsYmFjayh0aGlzLmJpbmRzLnVwZGF0ZSk7XHJcbiAgICAkKHRoaXMudmlzdWFsLmVsZW1lbnQpLm9uKCdtb3VzZW1vdmUnLCB0aGlzLmJpbmRzLmxhc3RNb3VzZVBvcyk7XHJcblxyXG4gICAgdGhpcy5iaW5kcy5vblBpY2tDYWxsYmFjayA9IHRoaXMub25QaWNrQ2FsbGJhY2suYmluZCh0aGlzKVxyXG4gICAgdGhpcy52aXN1YWwuZHJhZy5vblBpY2tDYWxsYmFjayA9IHRoaXMuYmluZHMub25QaWNrQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmJpbmRzLm9uRHJhZ0NhbGxiYWNrID0gdGhpcy5vbkRyYWdDYWxsYmFjay5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLnZpc3VhbC5kcmFnLm9uRHJhZ0NhbGxiYWNrID0gdGhpcy5iaW5kcy5vbkRyYWdDYWxsYmFjaztcclxuICAgIHRoaXMuYmluZHMub25SZWxlYXNlQ2FsbGJhY2sgPSB0aGlzLm9uUmVsZWFzZUNhbGxiYWNrLmJpbmQodGhpcylcclxuICAgIHRoaXMudmlzdWFsLmRyYWcub25SZWxlYXNlQ2FsbGJhY2sgPSB0aGlzLmJpbmRzLm9uUmVsZWFzZUNhbGxiYWNrO1xyXG5cclxuICAgIHRoaXMuZHJhZ0FuZ2xlID0gMC4wNTtcclxuICAgIHRoaXMudG1wID0ge1xyXG4gICAgICBib3hzOiBbXHJcbiAgICAgICAgbmV3IFRIUkVFLkJveDMoKSxcclxuICAgICAgICBuZXcgVEhSRUUuQm94MygpXHJcbiAgICAgIF1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy52aXN1YWwuYWRkT2JqZWN0KHRoaXMudGhyZWUpO1xyXG4gICAgdGhpcy52aXN1YWwuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5wYWdlTWFuYWdlci5yZWZyZXNoWm9vbS5iaW5kKHRoaXMucGFnZU1hbmFnZXIpKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICB0aGlzLm5vdGlmeUJlZm9yZUFuaW1hdGlvbigpO1xyXG4gICAgICB0aGlzLm5vdGlmeUFmdGVyQW5pbWF0aW9uKCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMudmlzdWFsLnJlbW92ZU9iamVjdCh0aGlzLnRocmVlKTtcclxuICAgIHRoaXMuc2hlZXRQaHlzaWNzLmRpc3Bvc2UoKTtcclxuICAgIGRlbGV0ZSB0aGlzLnZpc3VhbC5kcmFnLm9uUGlja0NhbGxiYWNrO1xyXG4gICAgZGVsZXRlIHRoaXMudmlzdWFsLmRyYWcub25EcmFnQ2FsbGJhY2s7XHJcbiAgICBkZWxldGUgdGhpcy52aXN1YWwuZHJhZy5vblJlbGVhc2VDYWxsYmFjaztcclxuICAgICQodGhpcy52aXN1YWwuZWxlbWVudCkub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLmJpbmRzLmxhc3RNb3VzZVBvcyk7XHJcbiAgICB0aGlzLnZpc3VhbC5yZW1vdmVSZW5kZXJDYWxsYmFjayh0aGlzLmJpbmRzLnVwZGF0ZSk7XHJcbiAgICB0aGlzLnJlbW92ZVNoZWV0QmxvY2tzKDAsIHRoaXMuc2hlZXRCbG9ja3MubGVuZ3RoKTtcclxuICAgIHRoaXMuYmluZGVyLmRpc2Nvbm5lY3RMZWZ0Q292ZXIodGhpcy5sZWZ0Q292ZXIpO1xyXG4gICAgdGhpcy5yZW1vdmVTaGVldEJsb2NrKHRoaXMubGVmdENvdmVyKTtcclxuICAgIHRoaXMuYmluZGVyLmRpc2Nvbm5lY3RSaWdodENvdmVyKHRoaXMucmlnaHRDb3Zlcik7XHJcbiAgICB0aGlzLnJlbW92ZVNoZWV0QmxvY2sodGhpcy5yaWdodENvdmVyKTtcclxuICAgIHRoaXMuYmluZGVyLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMubGF5ZXJNYW5hZ2VyLmRpc3Bvc2UoKTtcclxuICAgIENTU0xheWVyLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMucGFnZU1hbmFnZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljcyB7XHJcblxyXG4gIHNldEF1dG9SZXNvbHV0aW9uKGVuYWJsZSwgaz0xLjUpIHtcclxuICAgIHRoaXMucC5hdXRvUmVzb2x1dGlvbiA9IHtcclxuICAgICAgLi4udGhpcy5wLmF1dG9SZXNvbHV0aW9uLFxyXG4gICAgICBlbmFibGUsXHJcbiAgICAgIGtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzZXRab29tKHpvb20sIHNpbmdsZVBhZ2UpIHtcclxuICAgIGlmKE1hdGguYWJzKHRoaXMucC56b29tLXpvb20pPjFlLTMgfHwgc2luZ2xlUGFnZSE9PXRoaXMucC5zaW5nbGVQYWdlKSB7XHJcbiAgICAgIHRoaXMucC56b29tID0gem9vbTtcclxuICAgICAgdGhpcy5wLnNpbmdsZVBhZ2UgPSBzaW5nbGVQYWdlO1xyXG4gICAgICB0aGlzLnBhZ2VNYW5hZ2VyLnJlZnJlc2hab29tKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlQ2FsbGJhY2soKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wLnBhZ2VDYWxsYmFjaztcclxuICB9XHJcblxyXG4gIHNldFF1ZXJ5KHF1ZXJ5KSB7XHJcbiAgICB0aGlzLnNlYXJjaEVuZ2luZS5zZXRRdWVyeShxdWVyeSk7XHJcbiAgfVxyXG5cclxuICBpc1Byb2Nlc3NpbmcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaGVldFBoeXNpY3MuZ2V0U2l6ZSgpIT09MDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VzKCkge1xyXG4gICAgcmV0dXJuIDQrMip0aGlzLnAuc2hlZXRzO1xyXG4gIH1cclxuXHJcbiAgc2V0RmxpcFByb2dyZXNzQ2xiKGNsYikge1xyXG4gICAgdGhpcy5wLmZsaXBQcm9ncmVzc0NsYiA9IGNsYjtcclxuICB9XHJcblxyXG4gIHNldEluamVjdG9yKGluamVjdG9yKSB7XHJcbiAgICB0aGlzLnAuaW5qZWN0b3IgPSBpbmplY3RvcjtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlUGFnZShuKSB7XHJcbiAgICBsZXQgcmVzID0gdHJ1ZTtcclxuICAgIGlmKG4+MSAmJiBuPHRoaXMuZ2V0UGFnZXMoKS0yKSB7XHJcbiAgICAgIGZvcihsZXQgYiBvZiB0aGlzLnNoZWV0QmxvY2tzKSB7XHJcbiAgICAgICAgaWYobi0yPjIqYi5wLmZpcnN0ICYmIG4tMjwyKmIucC5sYXN0LTEpIHtcclxuICAgICAgICAgIHJlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBnZXRCbG9ja0J5UGFnZShuKSB7XHJcbiAgICBsZXQgYmxvY2s7XHJcbiAgICBpZihuPDIpIHtcclxuICAgICAgYmxvY2sgPSB0aGlzLmxlZnRDb3ZlcjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYobjwyKih0aGlzLnAuc2hlZXRzKzEpKSB7XHJcbiAgICAgIGZvcihsZXQgYiBvZiB0aGlzLnNoZWV0QmxvY2tzKSB7XHJcbiAgICAgICAgaWYobi0yPj0yKmIucC5maXJzdCAmJiBuLTI8MipiLnAubGFzdCkge1xyXG4gICAgICAgICAgYmxvY2sgPSBiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYmxvY2sgPSB0aGlzLnJpZ2h0Q292ZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmxvY2s7XHJcbiAgfVxyXG5cclxuICBnZXRCbG9ja1BhZ2VzKGJsb2NrKSB7XHJcbiAgICBsZXQgcmFuZ2U7XHJcbiAgICBzd2l0Y2ggKGJsb2NrKSB7XHJcbiAgICAgIGNhc2UgdGhpcy5sZWZ0Q292ZXI6IHtcclxuICAgICAgICAgIHJhbmdlID0gWzAsIDFdO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgdGhpcy5yaWdodENvdmVyOiB7XHJcbiAgICAgICAgcmFuZ2UgPSBbMioodGhpcy5wLnNoZWV0cysxKSwgMioodGhpcy5wLnNoZWV0cysxKSsxXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgcmFuZ2UgPSBibG9jaz8gWzIqKGJsb2NrLnAuZmlyc3QrMSksIDIqKGJsb2NrLnAubGFzdCsxKS0xXTogdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmFuZ2U7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlKCkge1xyXG4gICAgY29uc3QgUEkgPSBNYXRoLlBJO1xyXG4gICAgbGV0IHA7XHJcbiAgICBpZih0aGlzLmFuZ2xlID09PSBQSS8yIHx8IHRoaXMuYW5nbGUgPT09IDMqUEkvMikge1xyXG4gICAgICBmb3IobGV0IGJsb2NrIG9mIHRoaXMuc2hlZXRCbG9ja3MpIHtcclxuICAgICAgICBpZihibG9jay5hbmdsZTw9UEkvMikge1xyXG4gICAgICAgICAgcCA9IHRoaXMuZ2V0QmxvY2tQYWdlcyhibG9jaylbMF0tMTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZighcCkge1xyXG4gICAgICAgIHAgPSB0aGlzLmdldFBhZ2VzKCktMztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmFuZ2xlPFBJLzIpIHtcclxuICAgICAgcCA9IDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuYW5nbGU+MypQSS8yKSB7XHJcbiAgICAgIHAgPSAxO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmFuZ2xlPFBJKSB7XHJcbiAgICAgIHAgPSB0aGlzLmdldFBhZ2VzKCktMztcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5hbmdsZT49UEkpIHtcclxuICAgICAgcCA9IHRoaXMuZ2V0UGFnZXMoKS0xO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHA7XHJcbiAgfVxyXG5cclxuICBnZXRUb3BQYWdlcygpIHtcclxuICAgIGNvbnN0IHAgPSB0aGlzLmdldFBhZ2UoKTtcclxuICAgIHJldHVybiBwPT09MCB8fCBwPT09dGhpcy5nZXRQYWdlcygpLTE/IFtwXTogW3AsIHArMV07XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlU3RhdGUobikge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZU1hbmFnZXIuZ2V0UGFnZVN0YXRlKG4pO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTG9hZGluZ0FuaW1hdGlvbihlbmFibGUpIHtcclxuICAgIHRoaXMucGFnZU1hbmFnZXIuZW5hYmxlTG9hZGluZ0FuaW1hdGlvbihlbmFibGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVmdEZsaXBwaW5nKCkge1xyXG4gICAgbGV0IGJsb2NrO1xyXG4gICAgY29uc3QgbGVmdCA9IHRoaXMuc2hlZXRCbG9ja3NbMF0sIFBJID0gTWF0aC5QSTtcclxuICAgIGlmKHRoaXMuYW5nbGU9PT1QSSkge1xyXG4gICAgICBibG9jayA9IHRoaXMucmlnaHRDb3ZlcjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZihsZWZ0ICYmIGxlZnQuc3RhdGU9PT0nY2xvc2VkJyAmJiBsZWZ0LmFuZ2xlPlBJLzIpIHtcclxuICAgICAgICBibG9jayA9IGxlZnQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZih0aGlzLmFuZ2xlID09PSBQSS8yIHx8IHRoaXMuYW5nbGUgPT09IDMqUEkvMikge1xyXG4gICAgICAgIGJsb2NrID0gdGhpcy5sZWZ0Q292ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBibG9jaztcclxuICB9XHJcblxyXG4gIGdldFJpZ2h0RmxpcHBpbmcoKSB7XHJcbiAgICBsZXQgYmxvY2s7XHJcbiAgICBjb25zdCByaWdodCA9IHRoaXMuc2hlZXRCbG9ja3NbdGhpcy5zaGVldEJsb2Nrcy5sZW5ndGgtMV0sIFBJID0gTWF0aC5QSTtcclxuICAgIGlmKHRoaXMuYW5nbGU9PT0wKSB7XHJcbiAgICAgIGJsb2NrID0gdGhpcy5sZWZ0Q292ZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYocmlnaHQgJiYgcmlnaHQuc3RhdGU9PT0nY2xvc2VkJyAmJiByaWdodC5hbmdsZTw9UEkvMikge1xyXG4gICAgICAgIGJsb2NrID0gcmlnaHQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZih0aGlzLmFuZ2xlPT09UEkvMiB8fCB0aGlzLmFuZ2xlID09PSAzKlBJLzIpIHtcclxuICAgICAgICBibG9jayA9IHRoaXMucmlnaHRDb3ZlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJsb2NrO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2xvc2VkQmxvY2tBbmdsZShhbmdsZSkge1xyXG4gICAgbGV0IGNsb3NlZEFuZ2xlLCB7UEl9ID0gTWF0aDtcclxuXHJcbiAgICBpZih0aGlzLmxlZnRDb3Zlci5waHlzaWNJZCkge1xyXG4gICAgICBsZXQgdGVzdDtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0ZXN0ID0gTWF0aC5hYnModGhpcy5zaGVldFBoeXNpY3MuZ2V0UGFyYW1ldHIodGhpcy5sZWZ0Q292ZXIucGh5c2ljSWQsICdhbmdsZScpLWFuZ2xlKVxyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICB0ZXN0ID0gMDtcclxuICAgICAgfVxyXG4gICAgICBjbG9zZWRBbmdsZSA9IGFuZ2xlPlBJLzIgfHwgdGVzdD5QSS82PyBQSS8yOiB0aGlzLmNsb3NlZEFuZ2xlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLnJpZ2h0Q292ZXIucGh5c2ljSWQpIHtcclxuICAgICAgbGV0IHRlc3Q7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGVzdCA9IE1hdGguYWJzKHRoaXMuc2hlZXRQaHlzaWNzLmdldFBhcmFtZXRyKHRoaXMucmlnaHRDb3Zlci5waHlzaWNJZCwgJ2FuZ2xlJyktYW5nbGUpXHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2goZSkge1xyXG4gICAgICAgIHRlc3QgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGNsb3NlZEFuZ2xlID0gYW5nbGU8UEkvMiB8fCB0ZXN0PlBJLzY/IFBJLzIrMWUtNzogdGhpcy5jbG9zZWRBbmdsZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjbG9zZWRBbmdsZSA9IFBJLzIrKGFuZ2xlIT09MCkqMWUtNztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBvcGVuZWRBbmdsZTogYW5nbGUsXHJcbiAgICAgIGNsb3NlZEFuZ2xlLFxyXG4gICAgICBiaW5kZXJUdXJuOiB0aGlzLmNsb3NlZEFuZ2xlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZmxpcExlZnQoc2l6ZT0xLCBwcm9ncmVzc0NsYj10aGlzLnAuZmxpcFByb2dyZXNzQ2xiKSB7XHJcbiAgICBsZXQgYmxvY2ssIHJlcztcclxuICAgIGlmKHRoaXMuc2hlZXRQaHlzaWNzLmdldFNpemUoKTwyNSkge1xyXG4gICAgICBjb25zdCBsZWZ0ID0gdGhpcy5zaGVldEJsb2Nrc1swXSwgUEkgPSBNYXRoLlBJO1xyXG4gICAgICBpZih0aGlzLmFuZ2xlPT09UEkpIHtcclxuICAgICAgICByZXMgPSB0aGlzLmNvbm5lY3RQaHlzaWNzKFxyXG4gICAgICAgICAgYmxvY2s9dGhpcy5yaWdodENvdmVyLFxyXG4gICAgICAgICAgdGhpcy5wLmNvdmVyLm1hc3MsXHJcbiAgICAgICAgICBQSSxcclxuICAgICAgICAgIC10aGlzLnAuY292ZXIuc3RhcnRWZWxvY2l0eSxcclxuICAgICAgICAgIHRoaXMucC5jb3Zlci5mbGV4aWJpbGl0eSxcclxuICAgICAgICAgIDAsXHJcbiAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+dGhpcy5zZXQoMypQSS8yLWFuZ2xlLzIsaGVpZ2h0KSxcclxuICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldCgzKlBJLzItYW5nbGUvMiwwKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhhbmdsZT8gUEk6IFBJLzIrMWUtNywnY2xvc2VkJyk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcHJvZ3Jlc3NDbGJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmKGxlZnQgJiYgbGVmdC5zdGF0ZT09PSdjbG9zZWQnICYmIGxlZnQuYW5nbGU+UEkvMikge1xyXG4gICAgICAgICAgYmxvY2sgPSBzaXplPGxlZnQuZ2V0U2l6ZSgpPyB0aGlzLnNwbGl0U2hlZXRCbG9jaygwLCBsZWZ0LmdldFNpemUoKS1zaXplKVsxXTogbGVmdDtcclxuICAgICAgICAgIHJlcyA9IHRoaXMuY29ubmVjdFBoeXNpY3MoXHJcbiAgICAgICAgICAgIGJsb2NrLFxyXG4gICAgICAgICAgICB0aGlzLnAucGFnZS5tYXNzKmJsb2NrLmdldFNpemUoKSxcclxuICAgICAgICAgICAgUEksXHJcbiAgICAgICAgICAgIC10aGlzLnAucGFnZS5zdGFydFZlbG9jaXR5LFxyXG4gICAgICAgICAgICB0aGlzLnAucGFnZS5mbGV4aWJpbGl0eSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PmJsb2NrLnNldCh0aGlzLmdldENsb3NlZEJsb2NrQW5nbGUoYW5nbGUpLCdvcGVuZWQnLGhlaWdodCksXHJcbiAgICAgICAgICAgIEJvb2suZmluaXNoQW5pbWF0aW9uQ2xiLmJpbmQoe2Jvb2s6IHRoaXMsIGJsb2NrfSksXHJcbiAgICAgICAgICAgIHByb2dyZXNzQ2xiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMuYW5nbGUgPT09IFBJLzIgfHwgdGhpcy5hbmdsZSA9PT0gMypQSS8yKSB7XHJcbiAgICAgICAgICByZXMgPSB0aGlzLmNvbm5lY3RQaHlzaWNzKFxyXG4gICAgICAgICAgICBibG9jaz10aGlzLmxlZnRDb3ZlcixcclxuICAgICAgICAgICAgdGhpcy5wLmNvdmVyLm1hc3MsXHJcbiAgICAgICAgICAgIFBJLFxyXG4gICAgICAgICAgICAtdGhpcy5wLmNvdmVyLnN0YXJ0VmVsb2NpdHksXHJcbiAgICAgICAgICAgIHRoaXMucC5jb3Zlci5mbGV4aWJpbGl0eSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXQoMipQSS1hbmdsZS8yLGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgaWYoYW5nbGU+UEkvMikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhhbmdsZT8gUEkvMjogMCwnY2xvc2VkJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+IHRoaXMuc2V0KGFuZ2xlPT09MD8gMDogMipQSS1hbmdsZS8yLDApLFxyXG4gICAgICAgICAgICBwcm9ncmVzc0NsYlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBmbGlwUmlnaHQoc2l6ZT0xLCBwcm9ncmVzc0NsYj10aGlzLnAuZmxpcFByb2dyZXNzQ2xiKSB7XHJcbiAgICBsZXQgYmxvY2ssIHJlcztcclxuICAgIGlmKHRoaXMuc2hlZXRQaHlzaWNzLmdldFNpemUoKTwyNSkge1xyXG4gICAgICBjb25zdCByaWdodCA9IHRoaXMuc2hlZXRCbG9ja3NbdGhpcy5zaGVldEJsb2Nrcy5sZW5ndGgtMV0sIFBJID0gTWF0aC5QSTtcclxuICAgICAgaWYodGhpcy5hbmdsZT09PTApIHtcclxuICAgICAgICByZXMgPSB0aGlzLmNvbm5lY3RQaHlzaWNzKFxyXG4gICAgICAgICAgYmxvY2s9dGhpcy5sZWZ0Q292ZXIsXHJcbiAgICAgICAgICB0aGlzLnAuY292ZXIubWFzcyxcclxuICAgICAgICAgIDAsXHJcbiAgICAgICAgICB0aGlzLnAuY292ZXIuc3RhcnRWZWxvY2l0eSxcclxuICAgICAgICAgIHRoaXMucC5jb3Zlci5mbGV4aWJpbGl0eSxcclxuICAgICAgICAgIDAsXHJcbiAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+dGhpcy5zZXQoYW5nbGUvMixoZWlnaHQpLFxyXG4gICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0KGFuZ2xlLzIsMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoYW5nbGU/IFBJLzI6IDAsJ2Nsb3NlZCcpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByb2dyZXNzQ2xiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZihyaWdodCAmJiByaWdodC5zdGF0ZT09PSdjbG9zZWQnICYmIHJpZ2h0LmFuZ2xlPD1QSS8yKSB7XHJcbiAgICAgICAgICBibG9jayA9IHNpemU8cmlnaHQuZ2V0U2l6ZSgpPyB0aGlzLnNwbGl0U2hlZXRCbG9jayh0aGlzLnNoZWV0QmxvY2tzLmxlbmd0aC0xLCBzaXplKVswXTogcmlnaHQ7XHJcbiAgICAgICAgICByZXMgPSB0aGlzLmNvbm5lY3RQaHlzaWNzKFxyXG4gICAgICAgICAgICBibG9jayxcclxuICAgICAgICAgICAgdGhpcy5wLnBhZ2UubWFzcypibG9jay5nZXRTaXplKCksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIHRoaXMucC5wYWdlLnN0YXJ0VmVsb2NpdHksXHJcbiAgICAgICAgICAgIHRoaXMucC5wYWdlLmZsZXhpYmlsaXR5LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+YmxvY2suc2V0KHRoaXMuZ2V0Q2xvc2VkQmxvY2tBbmdsZShhbmdsZSksJ29wZW5lZCcsaGVpZ2h0KSxcclxuICAgICAgICAgICAgQm9vay5maW5pc2hBbmltYXRpb25DbGIuYmluZCh7Ym9vazogdGhpcywgYmxvY2t9KSxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NDbGJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5hbmdsZT09PVBJLzIgfHwgdGhpcy5hbmdsZSA9PT0gMypQSS8yKSB7XHJcbiAgICAgICAgICByZXMgPSB0aGlzLmNvbm5lY3RQaHlzaWNzKFxyXG4gICAgICAgICAgICBibG9jaz10aGlzLnJpZ2h0Q292ZXIsXHJcbiAgICAgICAgICAgIHRoaXMucC5jb3Zlci5tYXNzLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLnAuY292ZXIuc3RhcnRWZWxvY2l0eSxcclxuICAgICAgICAgICAgdGhpcy5wLmNvdmVyLmZsZXhpYmlsaXR5LFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldChQSS8yK2FuZ2xlLzIsaGVpZ2h0KTtcclxuICAgICAgICAgICAgICBpZihhbmdsZTxQSS8yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKFBJLzIrMWUtNywnY2xvc2VkJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+dGhpcy5zZXQoUEkvMithbmdsZS8yLDApLFxyXG4gICAgICAgICAgICBwcm9ncmVzc0NsYlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICAvLyB9XHJcblxyXG4gIGNsZWFySG92ZXJJbmZvKCkge1xyXG4gICAgdGhpcy5wYWdlTWFuYWdlci50dXJuT25FdmVudHMoKTtcclxuICAgIGRlbGV0ZSB0aGlzLmhvdmVySW5mby5ibG9jay5mb3JjZTtcclxuICAgIGRlbGV0ZSB0aGlzLmhvdmVySW5mby5ibG9jay5jb3JuZXJGb3JjZTtcclxuICAgIGRlbGV0ZSB0aGlzLmhvdmVySW5mbztcclxuICB9XHJcblxyXG4gIHhTZWdtZW50KCkge1xyXG4gICAgY29uc3QgYm94cyA9IHRoaXMudG1wLmJveHMsIHJlcyA9IHt9O1xyXG4gICAgaWYodGhpcy5sZWZ0Q292ZXIucGh5c2ljSWQpIHtcclxuICAgICAgYm94c1swXS5zZXRGcm9tT2JqZWN0KHRoaXMucmlnaHRDb3Zlci50aHJlZSk7XHJcbiAgICAgIHJlcy5taW4gPSAtKHJlcy5tYXggPSBib3hzWzBdLm1heC54KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5yaWdodENvdmVyLnBoeXNpY0lkKSB7XHJcbiAgICAgIGJveHNbMF0uc2V0RnJvbU9iamVjdCh0aGlzLmxlZnRDb3Zlci50aHJlZSk7XHJcbiAgICAgIHJlcy5tYXggPSAtKHJlcy5taW4gPSBib3hzWzBdLm1pbi54KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBib3hzWzBdLnNldEZyb21PYmplY3QodGhpcy5sZWZ0Q292ZXIudGhyZWUpO1xyXG4gICAgICBib3hzWzFdLnNldEZyb21PYmplY3QodGhpcy5yaWdodENvdmVyLnRocmVlKTtcclxuICAgICAgYm94c1swXS51bmlvbihib3hzWzFdKTtcclxuICAgICAgcmVzLm1pbiA9IGJveHNbMF0ubWluLng7XHJcbiAgICAgIHJlcy5tYXggPSBib3hzWzBdLm1heC54O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIGNvbXB1dGVUYXJnZXQocG9pbnQpIHtcclxuICAgIGxldCB7eCwgeX0gPSBwb2ludCwgc2VnID0gdGhpcy54U2VnbWVudCgpLCBhbmdsZTtcclxuICAgIGFuZ2xlID0gKHNlZy5tYXgteCkvKHNlZy5tYXgtc2VnLm1pbikqTWF0aC5QSTtcclxuICAgIC8vIGFuZ2xlID0gTWF0aC5hY29zKHgvTWF0aC5zcXJ0KHgqeCt5KnkpKTtcclxuICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmRyYWdBbmdsZSwgTWF0aC5taW4oTWF0aC5QSS10aGlzLmRyYWdBbmdsZSwgYW5nbGUpKTtcclxuICB9XHJcblxyXG4gIG9uUGlja0NhbGxiYWNrKG9iamVjdCkge1xyXG4gICAgbGV0IHJlcyA9IGZhbHNlO1xyXG4gICAgY29uc3QgYmxvY2sgPSBvYmplY3Qub2JqZWN0LnVzZXJEYXRhLnNlbGYsXHJcbiAgICAgICAgICBwID0gey4uLm9iamVjdC51dn0sIGkgPSBvYmplY3QuZmFjZS5tYXRlcmlhbEluZGV4O1xyXG4gICAgaWYoaTwyKSB7XHJcbiAgICAgIHAueCA9IGk9PT0wPyBwLng6IDEtcC54O1xyXG4gICAgICBpZihibG9jay5jb3JuZXJUYXJnZXQudGVzdEludGVyc2VjdGlvbihudWxsLCBwKSAmJiBibG9jay5waHlzaWNJZCkge1xyXG4gICAgICAgIGlmKHRoaXMuaG92ZXJJbmZvKSB7XHJcbiAgICAgICAgICB0aGlzLmNsZWFySG92ZXJJbmZvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJsb2NrLmZvcmNlID0gU2hlZXRQaHlzaWNzLmRyYWdGb3JjZUNsYjtcclxuICAgICAgICBibG9jay5jb3JuZXJGb3JjZSA9IFNoZWV0UGh5c2ljcy5nZXREcmFnQ29ybmVyRm9yY2VDbGIodGhpcy5jb21wdXRlVGFyZ2V0KG9iamVjdC5wb2ludCkpO1xyXG4gICAgICAgIHRoaXMuZHJhZ0luZm8gPSB7XHJcbiAgICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgICBibG9ja1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyLnR1cm5PZmZFdmVudHMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIG9uRHJhZ0NhbGxiYWNrKHBvaW50KSB7XHJcbiAgICBjb25zdCBibG9jayA9IHRoaXMuZHJhZ0luZm8uYmxvY2ssIHAgPSBibG9jay5nZXRQcm9wcygpO1xyXG4gICAgYmxvY2suZm9yY2UgPSBTaGVldFBoeXNpY3MuZHJhZ0ZvcmNlQ2xiO1xyXG4gICAgYmxvY2suY29ybmVyRm9yY2UgPSBTaGVldFBoeXNpY3MuZ2V0RHJhZ0Nvcm5lckZvcmNlQ2xiKHRoaXMuY29tcHV0ZVRhcmdldChwb2ludCkpO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvblJlbGVhc2VDYWxsYmFjaygpIHtcclxuICAgIGRlbGV0ZSB0aGlzLmRyYWdJbmZvLmJsb2NrLmZvcmNlO1xyXG4gICAgZGVsZXRlIHRoaXMuZHJhZ0luZm8uYmxvY2suY29ybmVyRm9yY2U7XHJcbiAgICBkZWxldGUgdGhpcy5kcmFnSW5mbztcclxuICAgIHRoaXMucGFnZU1hbmFnZXIudHVybk9uRXZlbnRzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRGbGlwcGluZyhpKSB7XHJcbiAgICByZXR1cm4gaT8gdGhpcy5nZXRMZWZ0RmxpcHBpbmcoKTogdGhpcy5nZXRSaWdodEZsaXBwaW5nKCk7XHJcbiAgfVxyXG5cclxuICBmbGlwKGksIHNpemU9MSkge1xyXG4gICAgcmV0dXJuIGk/IHRoaXMuZmxpcExlZnQoc2l6ZSk6IHRoaXMuZmxpcFJpZ2h0KHNpemUpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTW91c2UoZW5hYmxlKSB7XHJcbiAgICB0aGlzLm1vdXNlQ29udHJvbGxlciA9IGVuYWJsZTtcclxuICB9XHJcblxyXG4gIGNvcm5lckNhbGxiYWNrKGUsIGRhdGEpIHtcclxuICAgIGlmKHRoaXMubW91c2VDb250cm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IHtpLCBufSA9IGRhdGEuZGF0YTtcclxuICAgICAgaWYoZS50eXBlPT09J21vdXNlb3ZlcicpIHtcclxuICAgICAgICBpZih0aGlzLmhvdmVySW5mbyAmJiB0aGlzLmhvdmVySW5mby5wZW5kaW5ncyE9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgKyt0aGlzLmhvdmVySW5mby5wZW5kaW5ncztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZih0aGlzLmhvdmVySW5mbykge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dyb25nIHN0YXRlOiBlbGVtZW50IGlzIGFscmVhZHkgaG92ZXInKTtcclxuICAgICAgICAgICAgaWYodGhpcy5ob3ZlckluZm8ubiE9PW4pIHtcclxuICAgICAgICAgICAgICB0aGlzLmNsZWFySG92ZXJJbmZvKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCF0aGlzLmhvdmVySW5mbyAmJiAhdGhpcy5kcmFnSW5mbykge1xyXG4gICAgICAgICAgICBsZXQgcmVzID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGhvdmVyQW5nbGUgPSAwLjAyLFxyXG4gICAgICAgICAgICAgICAgICBob3ZlciA9IHRoaXMuZ2V0QmxvY2tCeVBhZ2UobiksXHJcbiAgICAgICAgICAgICAgICAgIHBvc3NpYmxlID0gdGhpcy5nZXRGbGlwcGluZyhpKTtcclxuICAgICAgICAgICAgaWYobj4xICYmIG48MioodGhpcy5wLnNoZWV0cysxKSAmJiBob3Zlci5waHlzaWNJZCAmJiAoaG92ZXIuYW5nbGU8aG92ZXJBbmdsZSB8fCBob3Zlci5hbmdsZT5NYXRoLlBJLWhvdmVyQW5nbGUpKSB7XHJcbiAgICAgICAgICAgICAgcmVzID0gUHJvbWlzZS5yZXNvbHZlKGhvdmVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKGhvdmVyPT09cG9zc2libGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVldEJsb2NrcyA9IFtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENvdmVyLFxyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zaGVldEJsb2NrcyxcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDb3ZlclxyXG4gICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgY29uc3QgaiA9IHNoZWV0QmxvY2tzLmluZGV4T2YoaG92ZXIpLCBuZXh0QmxvY2sgPSB+aj8gc2hlZXRCbG9ja3NbaisyKmktMV06IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICBpZighbmV4dEJsb2NrIHx8ICFuZXh0QmxvY2sucGh5c2ljSWQgfHwgbmV4dEJsb2NrLmFuZ2xlPmhvdmVyQW5nbGUgJiYgbmV4dEJsb2NrLmFuZ2xlPE1hdGguUEktaG92ZXJBbmdsZSkge1xyXG4gICAgICAgICAgICAgICAgcmVzID0gdGhpcy5mbGlwKGksIDEpLnRoZW4oKGJsb2NrKT0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYoIWJsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuaG92ZXJJbmZvO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hlZXRQaHlzaWNzLnNldFBhcmFtZXRyKGJsb2NrLnBoeXNpY0lkLCAndmVsb2NpdHknLCAwKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJJbmZvID0ge1xyXG4gICAgICAgICAgICAgICAgICBwZW5kaW5nczogMVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzLnRoZW4oKGJsb2NrKT0+IHtcclxuICAgICAgICAgICAgICBpZih0aGlzLmhvdmVySW5mbyAmJiB0aGlzLmhvdmVySW5mby5wZW5kaW5nczwxKSB7XHJcbiAgICAgICAgICAgICAgICBibG9jayA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVySW5mbztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoYmxvY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFnZU1hbmFnZXIudHVybk9mZkV2ZW50cygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgIHAgPSBibG9jay5nZXRQcm9wcygpO1xyXG4gICAgICAgICAgICAgICAgYmxvY2suZm9yY2UgPSB0aGlzLnNoZWV0UGh5c2ljcy5nZXRUYXJnZXRGb3JjZUNsYihwLm1hc3MqYmxvY2suZ2V0U2l6ZSgpLCBpPyBNYXRoLlBJLWhvdmVyQW5nbGU6IGhvdmVyQW5nbGUpO1xyXG4gICAgICAgICAgICAgICAgYmxvY2suY29ybmVyRm9yY2UgPSAoKT0+IChpPyAtMTogMSkqU2hlZXRQaHlzaWNzLmhvdmVyQ29ybmVyRm9yY2VDbGIoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hlZXRQaHlzaWNzLnNldFBhcmFtZXRyKGJsb2NrLnBoeXNpY0lkLCAnYW5nbGUnLCBpPyBNYXRoLlBJLTAuNSpob3ZlckFuZ2xlOiAwLjUqaG92ZXJBbmdsZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVySW5mbyA9IHtcclxuICAgICAgICAgICAgICAgICAgbixcclxuICAgICAgICAgICAgICAgICAgYmxvY2tcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZSgxLzMwKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZih0aGlzLmhvdmVySW5mbyAmJiBlLnR5cGU9PT0nbW91c2VvdXQnKSB7XHJcbiAgICAgICAgaWYodGhpcy5ob3ZlckluZm8ucGVuZGluZ3MhPT11bmRlZmluZWQpIHtcclxuICAgICAgICAgIC0tdGhpcy5ob3ZlckluZm8ucGVuZGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYobj09PXRoaXMuaG92ZXJJbmZvLm4pIHtcclxuICAgICAgICAgIHRoaXMuY2xlYXJIb3ZlckluZm8oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihlLnR5cGU9PT0nbW91c2Vkb3duJykge1xyXG4gICAgICAgIHRoaXMuY29ybmVyQ2xpY2tEYXRhID0ge1xyXG4gICAgICAgICAgeDogZS5wYWdlWCxcclxuICAgICAgICAgIHk6IGUucGFnZVlcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYoZS50eXBlPT09J2NsaWNrJykge1xyXG4gICAgICAgIGlmKE1hdGguc3FydChNYXRoLnBvdyh0aGlzLmNvcm5lckNsaWNrRGF0YS54LWUucGFnZVgsMikrTWF0aC5wb3codGhpcy5jb3JuZXJDbGlja0RhdGEueS1lLnBhZ2VZLDIpKTw1KSB7XHJcbiAgICAgICAgICBjb25zdCBob3ZlciA9IHRoaXMuZ2V0QmxvY2tCeVBhZ2Uobik7XHJcbiAgICAgICAgICBpZihob3Zlci5waHlzaWNJZCkge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IGhvdmVyLnBoeXNpY0lkLFxyXG4gICAgICAgICAgICAgICAgICBwcm9wcyA9IGhvdmVyLmdldFByb3BzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hlZXRQaHlzaWNzLnNldFBhcmFtZXRyKGlkLCAndmVsb2NpdHknLCAoaT8gLTE6IDEpKnByb3BzLnN0YXJ0VmVsb2NpdHkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgdGhpcy5jb3JuZXJDbGlja0RhdGE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFNoZWV0QmxvY2socCwgYmxvY2spIHtcclxuICAgIHRoaXMuc2hlZXRCbG9ja3Muc3BsaWNlKHAsIDAsIGJsb2NrKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlU2hlZXRCbG9jayhibG9jaywgMik7XHJcbiAgICB0aGlzLnRocmVlU2hlZXRCbG9ja3MuYWRkKGJsb2NrLnRocmVlKTtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZVNoZWV0QmxvY2soYmxvY2ssIG9mZnNldCkge1xyXG4gICAgY29uc3QgZXZlbnRDb252ZXJ0ZXIgPSBuZXcgQ3VzdG9tRXZlbnRDb252ZXJ0ZXIodGhpcy52aXN1YWwud25kLCB0aGlzLnZpc3VhbC5kb2MsIENpcmNsZVRhcmdldC50ZXN0KSxcclxuICAgICAgICAgIHIgPSAwLjE1LFxyXG4gICAgICAgICAgdGFyZ2V0ID0gbmV3IENpcmNsZVRhcmdldCgxLTAuNSpyLCAwLjUqciwgcik7XHJcbiAgICB0YXJnZXQuYmxvY2sgPSBibG9jaztcclxuICAgIHRhcmdldC5jYWxsYmFjayA9IHRoaXMuY29ybmVyQ2FsbGJhY2suYmluZCh0aGlzKTtcclxuICAgIGV2ZW50Q29udmVydGVyLmFkZEN1c3RvbSh0YXJnZXQpO1xyXG4gICAgYmxvY2suY29ybmVyVGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgYmxvY2sudGhyZWUudXNlckRhdGEubW91c2VDYWxsYmFjayA9IChlLCBkYXRhKT0+IHtcclxuICAgICAgY29uc3QgaSA9IGRhdGEuZmFjZS5tYXRlcmlhbEluZGV4O1xyXG4gICAgICBpZihpPDIpIHtcclxuICAgICAgICBjb25zdCBuID0gaT09PTA/IG9mZnNldCsyKmJsb2NrLnAuZmlyc3Q6IG9mZnNldCsyKmJsb2NrLnAubGFzdC0xO1xyXG4gICAgICAgIGV2ZW50Q29udmVydGVyLmNvbnZlcnQoZSwge3g6IGk9PT0wPyBkYXRhLnV2Lng6IDEtZGF0YS51di54LCB5OiBkYXRhLnV2LnksIGksIG59KTtcclxuICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyLnRyYW5zZmVyRXZlbnRUb1RleHR1cmUobiwgZSwgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBibG9jay50aHJlZS51c2VyRGF0YS50b3VjaENhbGxiYWNrID0gKGUsIGRhdGEpPT4ge1xyXG4gICAgICBjb25zdCBpID0gZGF0YS5mYWNlLm1hdGVyaWFsSW5kZXg7XHJcbiAgICAgIGlmKGk8Mikge1xyXG4gICAgICAgIGNvbnN0IG4gPSBpPT09MD8gb2Zmc2V0KzIqYmxvY2sucC5maXJzdDogb2Zmc2V0KzIqYmxvY2sucC5sYXN0LTE7XHJcbiAgICAgICAgdGhpcy5wYWdlTWFuYWdlci50cmFuc2ZlckV2ZW50VG9UZXh0dXJlKG4sIGUsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy52aXN1YWwuZHJhZy5hZGRUaHJlZShibG9jay50aHJlZSk7XHJcbiAgICB0aGlzLnZpc3VhbC5tb3VzZUV2ZW50cy5hZGRUaHJlZShibG9jay50aHJlZSk7XHJcbiAgICB0aGlzLnZpc3VhbC50b3VjaEV2ZW50cy5hZGRUaHJlZShibG9jay50aHJlZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTaGVldEJsb2NrKGJsb2NrKSB7XHJcbiAgICB0aGlzLnZpc3VhbC5tb3VzZUV2ZW50cy5yZW1vdmVUaHJlZShibG9jay50aHJlZSk7XHJcbiAgICB0aGlzLnZpc3VhbC50b3VjaEV2ZW50cy5yZW1vdmVUaHJlZShibG9jay50aHJlZSk7XHJcbiAgICB0aGlzLnZpc3VhbC5kcmFnLnJlbW92ZVRocmVlKGJsb2NrLnRocmVlKTtcclxuICAgIHRoaXMudGhyZWVTaGVldEJsb2Nrcy5yZW1vdmUoYmxvY2sudGhyZWUpO1xyXG4gICAgYmxvY2suZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2hlZXRCbG9ja3MoZmlyc3QsIHNpemUpIHtcclxuICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMuc2hlZXRCbG9ja3Muc3BsaWNlKGZpcnN0LCBzaXplKTtcclxuICAgIGZvcihsZXQgYmxvY2sgb2YgYmxvY2tzKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlU2hlZXRCbG9jayhibG9jayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0dXJlKG1hdGVyaWFsLCBuKSB7XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyLnNldFRleHR1cmUobWF0ZXJpYWwsIG4pO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZVRleHR1cmUobWF0ZXJpYWwsIG4pIHtcclxuICAgIHRoaXMuc2V0VGV4dHVyZShtYXRlcmlhbCwgbisyKTtcclxuICB9XHJcblxyXG4gIHNldExlZnRDb3ZlclRleHR1cmUobWF0ZXJpYWwsIG4pIHtcclxuICAgIHRoaXMuc2V0VGV4dHVyZShtYXRlcmlhbCwgbik7XHJcbiAgfVxyXG5cclxuICBzZXRSaWdodENvdmVyVGV4dHVyZShtYXRlcmlhbCwgbikge1xyXG4gICAgdGhpcy5zZXRUZXh0dXJlKG1hdGVyaWFsLCBuKzIqKHRoaXMucC5zaGVldHMrMSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZpbmlzaEFuaW1hdGlvbkNsYihhbmdsZSkge1xyXG4gICAgdGhpcy5ibG9jay5zZXQodGhpcy5ib29rLmdldENsb3NlZEJsb2NrQW5nbGUoYW5nbGUpLmNsb3NlZEFuZ2xlLCdjbG9zZWQnLDApO1xyXG4gICAgY29uc3QgaSA9IHRoaXMuYm9vay5zaGVldEJsb2Nrcy5pbmRleE9mKHRoaXMuYmxvY2spO1xyXG4gICAgaWYofmkpIHtcclxuICAgICAgaWYoYW5nbGU9PT0wKSB7XHJcbiAgICAgICAgdGhpcy5ib29rLm1lcmdlU2hlZXRCbG9ja3MoaSwgdGhpcy5ib29rLnNoZWV0QmxvY2tzLmxlbmd0aC1pKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmJvb2subWVyZ2VTaGVldEJsb2NrcygwLCBpKzEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxjQmxvY2tGb3JjZShibG9jaywgb2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodCkge1xyXG4gICAgcmV0dXJuIGJsb2NrLmZvcmNlPyBibG9jay5mb3JjZShvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KTogMDtcclxuICB9XHJcblxyXG4gIGNhbGNCbG9ja0Nvcm5lckZvcmNlKGJsb2NrLCBvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KSB7XHJcbiAgICByZXR1cm4gYmxvY2suY29ybmVyRm9yY2U/IGJsb2NrLmNvcm5lckZvcmNlKG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpOiAwO1xyXG4gIH1cclxuXHJcbiAgbm90aWZ5QmVmb3JlQW5pbWF0aW9uKCkge1xyXG4gICAgbGV0IHJlcztcclxuICAgIGlmKHRoaXMuYW5pbWF0aW9uTm90aWZpY2F0aW9uKSB7XHJcbiAgICAgIHJlcyA9IFByb21pc2UucmVqZWN0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hbmltYXRpb25Ob3RpZmljYXRpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe1xyXG4gICAgICAgIHR5cGU6ICdiZWZvcmVBbmltYXRpb24nXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXMgPSB0aGlzLmxheWVyTWFuYWdlci5oaWRlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgbm90aWZ5QWZ0ZXJBbmltYXRpb24oKSB7XHJcbiAgICBpZih0aGlzLmFuaW1hdGlvbk5vdGlmaWNhdGlvbikge1xyXG4gICAgICBkZWxldGUgdGhpcy5hbmltYXRpb25Ob3RpZmljYXRpb247XHJcbiAgICAgIHRoaXMubGF5ZXJNYW5hZ2VyLnNob3coKTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgICB0eXBlOiAnYWZ0ZXJBbmltYXRpb24nXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29ubmVjdFBoeXNpY3MoYmxvY2ssIG1hc3MsIGFuZ2xlLCB2ZWxvY2l0eSwgZmxleGliaWxpdHksIGNvdmVySGVpZ2h0LCBzaW11bGF0ZUNsYiwgcmVtb3ZlQ2xiLCBwcm9ncmVzc0NsYikge1xyXG4gICAgY29uc3QgdHlwZSA9ICgpPT4gdGhpcy5ob3ZlckluZm8/ICdob3Zlcic6ICh0aGlzLmRyYWdJbmZvPyAnZHJhZyc6ICdmcmVlJyksXHJcbiAgICAgIHJlcyA9IHRoaXMuc2hlZXRQaHlzaWNzLmdldFNpemUoKT8gUHJvbWlzZS5yZXNvbHZlKCk6IHRoaXMubm90aWZ5QmVmb3JlQW5pbWF0aW9uKCk7XHJcbiAgICByZXR1cm4gcmVzLnRoZW4oKCk9PiB7XHJcbiAgICAgIGJsb2NrLnBoeXNpY0lkID0gdGhpcy5zaGVldFBoeXNpY3MuYWRkT2JqZWN0KFxyXG4gICAgICAgIG1hc3MsXHJcbiAgICAgICAgYW5nbGUsXHJcbiAgICAgICAgdmVsb2NpdHksXHJcbiAgICAgICAgZmxleGliaWxpdHksXHJcbiAgICAgICAgY292ZXJIZWlnaHQsXHJcbiAgICAgICAgKGFuZ2wsIGNoKT0+IHtcclxuICAgICAgICAgIHNpbXVsYXRlQ2xiKGFuZ2wsIGNoKTtcclxuICAgICAgICAgIHByb2dyZXNzQ2xiKGJsb2NrLCBNYXRoLmFicyhhbmdsZS1hbmdsKS9NYXRoLlBJLCAncHJvY2VzcycsIHR5cGUoKSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoYW5nbCwgY2gpPT4ge1xyXG4gICAgICAgICAgcmVtb3ZlQ2xiKGFuZ2wsIGNoKTtcclxuICAgICAgICAgIGRlbGV0ZSBibG9jay5waHlzaWNJZDtcclxuICAgICAgICAgIHByb2dyZXNzQ2xiKGJsb2NrLCBNYXRoLmFicyhhbmdsZS1hbmdsKS9NYXRoLlBJLCAnZmluaXNoJywgdHlwZSgpKTtcclxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICAgIGlmKCF0aGlzLnNoZWV0UGh5c2ljcy5nZXRTaXplKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmeUFmdGVyQW5pbWF0aW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpPT4gdGhpcy5jYWxjQmxvY2tGb3JjZShibG9jaywgb2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodCksXHJcbiAgICAgICAgKG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpPT4gdGhpcy5jYWxjQmxvY2tDb3JuZXJGb3JjZShibG9jaywgb2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodClcclxuICAgICAgKTtcclxuICAgICAgcHJvZ3Jlc3NDbGIoYmxvY2ssIDAsICdpbml0JywgdHlwZSgpKTtcclxuICAgICAgcmV0dXJuIGJsb2NrO1xyXG4gICAgfSkuY2F0Y2goKCk9PiB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGR0KSB7XHJcbiAgICB0aGlzLmxhc3RNb3VzZVBvcy50Kz1kdDtcclxuICAgIGlmKHRoaXMuaXNQcm9jZXNzaW5nKCkgJiYgdGhpcy5sYXN0TW91c2VQb3MucGFnZVghPT11bmRlZmluZWQgJiYgdGhpcy5sYXN0TW91c2VQb3MudC0odGhpcy5sYXN0TW91c2VQb3MubGFzdFQgfHwgMCk+MC4yNSAmJiAhdGhpcy5ob3ZlckluZm8gJiYgIXRoaXMuZHJhZ0luZm8pIHtcclxuICAgICAgdGhpcy5sYXN0TW91c2VQb3MubGFzdFQgPSB0aGlzLmxhc3RNb3VzZVBvcy50O1xyXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ge1xyXG4gICAgICAgICQodGhpcy52aXN1YWwuZWxlbWVudCkudHJpZ2dlcigkLkV2ZW50KCdtb3VzZW1vdmUnLCB0aGlzLmxhc3RNb3VzZVBvcykpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2hlZXRQaHlzaWNzLnNpbXVsYXRlKGR0KTtcclxuICB9XHJcblxyXG4gIHNwbGl0U2hlZXRCbG9jayhpLCBsZWZ0U2l6ZSkge1xyXG4gICAgY29uc3QgYmxvY2sgPSB0aGlzLnNoZWV0QmxvY2tzW2ldO1xyXG4gICAgaWYoYmxvY2sgJiYgbGVmdFNpemU8YmxvY2suZ2V0U2l6ZSgpKSB7XHJcbiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gbmV3IFNoZWV0QmxvY2sodGhpcy52aXN1YWwsIHsuLi50aGlzLnAsIHNldFRleHR1cmU6IHRoaXMuc2V0UGFnZVRleHR1cmUuYmluZCh0aGlzKX0sIGJsb2NrLnAuZmlyc3QsIGJsb2NrLnAuZmlyc3QrbGVmdFNpemUsIGJsb2NrLmFuZ2xlLCBibG9jay5zdGF0ZSk7XHJcbiAgICAgIGJsb2NrLnNldChibG9jay5hbmdsZSwgYmxvY2suc3RhdGUsIGJsb2NrLmNvcm5lci5oZWlnaHQsIGJsb2NrLnAuZmlyc3QrbGVmdFNpemUsIGJsb2NrLnAubGFzdCk7XHJcbiAgICAgIHRoaXMuYWRkU2hlZXRCbG9jayhpLCBuZXdCbG9jayk7XHJcbiAgICAgIHJldHVybiBbbmV3QmxvY2ssIGJsb2NrXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1lcmdlU2hlZXRCbG9ja3MoZmlyc3QsIHNpemUpIHtcclxuICAgIGlmKGZpcnN0PHRoaXMuc2hlZXRCbG9ja3MubGVuZ3RoKSB7XHJcbiAgICAgIHNpemUgPSBNYXRoLm1pbih0aGlzLnNoZWV0QmxvY2tzLmxlbmd0aC1maXJzdCwgc2l6ZSk7XHJcbiAgICAgIGNvbnN0IGZpcnN0QmxvY2sgPSB0aGlzLnNoZWV0QmxvY2tzW2ZpcnN0XSwgbGFzdEJsb2NrID0gdGhpcy5zaGVldEJsb2Nrc1tmaXJzdCtzaXplLTFdO1xyXG4gICAgICBmaXJzdEJsb2NrLnNldChmaXJzdEJsb2NrLmFuZ2xlLCBmaXJzdEJsb2NrLnN0YXRlLCBmaXJzdEJsb2NrLmNvcm5lci5oZWlnaHQsIGZpcnN0QmxvY2sucC5maXJzdCwgbGFzdEJsb2NrLnAubGFzdCk7XHJcbiAgICAgIHRoaXMucmVtb3ZlU2hlZXRCbG9ja3MoZmlyc3QrMSwgc2l6ZS0xKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNoZWV0QmxvY2tzKGFuZ2xlLCBzdGF0ZSkge1xyXG4gICAgaWYoc3RhdGU9PT0nY2xvc2VkJykge1xyXG4gICAgICB0aGlzLmNsb3NlZEFuZ2xlID0gYW5nbGU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNoZWV0QmxvY2tzLmZvckVhY2goKHMpPT4ge1xyXG4gICAgICBpZighcy5waHlzaWNJZCkge1xyXG4gICAgICAgIHMuc2V0KGFuZ2xlLCBzdGF0ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0KGFuZ2xlLCBoZWlnaHQ9MCkge1xyXG4gICAgdGhpcy5hbmdsZSA9IGFuZ2xlO1xyXG4gICAgY29uc3QgUEkgPSBNYXRoLlBJO1xyXG4gICAgaWYoYW5nbGU8UEkvNCkge1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoMCk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1QSS8yKzIqYW5nbGUpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoUEkvMiwnb3BlbmVkJyxoZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcygwLCdjbG9zZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KDApO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KDAsJ2Nsb3NlZCcsMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGFuZ2xlPDIqUEkvNCkge1xyXG4gICAgICBjb25zdCBhPTIqKGFuZ2xlLVBJLzQpO1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoYSk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1hKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KFBJLzIrYSwnb3BlbmVkJyxoZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhhLCdjbG9zZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KC1hKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldChhLCdjbG9zZWQnLDApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihhbmdsZTwzKlBJLzQpIHtcclxuICAgICAgY29uc3QgYT0yKihhbmdsZS1QSS8yKTtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KFBJLzIpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtUEkvMik7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChQSSwnb3BlbmVkJywwKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KC1QSS8yKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldChhLCdvcGVuZWQnLGhlaWdodCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGFuZ2xlPDQqUEkvNCkge1xyXG4gICAgICBjb25zdCBhPTIqKGFuZ2xlLTMqUEkvNCkrUEkvMjtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KGEpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtYSk7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChhLCdjbG9zZWQnLDApO1xyXG5cclxuICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhhLCdjbG9zZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KC1QSS8yKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldChQSS8yLCdvcGVuZWQnLGhlaWdodCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGFuZ2xlPDUqUEkvNCkge1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoUEkpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtUEkpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoUEksJ2Nsb3NlZCcsMCk7XHJcblxyXG4gICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKFBJLCdjbG9zZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KC1QSS8yLTIqKGFuZ2xlLVBJKSk7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoUEkvMiwnb3BlbmVkJyxoZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihhbmdsZTw2KlBJLzQpIHtcclxuICAgICAgY29uc3QgYT0yKihhbmdsZS01KlBJLzQpO1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoUEktYSk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1QSSthKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KFBJLWEsJ2Nsb3NlZCcsMCk7XHJcblxyXG4gICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKFBJLWEsJ2Nsb3NlZCcpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoLVBJK2EpO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KFBJLzItYSwnb3BlbmVkJyxoZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihhbmdsZTw3KlBJLzQpIHtcclxuICAgICAgY29uc3QgYT0yKihhbmdsZS02KlBJLzQpO1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoUEkvMik7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1QSS8yKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KFBJLWEsJ29wZW5lZCcsaGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KC1QSS8yKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldCgwLCdvcGVuZWQnLDApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihhbmdsZTw4KlBJLzQpIHtcclxuICAgICAgY29uc3QgYT0yKihhbmdsZS03KlBJLzQpO1xyXG4gICAgICB0aGlzLmJpbmRlci5zZXQoUEkvMi1hKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLVBJLzIpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoUEkvMiwnb3BlbmVkJyxoZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhQSS8yLWEsJ2Nsb3NlZCcpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0UmlnaHQoLVBJLzIrYSk7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoUEkvMi1hLCdjbG9zZWQnLDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZVNpZGVUZXh0dXJlKGNvbG9yKSB7XHJcbiAgICBjb25zdCBqQyA9ICQoJzxjYW52YXMgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiPjwvY2FudmFzPicpO1xyXG4gICAgY29uc3QgY3R4ID0gakNbMF0uZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBHcmFwaFV0aWxzLmNvbG9yMlJnYmEoY29sb3IsIDEpO1xyXG4gICAgY3R4LnJlY3QoMCwgMCwgOCwgNyk7XHJcbiAgICBjdHguZmlsbCgpO1xyXG4gICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgY3R4LmZpbGxTdHlsZSA9IEdyYXBoVXRpbHMuY29sb3IyUmdiYShHcmFwaFV0aWxzLmludmVyc2VDb2xvcihjb2xvciwwLjUpLCAxKTtcclxuICAgIGN0eC5yZWN0KDAsIDcsIDgsIDEpO1xyXG4gICAgY3R4LmZpbGwoKTtcclxuICAgIHJldHVybiBqQ1swXTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwcmVwYXJlUHJvcHMocHJvcHMpIHtcclxuICAgIHJldHVybiBCb29rLmNhbGNQcm9wcyhCb29rLm1lcmdlUHJvcHMoYm9va1Byb3BzKCksIHByb3BzKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWVyZ2VQcm9wcyhmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBzZWNvbmQgPSBzZWNvbmQgfHwge307XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5maXJzdCxcclxuICAgICAgLi4uc2Vjb25kLFxyXG4gICAgICBzaGVldDoge1xyXG4gICAgICAgIC4uLmZpcnN0LnNoZWV0LFxyXG4gICAgICAgIC4uLnNlY29uZC5zaGVldCxcclxuICAgICAgfSxcclxuICAgICAgY292ZXI6IHtcclxuICAgICAgICAuLi5maXJzdC5jb3ZlcixcclxuICAgICAgICAuLi5zZWNvbmQuY292ZXIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhZ2U6IHtcclxuICAgICAgICAuLi5maXJzdC5wYWdlLFxyXG4gICAgICAgIC4uLnNlY29uZC5wYWdlLFxyXG4gICAgICB9LFxyXG4gICAgICBjc3NMYXllclByb3BzOiB7XHJcbiAgICAgICAgLi4uZmlyc3QuY3NzTGF5ZXJQcm9wcyxcclxuICAgICAgICAuLi5zZWNvbmQuY3NzTGF5ZXJQcm9wcyxcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjYWxjUHJvcHMocHJvcHMpIHtcclxuICAgIGNvbnN0IHAgPSB7XHJcbiAgICAgIC4uLnByb3BzLFxyXG4gICAgICBzaGVldDoge1xyXG4gICAgICAgIC4uLnByb3BzLnNoZWV0XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvdmVyOiB7XHJcbiAgICAgICAgLi4ucHJvcHMuc2hlZXQsXHJcbiAgICAgICAgLi4ucHJvcHMuY292ZXJcclxuICAgICAgfSxcclxuICAgICAgcGFnZToge1xyXG4gICAgICAgIC4uLnByb3BzLnNoZWV0LFxyXG4gICAgICAgIC4uLnByb3BzLnBhZ2VcclxuICAgICAgfSxcclxuICAgICAgY3NzTGF5ZXJQcm9wczoge1xyXG4gICAgICAgIC4uLnByb3BzLmNzc0xheWVyUHJvcHMsXHJcbiAgICAgICAgJFxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2NhbGUgPSAxMCxcclxuICAgIGhlaWdodCA9IHNjYWxlKnAuaGVpZ2h0LFxyXG4gICAgd2lkdGggPSBzY2FsZSpwLndpZHRoLFxyXG4gICAgZmxpcFByb2dyZXNzQ2xiID0gKCk9PiB1bmRlZmluZWQsXHJcbiAgICBzaGVldCA9IHtcclxuICAgICAgc2lkZVRleHR1cmU6IHAuc2hlZXQuc2lkZVRleHR1cmUgfHwgQm9vay5jcmVhdGVTaWRlVGV4dHVyZShwLnNoZWV0LmNvbG9yKSxcclxuICAgIH0sXHJcbiAgICBjb3ZlciA9IHtcclxuICAgICAgLi4uc2hlZXQsXHJcbiAgICAgIC4uLnAuY292ZXIsXHJcbiAgICAgIGRlcHRoOiBzY2FsZSpwLmNvdmVyLmRlcHRoLFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICBwYWRkaW5nOiBzY2FsZSpwLmNvdmVyLnBhZGRpbmdcclxuICAgIH0sXHJcbiAgICBwYWdlID0ge1xyXG4gICAgICAuLi5zaGVldCxcclxuICAgICAgLi4ucC5wYWdlLFxyXG4gICAgICBkZXB0aDogc2NhbGUqcC5wYWdlLmRlcHRoLFxyXG4gICAgICB3aWR0aDogY292ZXIud2lkdGggLSBjb3Zlci5wYWRkaW5nLFxyXG4gICAgICBoZWlnaHQ6IGNvdmVyLmhlaWdodCAtIDIqY292ZXIucGFkZGluZ1xyXG4gICAgfSxcclxuICAgIG1hcmtlciA9IHtcclxuICAgICAgdXNlOiBmYWxzZSxcclxuICAgICAgY29sb3I6IDBYRkYwMDAwLFxyXG4gICAgICBzaXplOiBzY2FsZSowLjAwMVxyXG4gICAgfTtcclxuICAgIGlmKGNvdmVyLmNvbG9yIT09c2hlZXQuY29sb3IgJiYgIXAuY292ZXIuc2lkZVRleHR1cmUpIHtcclxuICAgICAgY292ZXIuc2lkZVRleHR1cmUgPSBCb29rLmNyZWF0ZVNpZGVUZXh0dXJlKGNvdmVyLmNvbG9yKTtcclxuICAgIH1cclxuICAgIGlmKHBhZ2UuY29sb3IhPT1zaGVldC5jb2xvciAmJiAhcC5wYWdlLnNpZGVUZXh0dXJlKSB7XHJcbiAgICAgIHBhZ2Uuc2lkZVRleHR1cmUgPSBCb29rLmNyZWF0ZVNpZGVUZXh0dXJlKHBhZ2UuY29sb3IpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsuLi5wLCBzY2FsZSwgaGVpZ2h0LCB3aWR0aCwgZmxpcFByb2dyZXNzQ2xiLCBjb3ZlciwgcGFnZSwgbWFya2VyfTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQm9vay5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQm9vay5qcyIsImltcG9ydCB7JCwgVEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgQ29udHJvbGxlciBmcm9tICdDb250cm9sbGVyJztcclxuaW1wb3J0IHtwcm9wcyBhcyAgYm9va0NvbnRyb2xsZXJQcm9wc30gZnJvbSAnLi4vcHJvcHMvYm9va0NvbnRyb2xsZXInO1xyXG5pbXBvcnQgRXZlbnRzVG9BY3Rpb25zIGZyb20gJ0V2ZW50c1RvQWN0aW9ucyc7XHJcbmltcG9ydCBTdGF0cyBmcm9tICdzdGF0cy5qcyc7XHJcbmltcG9ydCBPYmplY3QzRFdhdGNoZXIgZnJvbSAnT2JqZWN0M0RXYXRjaGVyJztcclxuaW1wb3J0IEZ1bGxTY3JlZW4gZnJvbSAnRnVsbFNjcmVlbic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb29rQ29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihib29rLCB2aWV3LCBwcm9wcykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzID0gdHJ1ZTtcclxuICAgIHRoaXMuYm9vayA9IGJvb2s7XHJcbiAgICB0aGlzLnZpc3VhbCA9IGJvb2sudmlzdWFsO1xyXG4gICAgdGhpcy5wID0gQm9va0NvbnRyb2xsZXIucHJlcGFyZVByb3BzKHByb3BzKTtcclxuICAgIHRoaXMucC5ydGwgPSBib29rLnAucnRsO1xyXG4gICAgdGhpcy5kZXZpY2VQaXhlbFJhdGlvID0gdGhpcy52aXN1YWwud25kLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcclxuXHJcbiAgICB0aGlzLm9yYml0ID0gYm9vay52aXN1YWwuZ2V0T3JiaXQoKTtcclxuICAgIGJvb2suc2V0RmxpcFByb2dyZXNzQ2xiKHRoaXMudXBkYXRlVmlld0lmU3RhdGUuYmluZCh0aGlzKSk7XHJcbiAgICB0aGlzLnZpZXcgPSB2aWV3O1xyXG4gICAgdGhpcy5iaW5kQWN0aW9ucygpO1xyXG5cclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIHNtYXJ0UGFuOiAhdGhpcy5hY3Rpb25zWydjbWRTbWFydFBhbiddLmFjdGl2ZSxcclxuICAgICAgc2luZ2xlUGFnZTogdGhpcy5hY3Rpb25zWydjbWRTaW5nbGVQYWdlJ10uYWN0aXZlIHx8IHRoaXMuYWN0aW9uc1snY21kU2luZ2xlUGFnZSddLmFjdGl2ZUZvck1vYmlsZSAmJiB0aGlzLmRldmljZVBpeGVsUmF0aW8+MSxcclxuICAgICAgc3RhdHM6IHRoaXMuYWN0aW9uc1snY21kU3RhdHMnXS5hY3RpdmUsXHJcbiAgICAgIGxpZ2h0aW5nOiB0aGlzLnAubGlnaHRpbmcuZGVmYXVsdCxcclxuICAgICAgYWN0aXZlU2lkZTogMVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmJveHMgPSBbbmV3IFRIUkVFLkJveDMoKSwgbmV3IFRIUkVFLkJveDMoKV07XHJcbiAgICB0aGlzLmJvb2tXYXRjaGVyID0gbmV3IE9iamVjdDNEV2F0Y2hlcih0aGlzLnZpc3VhbCwgKCk9PiB7XHJcbiAgICAgIGlmKHRoaXMuc3RhdGUuc2luZ2xlUGFnZSkge1xyXG4gICAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlU2lkZSkge1xyXG4gICAgICAgICAgdGhpcy5ib3hzWzBdLnNldEZyb21PYmplY3QoYm9vay5yaWdodENvdmVyLnRocmVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJveHNbMF0uc2V0RnJvbU9iamVjdChib29rLmxlZnRDb3Zlci50aHJlZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYm94c1swXS5zZXRGcm9tT2JqZWN0KGJvb2subGVmdENvdmVyLnRocmVlKTtcclxuICAgICAgICB0aGlzLmJveHNbMV0uc2V0RnJvbU9iamVjdChib29rLnJpZ2h0Q292ZXIudGhyZWUpO1xyXG4gICAgICAgIHRoaXMuYm94c1swXS51bmlvbih0aGlzLmJveHNbMV0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLmJveHNbMF07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUgPSB0aGlzLnAuc2NhbGUuZGVmYXVsdDtcclxuICAgIHRoaXMuYm9vay5zZXRab29tKHRoaXMuYm9va1dhdGNoZXIuc2NhbGUsIHRoaXMuc3RhdGUuc2luZ2xlUGFnZSk7XHJcblxyXG4gICAgdGhpcy5TdGF0cyA9IG5ldyBTdGF0cygpO1xyXG4gICAgdGhpcy5TdGF0cy5kb21FbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIHRoaXMuU3RhdHMuZG9tRWxlbWVudC5zdHlsZS50b3AgPSAnMHB4JztcclxuXHJcbiAgICB0aGlzLnZpc3VhbC5zZXRFeHRyYUxpZ2h0aW5nKHRoaXMuc3RhdGUubGlnaHRpbmcpO1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgb25TY3JlZW5Nb2RlQ2hhbmdlZDogdGhpcy5vblNjcmVlbk1vZGVDaGFuZ2VkLmJpbmQodGhpcyksXHJcbiAgICAgIHN0YXRzOiB0aGlzLlN0YXRzLnVwZGF0ZS5iaW5kKHRoaXMuU3RhdHMpLFxyXG4gICAgICBvblVwZGF0ZVZpZXc6IHRoaXMudXBkYXRlVmlldy5iaW5kKHRoaXMpXHJcbiAgICB9XHJcbiAgICBGdWxsU2NyZWVuLmFkZEV2ZW50TGlzdGVuZXIodGhpcy52aWV3LmdldFBhcmVudENvbnRhaW5lcigpLm93bmVyRG9jdW1lbnQsIHRoaXMuYmluZHMub25TY3JlZW5Nb2RlQ2hhbmdlZCk7XHJcblxyXG4gICAgdGhpcy5jbWRTbWFydFBhbigpO1xyXG5cclxuICAgIGlmKHRoaXMudmlldy50ZW1wbGF0ZU9iamVjdC5hcHBMb2FkZWQpIHtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLnZpZXcudGVtcGxhdGVPYmplY3QuYXBwTG9hZGVkKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJvb2suZW5hYmxlTG9hZGluZ0FuaW1hdGlvbih0aGlzLnAubG9hZGluZ0FuaW1hdGlvbi5ib29rKTtcclxuICAgIGlmKHRoaXMucC5sb2FkaW5nQW5pbWF0aW9uLnNraW4pIHtcclxuICAgICAgdGhpcy5pbml0TG9hZGluZ0FuaW1hdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYm9vay5lbmFibGVMb2FkaW5nQW5pbWF0aW9uKHRoaXMucC5sb2FkaW5nQW5pbWF0aW9uLmJvb2spO1xyXG4gICAgdGhpcy5ib29rLnNldEF1dG9SZXNvbHV0aW9uKHRoaXMucC5hdXRvUmVzb2x1dGlvbi5lbmFibGVkLCB0aGlzLnAuYXV0b1Jlc29sdXRpb24uY29lZmZpY2llbnQpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIEZ1bGxTY3JlZW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLnZpZXcuZ2V0UGFyZW50Q29udGFpbmVyKCkub3duZXJEb2N1bWVudCwgdGhpcy5iaW5kcy5vblNjcmVlbk1vZGVDaGFuZ2VkKTtcclxuICAgIGRlbGV0ZSB0aGlzLmJvb2s7XHJcbiAgICBkZWxldGUgdGhpcy52aWV3O1xyXG4gICAgZGVsZXRlIHRoaXMudmlzdWFsO1xyXG4gIH1cclxuXHJcbiAgaW5pdExvYWRpbmdBbmltYXRpb24oKSB7XHJcbiAgICBjb25zdCBoYW5kbGVyID0gKCk9PiB7XHJcbiAgICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5ib29rLmdldFRvcFBhZ2VzKCk7XHJcbiAgICAgIGxldCB2aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIGZvcihsZXQgbiBvZiBwYWdlcykge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5ib29rLmdldFBhZ2VTdGF0ZShuKTtcclxuICAgICAgICB2aXNpYmxlID0gc3RhdGU9PT11bmRlZmluZWQgfHwgc3RhdGU9PT0nbG9hZGluZyc7XHJcbiAgICAgICAgaWYodmlzaWJsZSkge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnd2lkTG9hZGluZycsIHtcclxuICAgICAgICB2aXNpYmxlXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuICAgIHRoaXMuYm9vay5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmVBbmltYXRpb24nLCBoYW5kbGVyKTtcclxuICAgIHRoaXMuYm9vay5hZGRFdmVudExpc3RlbmVyKCdhZnRlckFuaW1hdGlvbicsIGhhbmRsZXIpO1xyXG4gICAgdGhpcy5ib29rLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRQYWdlJywgaGFuZGxlcik7XHJcbiAgICB0aGlzLmJvb2suYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkUGFnZScsIGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTmF2aWdhdGlvbihlbmFibGUpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzID0gZW5hYmxlO1xyXG4gIH1cclxuXHJcbiAgc2V0VG9jQ3RybCh0b2NDdHJsKSB7XHJcbiAgICB0aGlzLnRvY0N0cmwgPSB0b2NDdHJsO1xyXG4gICAgdGhpcy50b2NDdHJsLm9uQ2hhbmdlID0gdGhpcy51cGRhdGVWaWV3LmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHNldFByaW50ZXIocHJpbnRlcikge1xyXG4gICAgdGhpcy5wcmludGVyID0gcHJpbnRlcjtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgc2V0U291bmRzKHNvdW5kcykge1xyXG4gICAgdGhpcy5zb3VuZHMgPSBzb3VuZHM7XHJcbiAgICBzb3VuZHMuc2V0RW5hYmxlZCh0aGlzLmFjdGlvbnNbJ2NtZFNvdW5kcyddLmFjdGl2ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG5cclxuICBvblNjcmVlbk1vZGVDaGFuZ2VkKGUpIHtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY2FuWm9vbUluKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnN0YXRlLnNtYXJ0UGFuIHx8IE1hdGguYWJzKHRoaXMuYm9va1dhdGNoZXIuc2NhbGUtdGhpcy5wLnNjYWxlLm1heCk+dGhpcy5wLmVwcztcclxuICB9XHJcblxyXG4gIGNhblpvb21PdXQoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuc3RhdGUuc21hcnRQYW4gfHwgTWF0aC5hYnModGhpcy5ib29rV2F0Y2hlci5zY2FsZS10aGlzLnAuc2NhbGUubWluKT50aGlzLnAuZXBzO1xyXG4gIH1cclxuXHJcbiAgY2FuRGVmYXVsdFpvb20oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zbWFydFBhbjtcclxuICB9XHJcblxyXG4gIHNldEJvb2tab29tKHNjYWxlKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICBpZih0aGlzLmJvb2tXYXRjaGVyLnNjYWxlPT09c2NhbGUpIHtcclxuICAgICAgICB0aGlzLmJvb2suc2V0Wm9vbShzY2FsZSwgdGhpcy5zdGF0ZS5zaW5nbGVQYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBjbWRab29tSW4oKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNtYXJ0UGFuKSB7XHJcbiAgICAgIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUgPSBNYXRoLm1pbih0aGlzLnAuc2NhbGUubWF4LCB0aGlzLmJvb2tXYXRjaGVyLnNjYWxlK3RoaXMucC5zY2FsZS5kZWx0YSk7XHJcbiAgICAgIHRoaXMuc2V0Qm9va1pvb20odGhpcy5ib29rV2F0Y2hlci5zY2FsZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcmJpdC56b29tSW4oNi42KnRoaXMucC5zY2FsZS5kZWx0YS8wLjMyKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kWm9vbU91dCgpIHtcclxuICAgIGlmKHRoaXMuc3RhdGUuc21hcnRQYW4pIHtcclxuICAgICAgdGhpcy5ib29rV2F0Y2hlci5zY2FsZSA9IE1hdGgubWF4KHRoaXMucC5zY2FsZS5taW4sIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUtdGhpcy5wLnNjYWxlLmRlbHRhKTtcclxuICAgICAgdGhpcy5zZXRCb29rWm9vbSh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9yYml0Lnpvb21PdXQoNi42KnRoaXMucC5zY2FsZS5kZWx0YS8wLjMyKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kRGVmYXVsdFpvb20oKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNtYXJ0UGFuKSB7XHJcbiAgICAgIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUgPSB0aGlzLnAuc2NhbGUuZGVmYXVsdDtcclxuICAgICAgdGhpcy5zZXRCb29rWm9vbSh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlKTtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbWRUb2MoKSB7XHJcbiAgICBpZih0aGlzLnRvY0N0cmwpIHtcclxuICAgICAgdGhpcy50b2NDdHJsLnRvZ2xlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbWRGYXN0QmFja3dhcmQoKSB7XHJcbiAgICB0aGlzLnN0YXJ0RmxpcCh0aGlzLmJvb2suZmxpcExlZnQoNSkpO1xyXG4gIH1cclxuXHJcbiAgY21kQmFja3dhcmQoKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNpbmdsZVBhZ2UpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVTaWRlID0gKHRoaXMuZ2V0UGFnZSgpKzEpJTI7XHJcbiAgICAgIGlmKHRoaXMuc3RhdGUuYWN0aXZlU2lkZSkge1xyXG4gICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlU2lkZSA9IDA7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBMZWZ0KDEpKS50aGVuKChibG9jayk9PiB7XHJcbiAgICAgICAgICBpZihibG9jaykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNpZGUgPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBMZWZ0KDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNtZEZvcndhcmQoKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNpbmdsZVBhZ2UpIHtcclxuICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVTaWRlID0gKHRoaXMuZ2V0UGFnZSgpKzEpJTI7XHJcbiAgICAgIGlmKCF0aGlzLnN0YXRlLmFjdGl2ZVNpZGUpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNpZGUgPSAxO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhcnRGbGlwKHRoaXMuYm9vay5mbGlwUmlnaHQoMSkpLnRoZW4oKGJsb2NrKT0+IHtcclxuICAgICAgICAgIGlmKGJsb2NrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuYWN0aXZlU2lkZSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0RmxpcCh0aGlzLmJvb2suZmxpcFJpZ2h0KDEpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNtZEZhc3RGb3J3YXJkKCkge1xyXG4gICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBSaWdodCg1KSk7XHJcbiAgfVxyXG5cclxuICBjbWRTYXZlKCkge1xyXG4gICAgd2luZG93Lm9wZW4odGhpcy5wLmRvd25sb2FkVVJMLCAnX2JsYW5rJyk7XHJcbiAgfVxyXG5cclxuICBjbWRQcmludCgpIHtcclxuICAgIHRoaXMucHJpbnRlci5wcmludCgpO1xyXG4gIH1cclxuXHJcbiAgY21kRnVsbFNjcmVlbigpIHtcclxuICAgIGlmKCFGdWxsU2NyZWVuLmFjdGl2YXRlZCgpKSB7XHJcbiAgICAgIEZ1bGxTY3JlZW4ucmVxdWVzdCh0aGlzLnZpZXcuZ2V0UGFyZW50Q29udGFpbmVyKCkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIEZ1bGxTY3JlZW4uY2FuY2VsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbWRTbWFydFBhbigpIHtcclxuICAgIHRoaXMuc3RhdGUuc21hcnRQYW4gPSAhdGhpcy5zdGF0ZS5zbWFydFBhbjtcclxuICAgIGlmKHRoaXMuc3RhdGUuc21hcnRQYW4pIHtcclxuICAgICAgdGhpcy5vcmJpdC5taW5BemltdXRoQW5nbGUgPSAwO1xyXG4gICAgICB0aGlzLm9yYml0Lm1heEF6aW11dGhBbmdsZSA9IDA7XHJcbiAgICAgIHRoaXMub3JiaXQubWluUG9sYXJBbmdsZSA9IDA7XHJcbiAgICBcdHRoaXMub3JiaXQubWF4UG9sYXJBbmdsZSA9IE1hdGguUEkvNDtcclxuICAgICAgdGhpcy5ib29rV2F0Y2hlci5lbmFibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9yYml0Lm1pbkF6aW11dGhBbmdsZSA9IC1JbmZpbml0eTtcclxuICAgICAgdGhpcy5vcmJpdC5tYXhBemltdXRoQW5nbGUgPSBJbmZpbml0eTtcclxuICAgICAgdGhpcy5vcmJpdC5taW5Qb2xhckFuZ2xlID0gMDtcclxuICAgIFx0dGhpcy5vcmJpdC5tYXhQb2xhckFuZ2xlID0gTWF0aC5QSTtcclxuICAgICAgdGhpcy5ib29rV2F0Y2hlci5lbmFibGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNtZFNpbmdsZVBhZ2UoKSB7XHJcbiAgICB0aGlzLnN0YXRlLnNpbmdsZVBhZ2UgPSAhdGhpcy5zdGF0ZS5zaW5nbGVQYWdlO1xyXG4gICAgdGhpcy5zZXRCb29rWm9vbSh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlKTtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kU291bmRzKCkge1xyXG4gICAgaWYodGhpcy5zb3VuZHMpIHtcclxuICAgICAgdGhpcy5zb3VuZHMudG9nbGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kU3RhdHMoKSB7XHJcbiAgICB0aGlzLnN0YXRlLnN0YXRzID0gIXRoaXMuc3RhdGUuc3RhdHM7XHJcbiAgICBpZih0aGlzLnN0YXRlLnN0YXRzKSB7XHJcbiAgICAgICQodGhpcy52aWV3LmdldENvbnRhaW5lcigpKS5hcHBlbmQodGhpcy5TdGF0cy5kb21FbGVtZW50KTtcclxuICAgICAgdGhpcy52aXN1YWwuYWRkUmVuZGVyQ2FsbGJhY2sodGhpcy5iaW5kcy5zdGF0cyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgJCh0aGlzLnZpZXcuZ2V0Q29udGFpbmVyKCkpLmZpbmQodGhpcy5TdGF0cy5kb21FbGVtZW50KS5yZW1vdmUoKTtcclxuICAgICAgdGhpcy52aXN1YWwucmVtb3ZlUmVuZGVyQ2FsbGJhY2sodGhpcy5iaW5kcy5zdGF0cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNtZExpZ2h0aW5nVXAoKSB7XHJcbiAgICB0aGlzLnN0YXRlLmxpZ2h0aW5nID0gTWF0aC5taW4odGhpcy5zdGF0ZS5saWdodGluZyt0aGlzLnAubGlnaHRpbmcuZGVsdGEsIHRoaXMucC5saWdodGluZy5tYXgpO1xyXG4gICAgdGhpcy52aXN1YWwuc2V0RXh0cmFMaWdodGluZyh0aGlzLnN0YXRlLmxpZ2h0aW5nKTtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgY21kTGlnaHRpbmdEb3duKCkge1xyXG4gICAgdGhpcy5zdGF0ZS5saWdodGluZyA9IE1hdGgubWF4KHRoaXMuc3RhdGUubGlnaHRpbmctdGhpcy5wLmxpZ2h0aW5nLmRlbHRhLCB0aGlzLnAubGlnaHRpbmcubWluKTtcclxuICAgIHRoaXMudmlzdWFsLnNldEV4dHJhTGlnaHRpbmcodGhpcy5zdGF0ZS5saWdodGluZyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGdvVG9QYWdlKHBhZ2UpIHtcclxuICAgIGlmKHRoaXMucC5ydGwpIHtcclxuICAgICAgcGFnZSA9IHRoaXMuYm9vay5nZXRQYWdlcygpLTEtcGFnZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhZ2VOdW0gPSBNYXRoLm1heChNYXRoLm1pbihwYWdlLCB0aGlzLmJvb2suZ2V0UGFnZXMoKS0xKSwwKTtcclxuICAgIHRoaXMuc3RhdGUuYWN0aXZlU2lkZSA9IChwYWdlTnVtKzEpJTI7XHJcbiAgICBsZXQgdGFyZ2V0ID0gTWF0aC5tYXgoTWF0aC5taW4ocGFnZS0xK3BhZ2UlMiwgdGhpcy5ib29rLmdldFBhZ2VzKCktMSksMCksIGN1cnJlbnQgPSB0aGlzLmJvb2suZ2V0UGFnZSgpLCBmbGlwcyA9IFtdLCBjb3ZzID0gMDs7XHJcbiAgICBpZih0YXJnZXQhPWN1cnJlbnQpIHtcclxuICAgICAgaWYoY3VycmVudD09PTApIHtcclxuICAgICAgICBmbGlwcy5wdXNoKDEpO1xyXG4gICAgICAgIGN1cnJlbnQrPTE7XHJcbiAgICAgICAgKytjb3ZzO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYoY3VycmVudD09PXRoaXMuYm9vay5nZXRQYWdlcygpLTEpIHtcclxuICAgICAgICBmbGlwcy5wdXNoKC0xKTtcclxuICAgICAgICBjdXJyZW50LT0yO1xyXG4gICAgICAgICsrY292cztcclxuICAgICAgfVxyXG4gICAgICBsZXQgY3YgPSAwO1xyXG4gICAgICBpZih0YXJnZXQ9PT0wKSB7XHJcbiAgICAgICAgY3YgPSAtMTtcclxuICAgICAgICB0YXJnZXQrPTE7XHJcbiAgICAgICAgKytjb3ZzO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGFyZ2V0PT09dGhpcy5ib29rLmdldFBhZ2VzKCktMSkge1xyXG4gICAgICAgIGN2ID0gMTtcclxuICAgICAgICB0YXJnZXQtPTI7XHJcbiAgICAgICAgKytjb3ZzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRhcmdldC1jdXJyZW50KSB7XHJcbiAgICAgICAgZmxpcHMucHVzaChNYXRoLmNlaWwoKHRhcmdldC1jdXJyZW50KS8yKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYoY3YpIHtcclxuICAgICAgICBmbGlwcy5wdXNoKGN2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNldENsYiA9IChmbCwgdGltZSwgY2xiKT0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgICBpZihmbDwwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0RmxpcCh0aGlzLmJvb2suZmxpcExlZnQoLWZsLCBjbGIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXJ0RmxpcCh0aGlzLmJvb2suZmxpcFJpZ2h0KGZsLCBjbGIpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHRpbWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZihjb3ZzPT09Mikge1xyXG4gICAgICBzZXRDbGIoZmxpcHNbMF0sIDAsIChibG9jaywgcHJvZ3Jlc3MsIHN0YXRlKT0+IHtcclxuICAgICAgICBpZihzdGF0ZT09J2ZpbmlzaCcgJiYgcHJvZ3Jlc3M9PTEpIHtcclxuICAgICAgICAgIHNldENsYihmbGlwc1tmbGlwcy5sZW5ndGgtMV0sIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNldENsYihmbGlwc1sxXSwgNTAwKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgdGltZSA9IDA7XHJcbiAgICAgIGZvcihsZXQgZmwgb2YgZmxpcHMpIHtcclxuICAgICAgICBzZXRDbGIoZmwsIHRpbWUpO1xyXG4gICAgICAgIHRpbWUrPTI1MDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRGbGlwKGZsaXBSZXMpIHtcclxuICAgIHJldHVybiBmbGlwUmVzPyBmbGlwUmVzLnRoZW4oKGJsb2NrKT0+IHtcclxuICAgICAgaWYoYmxvY2spIHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoQXN5bmMoe1xyXG4gICAgICAgICAgdHlwZTogJ3N0YXJ0RmxpcCdcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYmxvY2s7XHJcbiAgICB9KTogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICBlbmRGbGlwKGJsb2NrKSB7XHJcbiAgICB0aGlzLmRpc3BhdGNoQXN5bmMoe1xyXG4gICAgICB0eXBlOiAnZW5kRmxpcCdcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGJsb2NrO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZSgpIHtcclxuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmJvb2suZ2V0UGFnZSgpO1xyXG4gICAgcmV0dXJuIHBhZ2U/IE1hdGgubWluKHRoaXMuYm9vay5nZXRQYWdlKCkrdGhpcy5zdGF0ZS5hY3RpdmVTaWRlLCB0aGlzLmJvb2suZ2V0UGFnZXMoKS0xKTogMDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VGb3JHVUkoKSB7XHJcbiAgICBsZXQgbiA9ICh0aGlzLnN0YXRlLnNpbmdsZVBhZ2U/IHRoaXMuZ2V0UGFnZSgpOiB0aGlzLmJvb2suZ2V0UGFnZSgpKSsxO1xyXG4gICAgaWYodGhpcy5wLnJ0bCkge1xyXG4gICAgICBuID0gdGhpcy5ib29rLmdldFBhZ2VzKCktbisxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG47XHJcbiAgfVxyXG5cclxuICBpbnBQYWdlKGUsIGRhdGEpIHtcclxuICAgIHRoaXMuZ29Ub1BhZ2UoZGF0YS0xKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZXdJZlN0YXRlKGJsb2NrLCBwcm9ncmVzcywgc3RhdGUsIHR5cGUpIHtcclxuICAgIGlmKHN0YXRlPT09J2luaXQnIHx8IHN0YXRlPT09J2ZpbmlzaCcpIHtcclxuICAgICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZVZpZXcuYmluZCh0aGlzKSwgMTAwKTtcclxuICAgIH1cclxuICAgIGlmKHN0YXRlPT09J2ZpbmlzaCcpIHtcclxuICAgICAgdGhpcy5lbmRGbGlwKGJsb2NrKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZXdTdGF0ZSgpIHtcclxuICAgIHRoaXMudmlld1N0YXRlID0ge1xyXG4gICAgICAnY21kWm9vbUluJzoge1xyXG4gICAgICAgIGVuYWJsZTogdGhpcy5jYW5ab29tSW4oKSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbJ2NtZFpvb21JbiddLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kWm9vbU91dCc6IHtcclxuICAgICAgICBlbmFibGU6IHRoaXMuY2FuWm9vbU91dCgpLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snY21kWm9vbU91dCddLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kRGVmYXVsdFpvb20nOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0aGlzLmNhbkRlZmF1bHRab29tKCksXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWREZWZhdWx0Wm9vbSddLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLmNhbkRlZmF1bHRab29tKCkgJiYgTWF0aC5hYnModGhpcy5ib29rV2F0Y2hlci5zY2FsZS10aGlzLnAuc2NhbGUuZGVmYXVsdCk8dGhpcy5wLmVwc1xyXG4gICAgICB9LFxyXG4gICAgICAnY21kVG9jJzoge1xyXG4gICAgICAgIGVuYWJsZTogISF0aGlzLnRvY0N0cmwsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRUb2MnXS5lbmFibGVkICYmIHRoaXMudG9jQ3RybCxcclxuICAgICAgICBhY3RpdmU6IHRoaXMudG9jQ3RybCAmJiB0aGlzLnRvY0N0cmwudmlzaWJsZVxyXG4gICAgICB9LFxyXG4gICAgICAnaW5wUGFnZXMnOiB7XHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICB2YWx1ZTogdGhpcy5ib29rLmdldFBhZ2VzKClcclxuICAgICAgfSxcclxuICAgICAgJ2lucFBhZ2UnOiB7XHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBlbmFibGU6ICF0aGlzLmJvb2suaXNQcm9jZXNzaW5nKCkgJiYgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHMsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2V0UGFnZUZvckdVSSgpXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRTYXZlJzoge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbJ2NtZFNhdmUnXS5lbmFibGVkICYmICEhdGhpcy5wLmRvd25sb2FkVVJMLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgJ2NtZFByaW50Jzoge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbJ2NtZFByaW50J10uZW5hYmxlZCAmJiAhIXRoaXMucHJpbnRlcixcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRGdWxsU2NyZWVuJzoge1xyXG4gICAgICAgIGVuYWJsZTogRnVsbFNjcmVlbi5hdmFpbGFibGUoKSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbJ2NtZEZ1bGxTY3JlZW4nXS5lbmFibGVkLFxyXG4gICAgICAgIGFjdGl2ZTogRnVsbFNjcmVlbi5hdmFpbGFibGUoKSAmJiBGdWxsU2NyZWVuLmFjdGl2YXRlZCgpXHJcbiAgICAgIH0sXHJcbiAgICAgICd3aWRTZXR0aW5ncyc6IHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWyd3aWRTZXR0aW5ncyddLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kU21hcnRQYW4nOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snY21kU21hcnRQYW4nXS5lbmFibGVkLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy5zdGF0ZS5zbWFydFBhblxyXG4gICAgICB9LFxyXG4gICAgICAnY21kU2luZ2xlUGFnZSc6IHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRTaW5nbGVQYWdlJ10uZW5hYmxlZCxcclxuICAgICAgICBhY3RpdmU6IHRoaXMuc3RhdGUuc2luZ2xlUGFnZVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kU291bmRzJzoge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiAgdGhpcy5hY3Rpb25zWydjbWRTb3VuZHMnXS5lbmFibGVkICYmICEhdGhpcy5zb3VuZHMsXHJcbiAgICAgICAgYWN0aXZlOiAhIXRoaXMuc291bmRzICYmIHRoaXMuc291bmRzLmVuYWJsZWRcclxuICAgICAgfSxcclxuICAgICAgJ2NtZFN0YXRzJzoge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbJ2NtZFN0YXRzJ10uZW5hYmxlZCxcclxuICAgICAgICBhY3RpdmU6IHRoaXMuc3RhdGUuc3RhdHNcclxuICAgICAgfSxcclxuICAgICAgJ2NtZExpZ2h0aW5nVXAnOiB7XHJcbiAgICAgICAgZW5hYmxlOiBNYXRoLmFicyh0aGlzLnN0YXRlLmxpZ2h0aW5nLXRoaXMucC5saWdodGluZy5tYXgpPnRoaXMucC5lcHMsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRMaWdodGluZ1VwJ10uZW5hYmxlZCxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRMaWdodGluZ0Rvd24nOiB7XHJcbiAgICAgICAgZW5hYmxlOiBNYXRoLmFicyh0aGlzLnN0YXRlLmxpZ2h0aW5nLXRoaXMucC5saWdodGluZy5taW4pPnRoaXMucC5lcHMsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRMaWdodGluZ0Rvd24nXS5lbmFibGVkLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5ib29rLmdldExlZnRGbGlwcGluZygpLFxyXG4gICAgICAgICAgcmlnaHQgPSB0aGlzLmJvb2suZ2V0UmlnaHRGbGlwcGluZygpO1xyXG4gICAgY29uc3QgZmxpcHBlcnNFbmFibGUgPSB7XHJcbiAgICAgIGNtZEZhc3RCYWNrd2FyZDogISFsZWZ0ICYmIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzLFxyXG4gICAgICBjbWRCYWNrd2FyZDogISFsZWZ0ICYmIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzLFxyXG4gICAgICBjbWRGb3J3YXJkOiAhIXJpZ2h0ICYmIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzLFxyXG4gICAgICBjbWRGYXN0Rm9yd2FyZDogISFyaWdodCAmJiB0aGlzLm5hdmlnYXRpb25Db250cm9sc1xyXG4gICAgfTtcclxuICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyhmbGlwcGVyc0VuYWJsZSkpIHtcclxuICAgICAgdGhpcy52aWV3U3RhdGVbbmFtZV0gPSB7XHJcbiAgICAgICAgZW5hYmxlOiBmbGlwcGVyc0VuYWJsZVtuYW1lXSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbbmFtZV0uZW5hYmxlZCxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmlldygpIHtcclxuICAgIGlmKHRoaXMudmlldykge1xyXG4gICAgICB0aGlzLnVwZGF0ZVZpZXdTdGF0ZSgpO1xyXG4gICAgICBmb3IobGV0IG5hbWUgb2YgT2JqZWN0LmtleXModGhpcy52aWV3U3RhdGUpKSB7XHJcbiAgICAgICAgdGhpcy52aWV3LnNldFN0YXRlKG5hbWUsIHRoaXMudmlld1N0YXRlW25hbWVdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aW9ucygpIHtcclxuICAgIGNvbnN0IGlzU3dpcHBpbmcgPSAobmFtZSk9PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmFjdGlvbnMudG91Y2hDbWRTd2lwZS5lbmFibGVkICYmIHRoaXMuYWN0aW9ucy50b3VjaENtZFN3aXBlLmNvZGU9PT10aGlzLmFjdGlvbnNbbmFtZV0uY29kZSAmJiB0aGlzLnN0YXRlLnNtYXJ0UGFuICYmIHRoaXMuYm9va1dhdGNoZXIuc2NhbGU8PTE7XHJcbiAgICB9LCBjbWRzID0ge307XHJcblxyXG4gICAgZm9yKGxldCBuYW1lIGluIHRoaXMpIHtcclxuICAgICAgaWYobmFtZS5pbmRleE9mKCdjbWQnKT09PTApIHtcclxuICAgICAgICBjbWRzW25hbWVdID0ge1xyXG4gICAgICAgICAgYWN0aXZhdGU6ICguLi5hcmdzKT0+IHtcclxuICAgICAgICAgICAgaWYodGhpcy52aWV3U3RhdGUgJiYgdGhpcy52aWV3U3RhdGVbbmFtZV0uZW5hYmxlKSB7XHJcbiAgICAgICAgICAgICAgdGhpc1tuYW1lXSguLi5hcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi5jbWRzLFxyXG4gICAgICBjbWRQYW5MZWZ0OiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlKT0+IHRoaXMub3JiaXQuYWN0aW9ucy5wYW4oZSwge1xyXG4gICAgICAgICAgc3RhdGU6ICdtb3ZlJyxcclxuICAgICAgICAgIGR4OiAtdGhpcy5wLnBhbi5zcGVlZCxcclxuICAgICAgICAgIGR5OiAwXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgY21kUGFuUmlnaHQ6IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUpPT4gdGhpcy5vcmJpdC5hY3Rpb25zLnBhbihlLCB7XHJcbiAgICAgICAgICBzdGF0ZTogJ21vdmUnLFxyXG4gICAgICAgICAgZHg6IHRoaXMucC5wYW4uc3BlZWQsXHJcbiAgICAgICAgICBkeTogMFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhblVwOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlKT0+IHRoaXMub3JiaXQuYWN0aW9ucy5wYW4oZSwge1xyXG4gICAgICAgICAgc3RhdGU6ICdtb3ZlJyxcclxuICAgICAgICAgIGR4OiAwLFxyXG4gICAgICAgICAgZHk6IC10aGlzLnAucGFuLnNwZWVkXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgY21kUGFuRG93bjoge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSk9PiB0aGlzLm9yYml0LmFjdGlvbnMucGFuKGUsIHtcclxuICAgICAgICAgIHN0YXRlOiAnbW92ZScsXHJcbiAgICAgICAgICBkeDogMCxcclxuICAgICAgICAgIGR5OiB0aGlzLnAucGFuLnNwZWVkXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWRSb3RhdGU6IHtcclxuICAgICAgICBhY3RpdmF0ZTogdGhpcy5vcmJpdC5hY3Rpb25zLnJvdGF0ZVxyXG4gICAgICB9LFxyXG4gICAgICBtb3VzZUNtZERyYWdab29tOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlLCBkYXRhKT0+IHtcclxuICAgICAgICAgIGlmKGRhdGEuZHk+MCkge1xyXG4gICAgICAgICAgICB0aGlzLmNtZFpvb21PdXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYoZGF0YS5keTwwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY21kWm9vbUluKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBtb3VzZUNtZFBhbjoge1xyXG4gICAgICAgIGFjdGl2YXRlOiB0aGlzLm9yYml0LmFjdGlvbnMucGFuXHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kV2hlZWxab29tOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlKT0+IHtcclxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgIGlmKGUuZGVsdGFZPDApIHtcclxuICAgICAgICAgICAgdGhpcy5jbWRab29tT3V0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmKGUuZGVsdGFZPjApIHtcclxuICAgICAgICAgICAgdGhpcy5jbWRab29tSW4oKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kUm90YXRlOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlLCBkYXRhKT0+IHtcclxuICAgICAgICAgIGlmKCFpc1N3aXBwaW5nKCd0b3VjaENtZFJvdGF0ZScpKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5vcmJpdC5hY3Rpb25zLnJvdGF0ZShlLCBkYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kWm9vbToge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSwgZGF0YSk9PiB7XHJcbiAgICAgICAgICBpZighaXNTd2lwcGluZygndG91Y2hDbWRab29tJykpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBpZihkYXRhLmR5PjApIHtcclxuICAgICAgICAgICAgICB0aGlzLmNtZFpvb21PdXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKGRhdGEuZHk8MCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY21kWm9vbUluKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kUGFuOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlLCBkYXRhKT0+IHtcclxuICAgICAgICAgIGlmKCFpc1N3aXBwaW5nKCd0b3VjaENtZFBhbicpKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5vcmJpdC5hY3Rpb25zLnBhbihlLCBkYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kU3dpcGU6IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUsIGRhdGEpPT4ge1xyXG4gICAgICAgICAgaWYoaXNTd2lwcGluZygndG91Y2hDbWRTd2lwZScpKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaWYoZGF0YS5zdGF0ZT09PSdzdGFydCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0b3VjaCA9IChlLnRvdWNoZXMgfHwgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMpW3RoaXMuYWN0aW9ucy50b3VjaENtZFN3aXBlLmNvZGUtMV07XHJcbiAgICAgICAgICAgICAgdGhpcy5zd2lwZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHgwOiB0b3VjaC5wYWdlWCxcclxuICAgICAgICAgICAgICAgIHkwOiB0b3VjaC5wYWdlWSxcclxuICAgICAgICAgICAgICAgIHg6IHRvdWNoLnBhZ2VYLFxyXG4gICAgICAgICAgICAgICAgeTogdG91Y2gucGFnZVlcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoZGF0YS5zdGF0ZT09PSdtb3ZlJykge1xyXG4gICAgICAgICAgICAgIGlmKCF0aGlzLnN3aXBlRGF0YS5oYW5kbGVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3aXBlRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4udGhpcy5zd2lwZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgIHg6IHRoaXMuc3dpcGVEYXRhLngrZGF0YS5keCxcclxuICAgICAgICAgICAgICAgICAgeTogdGhpcy5zd2lwZURhdGEueStkYXRhLmR5XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihNYXRoLmFicyh0aGlzLnN3aXBlRGF0YS54MC10aGlzLnN3aXBlRGF0YS54KT4xMDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zd2lwZURhdGEueDA+dGhpcy5zd2lwZURhdGEueD8gdGhpcy5jbWRGb3J3YXJkKCk6IHRoaXMuY21kQmFja3dhcmQoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zd2lwZURhdGEuaGFuZGxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN3aXBlRGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgd2lkU2V0dGluZ3M6IHtcclxuICAgICAgICBhY3RpdmF0ZTogKCk9PiB1bmRlZmluZWRcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGJpbmRBY3Rpb25zKCkge1xyXG4gICAgdGhpcy5lVG9BID0gbmV3IEV2ZW50c1RvQWN0aW9ucygkKHRoaXMudmlzdWFsLmVsZW1lbnQpKTtcclxuICAgIHRoaXMuZVRvQS5hZGRBY3Rpb24oKGUpPT4gZS5wcmV2ZW50RGVmYXVsdCgpLCAnY29udGV4dG1lbnUnLCBFdmVudHNUb0FjdGlvbnMubW91c2VCdXR0b25zLlJpZ2h0LCAwKTtcclxuXHJcbiAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmdldEFjdGlvbnMoKTtcclxuICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLmFjdGlvbnMpKSB7XHJcbiAgICAgIGNvbnN0IGFjdGlvbiA9IHtcclxuICAgICAgICAuLi50aGlzLmFjdGlvbnNbbmFtZV0sXHJcbiAgICAgICAgLi4udGhpcy5wLmFjdGlvbnNbbmFtZV1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hY3Rpb25zW25hbWVdID0gYWN0aW9uO1xyXG4gICAgICBpZihhY3Rpb24uZW5hYmxlZCkge1xyXG4gICAgICAgIGNvbnN0IGZsYWdzID0gYWN0aW9uLmZsYWdzIHx8IDA7XHJcbiAgICAgICAgaWYoYWN0aW9uLnR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuZVRvQS5hZGRBY3Rpb24oYWN0aW9uLmFjdGl2YXRlLCBhY3Rpb24udHlwZSwgYWN0aW9uLmNvZGUsIGZsYWdzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihhY3Rpb24uY29kZSE9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5lVG9BLmFkZEFjdGlvbihhY3Rpb24uYWN0aXZhdGUsICdrZXlkb3duJywgYWN0aW9uLmNvZGUsIGZsYWdzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBwcmVwYXJlUHJvcHMocHJvcHMpIHtcclxuICAgIHJldHVybiBCb29rQ29udHJvbGxlci5jYWxjUHJvcHMoQm9va0NvbnRyb2xsZXIubWVyZ2VQcm9wcyhib29rQ29udHJvbGxlclByb3BzKCksIHByb3BzKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0QWN0aW9ucyhwcm9wcywgYWN0aW9ucykge1xyXG4gICAgZm9yKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKGFjdGlvbnMgfHwge30pKSB7XHJcbiAgICAgIHByb3BzLmFjdGlvbnNbbmFtZV0gPSB7XHJcbiAgICAgICAgLi4ucHJvcHMuYWN0aW9uc1tuYW1lXSxcclxuICAgICAgICAuLi5hY3Rpb25zW25hbWVdXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgbWVyZ2VQcm9wcyhmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICBzZWNvbmQgPSBzZWNvbmQgfHwge307XHJcbiAgICBmdW5jdGlvbiBtZXJnZShmaXJzdCwgc2Vjb25kKSB7XHJcbiAgICAgIHNlY29uZCA9IHNlY29uZCB8fCB7fTtcclxuICAgICAgY29uc3QgcHJvcHMgPSB7XHJcbiAgICAgICAgLi4uZmlyc3QsXHJcbiAgICAgICAgLi4uc2Vjb25kXHJcbiAgICAgIH07XHJcbiAgICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyhmaXJzdCkpIHtcclxuICAgICAgICBpZih0eXBlb2YgZmlyc3RbbmFtZV09PT0nb2JqZWN0Jykge1xyXG4gICAgICAgICAgcHJvcHNbbmFtZV0gPSBtZXJnZShmaXJzdFtuYW1lXSwgc2Vjb25kW25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByb3BzO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcHJvcHMgPSBtZXJnZShmaXJzdCwgc2Vjb25kKTtcclxuICAgIEJvb2tDb250cm9sbGVyLnNldEFjdGlvbnMocHJvcHMsIGZpcnN0LmFjdGlvbnMpO1xyXG4gICAgQm9va0NvbnRyb2xsZXIuc2V0QWN0aW9ucyhwcm9wcywgc2Vjb25kLmFjdGlvbnMpO1xyXG4gICAgcmV0dXJuIHByb3BzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNhbGNQcm9wcyhwcm9wcykge1xyXG4gICAgcHJvcHMuc2NhbGUuZGVsdGEgPSAocHJvcHMuc2NhbGUubWF4LXByb3BzLnNjYWxlLm1pbikvcHJvcHMuc2NhbGUubGV2ZWxzO1xyXG4gICAgcHJvcHMubGlnaHRpbmcuZGVsdGEgPSAocHJvcHMubGlnaHRpbmcubWF4LXByb3BzLmxpZ2h0aW5nLm1pbikvcHJvcHMubGlnaHRpbmcubGV2ZWxzO1xyXG4gICAgcmV0dXJuIHByb3BzO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Cb29rQ29udHJvbGxlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQm9va0NvbnRyb2xsZXIuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9va1ByaW50ZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBib29rLCBzdHlsZVNoZWV0KSB7XHJcbiAgICB0aGlzLmJvb2sgPSBib29rO1xyXG4gICAgdGhpcy5zdHlsZVNoZWV0ID0gc3R5bGVTaGVldDtcclxuICAgIHRoaXMud25kID0gY29udGV4dC53bmQ7XHJcbiAgICB0aGlzLmRvYyA9IGNvbnRleHQuZG9jO1xyXG4gICAgdGhpcy5wYWdlQ2FsbGJhY2sgPSBib29rLmdldFBhZ2VDYWxsYmFjaygpO1xyXG4gICAgY29uc3QgdGVzdCA9IHRoaXMucGFnZUNhbGxiYWNrKDApO1xyXG4gICAgdGhpcy50eXBlID0gdGVzdC50eXBlO1xyXG4gICAgaWYodGhpcy50eXBlPT09J3BkZicpIHtcclxuICAgICAgdGhpcy5wZGZTcmMgPSB0ZXN0LnNyYy5zcmM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBpZih0aGlzLmZyYW1lKSB7XHJcbiAgICAgIHRoaXMuZnJhbWUucmVtb3ZlKCk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmZyYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpbnQoKSB7XHJcbiAgICBkZWxldGUgdGhpcy5jYW5jZWxlZDtcclxuICAgIGlmKHRoaXMudHlwZT09PSdwZGYnKSB7XHJcbiAgICAgIGxldCBwcmludFduZCwgY2FsbE1hbnVhbGx5ID0gZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMudXNlSUZyYW1lKCkpIHtcclxuICAgICAgICBjYWxsTWFudWFsbHkgPSAhIXRoaXMuZnJhbWU7XHJcbiAgICAgICAgaWYoIXRoaXMuZnJhbWUpIHtcclxuICAgICAgICAgIHRoaXMuZnJhbWUgPSAkKCc8aWZyYW1lIHNyYz1cIicrdGhpcy5wZGZTcmMrJ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2lmcmFtZT4nKS5hcHBlbmRUbyh0aGlzLmRvYy5ib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJpbnRXbmQgPSB0aGlzLmZyYW1lWzBdLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcHJpbnRXbmQgPSB0aGlzLnduZC5vcGVuKHRoaXMucGRmU3JjKTtcclxuICAgICAgfVxyXG4gICAgICBpZihjYWxsTWFudWFsbHkpIHtcclxuICAgICAgICBwcmludFduZC5wcmludCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICQocHJpbnRXbmQpLm9uKCdsb2FkJywgKCk9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwcmludFduZC5wcmludCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2goZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJDb250ZW50KCkuXHJcbiAgICAgICAgdGhlbigoY29udGVudCk9PiB7XHJcbiAgICAgICAgICBjb25zdCBwcmludFduZCA9IHRoaXMud25kLm9wZW4oKSxcclxuICAgICAgICAgIHByaW50RG9jID0gcHJpbnRXbmQuZG9jdW1lbnQsXHJcbiAgICAgICAgICBodG1sID0gYFxyXG4gICAgICAgICAgICA8IURPQ1RZUEUgaHRtbD5cclxuICAgICAgICAgICAgPGh0bWw+XHJcbiAgICAgICAgICAgICAgPGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cclxuICAgICAgICAgICAgICAgIDx0aXRsZT4zRCBGbGlwQm9vayAtIFByaW50aW5nPC90aXRsZT5cclxuICAgICAgICAgICAgICAgICR7Y29udGVudC5oZWFkfVxyXG4gICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+XHJcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByaW50RG9jdW1lbnQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnByaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHByaW50RG9jdW1lbnQsIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgICAgICAgIDwvaGVhZD5cclxuICAgICAgICAgICAgICA8Ym9keSBvbmxvYWQ9XCJpbml0KClcIj5cclxuICAgICAgICAgICAgICAgICR7Y29udGVudC5ib2R5fVxyXG4gICAgICAgICAgICAgIDwvYm9keT5cclxuICAgICAgICAgICAgPC9odG1sPlxyXG4gICAgICAgICAgYDtcclxuICAgICAgICAgIHByaW50RG9jLm9wZW4oKTtcclxuICAgICAgICAgIHByaW50RG9jLndyaXRlKGh0bWwpO1xyXG4gICAgICAgICAgcHJpbnREb2MuY2xvc2UoKTtcclxuICAgICAgICB9KS5cclxuICAgICAgICBjYXRjaCgoZSk9PiBjb25zb2xlLndhcm4oJzNEIEZsaXBCb29rIC0gUHJpbnRpbmcgd2FzIGNhbmNlbGVkJykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3Jlc3Modikge1xyXG4gICAgaWYodGhpcy5jYW5jZWxlZCkge1xyXG4gICAgICB0aHJvdyAnQ2FuY2VsIFByaW50aW5nJztcclxuICAgIH1cclxuICAgIGlmKHRoaXMub25Qcm9ncmVzcykge1xyXG4gICAgICB0aGlzLm9uUHJvZ3Jlc3MoTWF0aC5mbG9vcih2KjEwMCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVyQ29udGVudCgpIHtcclxuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5ib29rLmdldFBhZ2VzKCksIGhlYWQgPSBuZXcgU2V0KCksIGJvZHkgPSBbXTtcclxuICAgIGxldCBkb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICBmb3IobGV0IHBhZ2U9MDsgcGFnZTxwYWdlczsgKytwYWdlKSB7XHJcbiAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnBhZ2VDYWxsYmFjayhwYWdlKTtcclxuICAgICAgaWYoaW5mby50eXBlPT09J2ltYWdlJykge1xyXG4gICAgICAgIGRvbmUgPSBkb25lLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnByb2dyZXNzKHBhZ2UvcGFnZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySW1hZ2UoaGVhZCwgYm9keSwgaW5mby5zcmMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYoaW5mby50eXBlPT09J2h0bWwnKSB7XHJcbiAgICAgICAgZG9uZSA9IGRvbmUudGhlbigoKT0+IHtcclxuICAgICAgICAgIHRoaXMucHJvZ3Jlc3MocGFnZS9wYWdlcyk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJIdG1sKGhlYWQsIGJvZHksIGluZm8uc3JjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRvbmUudGhlbigoKT0+IHtcclxuICAgICAgdGhpcy5wcm9ncmVzcygxKTtcclxuICAgICAgcmV0dXJuIHtoZWFkOiB0aGlzLnJlbmRlckhlYWQoaGVhZCksIGJvZHk6IGJvZHkuam9pbignXFxuJyl9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB3cmFwKGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZiM2QtcHJpbnRlci1wYWdlXCI+JHtjb250ZW50fTwvZGl2PmA7XHJcbiAgfVxyXG5cclxuICByZW5kZXJJbWFnZShoZWFkLCBib2R5LCBzcmMpIHtcclxuICAgIGJvZHkucHVzaChCb29rUHJpbnRlci53cmFwKGA8aW1nIHNyYz1cIiR7c3JjfVwiIC8+YCkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySHRtbChoZWFkLCBib2R5LCBzcmMpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+IHtcclxuICAgICAgJC5nZXQoc3JjLCAoaHRtbCk9PiB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBodG1sLm1hdGNoKC88bGluay4qPz4vaWcpIHx8IFtdO1xyXG4gICAgICAgIGZvcihsZXQgbGluayBvZiBsaW5rcykge1xyXG4gICAgICAgICAgaWYobGluay5tYXRjaCgvc3R5bGVzaGVldC9pKSkge1xyXG4gICAgICAgICAgICBjb25zdCBocmVmID0gbGluay5tYXRjaCgvaHJlZlxccyo9XFxzKlsnXCJdKC4qKVsnXCJdL2kpO1xyXG4gICAgICAgICAgICBpZihocmVmKSB7XHJcbiAgICAgICAgICAgICAgaGVhZC5hZGQoaHJlZlsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IGh0bWwubWF0Y2goLzxib2R5Lio/PihbXFxTXFxzXSopPFxcL2JvZHk+L2kpO1xyXG4gICAgICAgIGlmKGNvbnRlbnQpIHtcclxuICAgICAgICAgIGJvZHkucHVzaChCb29rUHJpbnRlci53cmFwKGNvbnRlbnRbMV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KS5mYWlsKChlKT0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICByZWplY3QoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVuZGVySGVhZChoZWFkKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gW107XHJcbiAgICBoZWFkLmZvckVhY2goKGspPT4gY29udGVudC5wdXNoKGA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIiR7a31cIj5gKSk7XHJcbiAgICBjb250ZW50LnB1c2godGhpcy5zdHlsZVNoZWV0PyBgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIke3RoaXMuc3R5bGVTaGVldH1cIj5gOiBCb29rUHJpbnRlci5kZWZhdWx0U3R5bGVTaGVldCgpKTtcclxuICAgIHJldHVybiBjb250ZW50LmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgdXNlSUZyYW1lKCkge1xyXG4gICAgY29uc3QgaXNDaHJvbWl1bSA9IHRoaXMud25kLmNocm9tZSxcclxuICAgICAgd2luTmF2ID0gdGhpcy53bmQubmF2aWdhdG9yLFxyXG4gICAgICB2ZW5kb3JOYW1lID0gd2luTmF2LnZlbmRvcixcclxuICAgICAgaXNJRWVkZ2UgPSB3aW5OYXYudXNlckFnZW50LmluZGV4T2YoXCJFZGdlXCIpPi0xLFxyXG4gICAgICBpc0lPU0Nocm9tZSA9IHdpbk5hdi51c2VyQWdlbnQubWF0Y2goXCJDcmlPU1wiKTtcclxuICAgIGxldCB1c2U7XHJcbiAgICBpZihpc0lPU0Nocm9tZSl7XHJcbiAgICAgIHVzZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYoaXNDaHJvbWl1bSAmJiB2ZW5kb3JOYW1lPT09J0dvb2dsZSBJbmMuJyAmJiAhaXNJRWVkZ2UpIHtcclxuICAgICAgdXNlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVzZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0U3R5bGVTaGVldCgpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICAgIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cclxuICAgICAgICBib2R5IHtcclxuICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5mYjNkLXByaW50ZXItcGFnZSB7XHJcbiAgICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhbHdheXM7XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3N0eWxlPlxyXG4gICAgYDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQm9va1ByaW50ZXIuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9qcy9jbGFzc2VzL0Jvb2tQcmludGVyLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IFZpZXcgZnJvbSAnVmlldyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb29rVmlldyBleHRlbmRzIFZpZXcge1xyXG5cclxuICBzdGF0aWMgUEFHRV9IQU5ETEVSX0RFTEFZID0gMTAwMDtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBvbkxvYWQsIHRlbXBsYXRlLCBoYW5kbGVyKSB7XHJcbiAgICBzdXBlcihjb250YWluZXIsIG9uTG9hZCwgdGVtcGxhdGUsIGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgaW5pdFZpZXcoKSB7XHJcbiAgICB0aGlzLnZpZXcgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcudmlldycpO1xyXG4gICAgdGhpcy5ib29rbWFya3NWaWV3ID0gdGhpcy5jb250YWluZXIuZmluZCgnLndpZEJvb2ttYXJrcycpO1xyXG4gICAgdGhpcy50aHVtYm5haWxzVmlldyA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy53aWRUaHVtYm5haWxzJyk7XHJcbiAgICB0aGlzLnNlYXJjaFZpZXcgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcud2lkU2VhcmNoJyk7XHJcbiAgfVxyXG5cclxuICBnZXRIYW5kbGVycyhpZCkge1xyXG4gICAgbGV0IGhhbmRsZXJzO1xyXG4gICAgaWYoaWQ9PT0naW5wUGFnZScpIHtcclxuICAgICAgaGFuZGxlcnMgPSBbe1xyXG4gICAgICAgIGlucFBhZ2U6IChlLCBkYXRhKT0+IHRoaXMuY2FsbExhdGVyKHN1cGVyLmdldEhhbmRsZXJzKGlkKSwgaWQsIGUsIGRhdGEsIEJvb2tWaWV3LlBBR0VfSEFORExFUl9ERUxBWSlcclxuICAgICAgfV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaGFuZGxlcnMgPSBzdXBlci5nZXRIYW5kbGVycyhpZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGFuZGxlcnM7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1TdGF0ZUNoYW5nZWQoaWQsIHN0YXRlKSB7XHJcbiAgICBpZihpZD09PSdjbWRGdWxsU2NyZWVuJykge1xyXG4gICAgICBpZihzdGF0ZS5hY3RpdmUpIHtcclxuICAgICAgICB0aGlzLnBhcmVudENvbnRhaW5lci5hZGRDbGFzcygnZnVsbHNjcmVlbicpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVyLnJlbW92ZUNsYXNzKCdmdWxsc2NyZWVuJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFZpZXcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy52aWV3O1xyXG4gIH1cclxuXHJcbiAgZ2V0Qm9va21hcmtzVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLmJvb2ttYXJrc1ZpZXc7XHJcbiAgfVxyXG5cclxuICBnZXRUaHVtYm5haWxzVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLnRodW1ibmFpbHNWaWV3O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoVmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLnNlYXJjaFZpZXc7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtcygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGlua3MoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnY21kWm9vbUluJyxcclxuICAgICAgJ2NtZFpvb21PdXQnLFxyXG4gICAgICAnY21kRGVmYXVsdFpvb20nLFxyXG4gICAgICAnY21kVG9jJyxcclxuICAgICAgJ2NtZEZhc3RCYWNrd2FyZCcsXHJcbiAgICAgICdjbWRCYWNrd2FyZCcsXHJcbiAgICAgICdjbWRGb3J3YXJkJyxcclxuICAgICAgJ2NtZEZhc3RGb3J3YXJkJyxcclxuICAgICAgJ2NtZFNhdmUnLFxyXG4gICAgICAnY21kUHJpbnQnLFxyXG4gICAgICAnY21kRnVsbFNjcmVlbicsXHJcbiAgICAgICdjbWRTbWFydFBhbicsXHJcbiAgICAgICdjbWRTaW5nbGVQYWdlJyxcclxuICAgICAgJ2NtZFNvdW5kcycsXHJcbiAgICAgICdjbWRTdGF0cycsXHJcbiAgICAgICdjbWRMaWdodGluZ1VwJyxcclxuICAgICAgJ2NtZExpZ2h0aW5nRG93bicsXHJcbiAgICAgICdjbWRDbG9zZVRvYycsXHJcbiAgICAgICdjbWRCb29rbWFya3MnLFxyXG4gICAgICAnY21kU2VhcmNoJyxcclxuICAgICAgJ2NtZFRodW1ibmFpbHMnXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lkZ2V0cygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICd3aWRMb2FkaW5nUHJvZ3Jlc3MnLFxyXG4gICAgICAnd2lkRmxvYXRXbmQnLFxyXG4gICAgICAnd2lkVG9jTWVudScsXHJcbiAgICAgICd3aWRCb29rbWFya3MnLFxyXG4gICAgICAnd2lkVGh1bWJuYWlscycsXHJcbiAgICAgICd3aWRTZWFyY2gnLFxyXG4gICAgICAnd2lkU2V0dGluZ3MnLFxyXG4gICAgICAnd2lkTG9hZGluZydcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRJbnB1dHMoKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAnaW5wUGFnZScsXHJcbiAgICAgICdpbnBQYWdlcydcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRUZXh0cygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICd0eHRMb2FkaW5nUHJvZ3Jlc3MnXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcGxhdGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBodG1sOiAndGVtcGxhdGVzL2RlZmF1bHQtYm9vay12aWV3Lmh0bWwnLFxyXG4gICAgICBzdHlsZXM6IFtcclxuICAgICAgICAnY3NzL2JsYWNrLWJvb2stdmlldy5jc3MnXHJcbiAgICAgIF0sXHJcbiAgICAgIGxpbmtzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcmVsOiAnc3R5bGVzaGVldCcsXHJcbiAgICAgICAgICBocmVmOiAnY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzJ1xyXG4gICAgICAgIH1cclxuICAgICAgXSxcclxuICAgICAgc2NyaXB0OiAnanMvZGVmYXVsdC1ib29rLXZpZXcuanMnXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Cb29rVmlldy5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQm9va1ZpZXcuanMiLCJpbXBvcnQgQm9va1Byb3BzQnVpbGRlciBmcm9tICcuL0Jvb2tQcm9wc0J1aWxkZXInO1xyXG5pbXBvcnQgSW1hZ2VGYWN0b3J5IGZyb20gJ0ltYWdlRmFjdG9yeSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGJCb29rUHJvcHNCdWlsZGVyIGV4dGVuZHMgQm9va1Byb3BzQnVpbGRlciB7XHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgcGFnZUNhbGxiYWNrLCBwYWdlcywgb25SZWFkeSkge1xyXG4gICAgc3VwZXIob25SZWFkeSk7XHJcbiAgICB0aGlzLmNhbGNTaGVldHMocGFnZXMpO1xyXG4gICAgdGhpcy5wYWdlQ2FsbGJhY2sgPSBwYWdlQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBwYWdlQ2FsbGJhY2s6IHBhZ2VDYWxsYmFjay5iaW5kKHRoaXMpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5pbWFnZUZhY3RvcnkgPSBuZXcgSW1hZ2VGYWN0b3J5KGNvbnRleHQpO1xyXG5cclxuICAgIGlmKHBhZ2VzPjApIHtcclxuICAgICAgY29uc3QgdGVzdCA9IHRoaXMuaW1hZ2VGYWN0b3J5LmJ1aWxkKHBhZ2VDYWxsYmFjaygwKSwgMCwgdGhpcy5kZWZhdWx0cy5zaGVldC53aWR0aFRleGVscywgdGhpcy5kZWZhdWx0cy5zaGVldC5oZWlnaHRUZXhlbHMsIHRoaXMuZGVmYXVsdHMuc2hlZXQuY29sb3IpO1xyXG4gICAgICB0ZXN0Lm9uTG9hZCA9ICgpPT4ge1xyXG4gICAgICAgIHRoaXMuY2FsY1Byb3BzKHRlc3Qud2lkdGgsIHRlc3QuaGVpZ2h0KTtcclxuICAgICAgICB0ZXN0LmRpc3Bvc2UoKTtcclxuICAgICAgICB0aGlzLnJlYWR5KCk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5wcm9wcyA9IHRoaXMuZGVmYXVsdHM7XHJcbiAgICAgIHRoaXMucmVhZHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQ2xiQm9va1Byb3BzQnVpbGRlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQ2xiQm9va1Byb3BzQnVpbGRlci5qcyIsImltcG9ydCBTaGVldEJsb2NrIGZyb20gJy4vU2hlZXRCbG9jayc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb3ZlciBleHRlbmRzIFNoZWV0QmxvY2sge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aXN1YWwsIHAsIGFuZ2xlLCBzdGF0ZSkge1xyXG4gICAgc3VwZXIodmlzdWFsLCBwLCAwLCAxLCBhbmdsZSwgc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJvcHMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAuLi50aGlzLnAuY292ZXIsXHJcbiAgICAgIHNoZWV0czogMVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGxvYWRQb2ludHMoKSB7XHJcbiAgICBjb25zdCBvcGVuZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyA9IFtcclxuICAgICAgWzIsMyw0XSxcclxuICAgICAgWzIsMyw0LDUsNl1cclxuICAgIF0sXHJcbiAgICBjbG9zZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyA9IFtcclxuICAgICAgWzAsMSwyXSxcclxuICAgICAgWzAsMSwyXVxyXG4gICAgXSxcclxuICAgIGludGVycG9sYXRpb25Qb2ludHMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICB4OiBbXHJcbiAgICAgICAgICAgICBbMCwwLjI4NzcsMC42MzQ3LDAuODE3NCwxLjAwMDBdLFxyXG4gICAgICAgICAgICAgWzAsMC4yODMxLDAuNjI1NiwwLjgwODIsMC45OTA5XSxcclxuICAgICAgICAgICAgIFswLDAuMjYwMywwLjU5MzYsMC43NzYzLDAuOTU4OV0sXHJcbiAgICAgICAgICAgICBbMCwwLjEzNzAsMC4zODgxLDAuNTM0MiwwLjY3NThdLFxyXG4gICAgICAgICAgICAgWzAsMCwwLDAsMF1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHk6IFtcclxuICAgICAgICAgICAgIFswLDAsMCwwLDBdLFxyXG4gICAgICAgICAgICAgWzAsMC4wMiwwLjAwNSwtMC4wMDEsLTAuMDAyNV0sXHJcbiAgICAgICAgICAgICBbMCwwLjA0LDAuMDEsLTAuMDAyLC0wLjAwNV0sXHJcbiAgICAgICAgICAgICBbMCwgMC4yNDY2LCAwLjQ3OTUsIDAuNTcwOCwgMC42NzU4XSxcclxuICAgICAgICAgICAgIFswLCAwLjI4NzcsIDAuNjM0NywgMC44MTc0LCAxLjAwMDBdXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgeDogW1xyXG4gICAgICAgICAgICAgWzAsMC4yODc3LDAuNjM0NywwLjgxNzQsMS4wMDAwXSxcclxuICAgICAgICAgICAgIFswLDAuMjgzMSwwLjYyNTYsMC44MDgyLDAuOTkwOV0sXHJcbiAgICAgICAgICAgICBbMCwwLjI2MDMsMC41OTM2LDAuNzc2MywwLjk1ODldLFxyXG4gICAgICAgICAgICAgWzAuMDAwLDAuMjMzLDAuNTYzLDAuNzQ2LDAuOTI3XSxcclxuICAgICAgICAgICAgIFswLjAwMCwwLjE0NCwwLjQzMywwLjYxMywwLjc5Nl0sXHJcbiAgICAgICAgICAgICBbMC4wMDAsMC4wNzAsMC4yODgsMC40NTUsMC42MjZdLFxyXG4gICAgICAgICAgICAgWzAsMCwwLDAsMF1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHk6IFtcclxuICAgICAgICAgICAgIFswLDAsMCwwLDBdLFxyXG4gICAgICAgICAgICAgWzAsMC4wMiwwLjAwNSwtMC4wMDEsLTAuMDAyNV0sXHJcbiAgICAgICAgICAgICBbMCwwLjA0LDAuMDEsLTAuMDAyLC0wLjAwNV0sXHJcbiAgICAgICAgICAgICBbMC4wMDAsMC4xNjgsMC4yNjksMC4yNzAsMC4yNTVdLFxyXG4gICAgICAgICAgICAgWzAuMDAwLDAuMjQ1LDAuNDM1LDAuNDU4LDAuNDYwXSxcclxuICAgICAgICAgICAgIFswLjAwMCwwLjI3OCwwLjU0NCwwLjYxNCwwLjY3M10sXHJcbiAgICAgICAgICAgICBbMCwgMC4yODc3LCAwLjYzNDcsIDAuODE3NCwgMS4wMDAwXVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGludGVycG9sYXRpb25Qb2ludHMsXHJcbiAgICAgIG9wZW5lZEludGVycG9sYXRpb25JbmRlY2VzLFxyXG4gICAgICBjbG9zZWRJbnRlcnBvbGF0aW9uSW5kZWNlc1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Db3Zlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQ292ZXIuanMiLCJpbXBvcnQgU2hlZXRDc3NMYXllciBmcm9tICcuL1NoZWV0Q3NzTGF5ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3NzTGF5ZXJzTWFuYWdlciB7XHJcbiAgY29uc3RydWN0b3IoYm9vaykge1xyXG4gICAgdGhpcy5ib29rID0gYm9vaztcclxuICAgIHRoaXMucHJvcHMgPSBib29rLnAuY3NzTGF5ZXJQcm9wcztcclxuICAgIHRoaXMudmlzdWFsID0gYm9vay52aXN1YWw7XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyID0gYm9vay5wYWdlTWFuYWdlcjtcclxuICAgIHRoaXMud3JhcHBlcnMgPSB7fTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZXMoKSB7XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5ib29rLmdldFBhZ2UoKSwgcGFnZXMgPSB0aGlzLmJvb2suZ2V0UGFnZXMoKTtcclxuICAgIHJldHVybiBwYWdlPT09MCB8fCBwYWdlPT09cGFnZXMtMT8gW3BhZ2VdOiBbcGFnZSwgcGFnZSsxXTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBmb3IobGV0IHcgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLndyYXBwZXJzKSkge1xyXG4gICAgICB3LmxheWVycy5mb3JFYWNoKChsKT0+IGwuZGlzcG9zZSgpKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLndyYXBwZXJzO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XHJcbiAgICBmb3IobGV0IG4gb2YgdGhpcy5nZXRBY3RpdmVzKCkpIHtcclxuICAgICAgY29uc3QgdyA9IHRoaXMud3JhcHBlcnNbbl07XHJcbiAgICAgIGlmKHcpIHtcclxuICAgICAgICBpZih3LnN0YXRlPT09J3JlYWR5JyAmJiB3LmxheWVycy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5ib29rLmdldEJsb2NrQnlQYWdlKG4pO1xyXG4gICAgICAgICAgdy5sYXllcnMuZm9yRWFjaCgobCk9PiB7XHJcbiAgICAgICAgICAgIGlmKGwuaXNIaWRkZW4oKSkge1xyXG4gICAgICAgICAgICAgIGwudXBkYXRlKGJsb2NrKTtcclxuICAgICAgICAgICAgICBsLnNob3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLndyYXBwZXJzW25dID0ge1xyXG4gICAgICAgICAgc3RhdGU6ICdsb2FkaW5nJyxcclxuICAgICAgICAgIGxheWVyczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyLmdldExheWVycyhuLCAobGF5ZXJzKT0+IHtcclxuICAgICAgICAgICAgaWYobGF5ZXJzLmxlbmd0aCAmJiB0aGlzLndyYXBwZXJzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmJvb2suZ2V0QmxvY2tCeVBhZ2Uobik7XHJcbiAgICAgICAgICAgICAgZm9yKGxldCBsIG9mIGxheWVycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2wgPSBuZXcgU2hlZXRDc3NMYXllcih0aGlzLnZpc3VhbCwgYmxvY2ssIHRoaXMucHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdy5sYXllcnMucHVzaChzbCk7XHJcbiAgICAgICAgICAgICAgICBzbC5zZXQobC5jc3MsIGwuaHRtbCwgbC5qcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighdGhpcy5oaWRkZW4gJiYgfnRoaXMuZ2V0QWN0aXZlcygpLmluZGV4T2YobikpIHtcclxuICAgICAgICAgICAgICAgICAgdy5sYXllcnMuZm9yRWFjaCgobCk9PiBsLnNob3coKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHcuc3RhdGUgPSAncmVhZHknO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcclxuICAgIGNvbnN0IHdhaXQgPSBbXTtcclxuICAgIGZvcihsZXQgdyBvZiBPYmplY3QudmFsdWVzKHRoaXMud3JhcHBlcnMpKSB7XHJcbiAgICAgIHcubGF5ZXJzLmZvckVhY2goKGwpPT4gd2FpdC5wdXNoKGwuaGlkZSgpKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdCk7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQ3NzTGF5ZXJzTWFuYWdlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL2NsYXNzZXMvQ3NzTGF5ZXJzTWFuYWdlci5qcyIsImltcG9ydCB7JCwgVEhSRUV9IGZyb20gJy4uL2xpYnMnXHJcbmltcG9ydCBDYWNoZSBmcm9tICdDYWNoZSc7XHJcbmltcG9ydCBMb2FkaW5nQW5pbWF0aW9uIGZyb20gJ0xvYWRpbmdBbmltYXRpb24nO1xyXG5pbXBvcnQgSW1hZ2VGYWN0b3J5IGZyb20gJ0ltYWdlRmFjdG9yeSc7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJ0Jhc2VNYXRoVXRpbHMnO1xyXG5pbXBvcnQgVGV4dHVyZUFuaW1hdG9yIGZyb20gJ1RleHR1cmVBbmltYXRvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdlTWFuYWdlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgYm9vaywgcCkge1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLmJvb2sgPSBib29rO1xyXG4gICAgdGhpcy5wYWdlUXVlcnkgPSAnJztcclxuICAgIHRoaXMucCA9IHA7XHJcbiAgICB0aGlzLnBhZ2VDYWNoZSA9IG5ldyBDYWNoZShwLmNhY2hlZFBhZ2VzKTtcclxuICAgIHRoaXMucmVzb3VyY2VzQ2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxuICAgIHRoaXMuY2FudmFzID0gJCgnPGNhbnZhcz4nKVswXTtcclxuICAgIHRoaXMuaW1hZ2VGYWN0b3J5ID0gbmV3IEltYWdlRmFjdG9yeSh7Li4udmlzdWFsLCBkaXNwYXRjaEV2ZW50OiBib29rLmRpc3BhdGNoRXZlbnQuYmluZChib29rKSwgcmVuZGVyQ2FudmFzOiB0aGlzLmNhbnZhcywgcmVuZGVyQ2FudmFzQ3R4OiB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpfSwgdGhpcy5yZXNvdXJjZXNDYWNoZSk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5ncyA9IFtdO1xyXG4gICAgdGhpcy5yZW5kZXJRdWV1ZSA9IFtdO1xyXG4gICAgdGhpcy5wYWdlUmVxdWVzdHMgPSBbXTtcclxuICAgIHRoaXMucHJlZGljdGVkUmVxdWVzdHMgPSBbXTtcclxuXHJcbiAgICB0aGlzLnRtcE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCk7XHJcbiAgICB2aXN1YWwuYWRkT2JqZWN0KG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDAsIDApLCB0aGlzLnRtcE1hdGVyaWFsKSk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGluZyA9IHt9O1xyXG4gICAgdGhpcy5sb2FkaW5nW3AuY292ZXIuY29sb3JdID0gdGhpcy5jcmVhdGVMb2FkaW5nVGV4dHVyZShwLmNvdmVyKTtcclxuICAgIGlmKHAucGFnZS5jb2xvciE9PXAuY292ZXIuY29sb3IpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nW3AucGFnZS5jb2xvcl0gPSB0aGlzLmNyZWF0ZUxvYWRpbmdUZXh0dXJlKHAucGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50dXJuT25FdmVudHMoKTtcclxuXHJcbiAgICB2aXN1YWwuYWRkUmVuZGVyQ2FsbGJhY2sodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVMb2FkaW5nVGV4dHVyZShwKSB7XHJcbiAgICBjb25zdCBzcHJpdGVUaWxlcyA9IDYsXHJcbiAgICAgIHNjYWxlID0gTWF0aC5zcXJ0KDQuNSoyMTAqNC41KjI5Ny8ocC53aWR0aFRleGVscypwLmhlaWdodFRleGVscykpLFxyXG4gICAgICBhbmltYXRpb24gPSBuZXcgTG9hZGluZ0FuaW1hdGlvbihzY2FsZSpwLndpZHRoVGV4ZWxzLCBzY2FsZSpwLmhlaWdodFRleGVscywgcC5jb2xvciksXHJcbiAgICAgIGFuaW1hdG9yID0gbmV3IFRleHR1cmVBbmltYXRvcihhbmltYXRpb24uY3JlYXRlU3ByaXRlKHNwcml0ZVRpbGVzKSwgc3ByaXRlVGlsZXMsIDEsIHNwcml0ZVRpbGVzLCAwLjIpO1xyXG4gICAgYW5pbWF0aW9uLmRpc3Bvc2UoKTtcclxuICAgIHJldHVybiBhbmltYXRvcjtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnR1cm5PZmZFdmVudHMoKTtcclxuICAgIGZvcihsZXQgY29sb3Igb2YgT2JqZWN0LmtleXModGhpcy5sb2FkaW5nKSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdbY29sb3JdLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLmxvYWRpbmc7XHJcbiAgICB0aGlzLnJlc291cmNlc0NhY2hlLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMucGFnZUNhY2hlLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuY2FudmFzLndpZHRoID0gMDtcclxuICAgIGRlbGV0ZSB0aGlzLmNhbnZhcztcclxuICB9XHJcblxyXG4gIGlzQ292ZXIobikge1xyXG4gICAgcmV0dXJuIG48MiB8fCBuPj0yKih0aGlzLnAuc2hlZXRzKzEpO1xyXG4gIH1cclxuXHJcbiAgaXNNb2JpbGUoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMudmlzdWFsLnduZC5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpPjE7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlU3RhdGUobikge1xyXG4gICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5wYWdlQ2FjaGUuZ2V0KG4pO1xyXG4gICAgcmV0dXJuIG9iamVjdD8gb2JqZWN0LnN0YXRlOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbmFibGVMb2FkaW5nQW5pbWF0aW9uKGVuYWJsZSkge1xyXG4gICAgdGhpcy5sb2FkaW5nQW5pbWF0aW9uID0gZW5hYmxlO1xyXG4gICAgZm9yKGxldCBvIG9mIHRoaXMubG9hZGluZ3MpIHtcclxuICAgICAgdGhpcy5zZXR1cE1hdGVyaWFsKG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGR0KSB7XHJcbiAgICBpZih0aGlzLmxvYWRpbmdBbmltYXRpb24pIHtcclxuICAgICAgY29uc3QgbG9hZGluZyA9IHt9O1xyXG4gICAgICBmb3IobGV0IG8gb2YgdGhpcy5sb2FkaW5ncykge1xyXG4gICAgICAgIGlmKG8uaXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgbG9hZGluZ1tvLmNvbG9yXSA9IHRydWU7O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IGNvbG9yIG9mIE9iamVjdC5rZXlzKGxvYWRpbmcpKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nW2NvbG9yXS51cGRhdGUoZHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGcm9tTG9hZGluZ3Mobykge1xyXG4gICAgY29uc3QgaSA9IHRoaXMubG9hZGluZ3MuaW5kZXhPZihvKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ3Muc3BsaWNlKGksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRnJvbVJlbmRlclF1ZXVlKG8pIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnJlbmRlclF1ZXVlLmluZGV4T2Yobyk7XHJcbiAgICBpZih+aSkge1xyXG4gICAgICB0aGlzLnJlbmRlclF1ZXVlLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hQYWdlUXVlcnkobiwgcXVlcnk9JycpIHtcclxuICAgIHRoaXMucGFnZVF1ZXJ5ID0gcXVlcnk7XHJcbiAgICBjb25zdCBvYmplY3QgPSB0aGlzLnBhZ2VDYWNoZS5nZXQobik7XHJcbiAgICBpZihvYmplY3QgJiYgb2JqZWN0LndyYXBwZXIgJiYgb2JqZWN0LndyYXBwZXIuc2V0UXVlcnkpIHtcclxuICAgICAgaWYoIXRoaXMucGFnZUNhY2hlLnJlbW92ZShuKSkge1xyXG4gICAgICAgIG9iamVjdC53cmFwcGVyLnNldFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICB0aGlzLnB1c2hJblJlbmRlclF1ZXVlKG9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hab29tKCkge1xyXG4gICAgaWYodGhpcy5wLmF1dG9SZXNvbHV0aW9uLmVuYWJsZSkge1xyXG4gICAgICBjb25zdCBlcyA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2VDYWNoZS5mb3JFYWNoKChlKT0+IHtcclxuICAgICAgICBlcy5wdXNoKGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgZXMuZm9yRWFjaCgoZSk9PiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gZVsxXTtcclxuICAgICAgICBpZihvYmplY3QgJiYgb2JqZWN0LndyYXBwZXIpIHtcclxuICAgICAgICAgIGlmKCF0aGlzLnBhZ2VDYWNoZS5yZW1vdmUoZVswXSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoSW5SZW5kZXJRdWV1ZShvYmplY3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYXllcnMobiwgY2xiKSB7XHJcbiAgICBpZih0aGlzLnAuY3NzTGF5ZXJzTG9hZGVyKSB7XHJcbiAgICAgIHRoaXMucC5jc3NMYXllcnNMb2FkZXIobiwgKC4uLmFyZ3MpPT4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMucGFnZUNhY2hlLmdldChuKTtcclxuICAgICAgICBpZihvYmplY3QpIHtcclxuICAgICAgICAgIGlmKG9iamVjdC5zdGF0ZSE9PSdhY3RpdmUnKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5wZW5kaW5ncy5wdXNoKHtjbGIsIGFyZ3N9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjbGIoLi4uYXJncyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjbGIoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZVBlbmRpbmdzKHBlbmRpbmdzKSB7XHJcbiAgICBmb3IobGV0IHAgb2YgcGVuZGluZ3MpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwLmNsYiguLi5wLmFyZ3MpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwZW5kaW5ncy5zcGxpY2UoMCwgcGVuZGluZ3MubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHJ0bFBhZ2VOKG4pIHtcclxuICAgIHJldHVybiB0aGlzLnAucnRsPyAyKih0aGlzLnAuc2hlZXRzKzIpLTEtbjogbjtcclxuICB9XHJcblxyXG4gIGxvYWQobWF0ZXJpYWwsIG4pIHtcclxuICAgIGNvbnN0IHBpID0gdGhpcy5wLnBhZ2VDYWxsYmFjayh0aGlzLnJ0bFBhZ2VOKG4pKSwgcCA9IHRoaXMuaXNDb3ZlcihuKT8gdGhpcy5wLmNvdmVyOiB0aGlzLnAucGFnZTtcclxuICAgIGNvbnN0IG8gPSB7XHJcbiAgICAgIG4sXHJcbiAgICAgIHRleHR1cmU6IG5ldyBUSFJFRS5UZXh0dXJlKCksXHJcbiAgICAgIHdyYXBwZXI6IG51bGwsXHJcbiAgICAgIHN0YXRlOiAnbG9hZGluZycsXHJcbiAgICAgIGxvY2tlZDogKG4pPT4gby5zdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IG8uc3RhdGUgPT09ICdyZW5kZXJpbmcnIHx8IHRoaXMuYm9vay5pc0FjdGl2ZVBhZ2UobiksXHJcbiAgICAgIGNvbG9yOiBwLmNvbG9yLFxyXG4gICAgICBpc0FjdGl2ZTogKCk9PiB0aGlzLmJvb2suaXNBY3RpdmVQYWdlKG4pLFxyXG4gICAgICBpc1RvcDogKCk9PiB+dGhpcy5ib29rLmdldFRvcFBhZ2VzKCkuaW5kZXhPZihuKSxcclxuICAgICAgZGlzcG9zZTogKCk9PiB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tTG9hZGluZ3Mobyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tUmVuZGVyUXVldWUobyk7XHJcbiAgICAgICAgaWYoby53cmFwcGVyICYmIG8ud3JhcHBlci5kaXNwb3NlKSB7XHJcbiAgICAgICAgICBvLndyYXBwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvLnRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvLnRleHR1cmU7XHJcbiAgICAgICAgZGVsZXRlIG8ud3JhcHBlcjtcclxuICAgICAgfSxcclxuICAgICAgcGVuZGluZ3M6IFtdXHJcbiAgICB9O1xyXG4gICAgby50ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICAgIHRoaXMubG9hZGluZ3MucHVzaChvKTtcclxuICAgIHRoaXMuc2V0TWF0ZXJpYWwobywgbWF0ZXJpYWwpO1xyXG5cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgIGlmKG8udGV4dHVyZSkge1xyXG4gICAgICAgIG8ud2lkdGhUZXhlbHMgPSBwaS53aWR0aFRleGVscyB8fCBwLndpZHRoVGV4ZWxzO1xyXG4gICAgICAgIG8uaGVpZ2h0VGV4ZWxzID0gcGkuaGVpZ2h0VGV4ZWxzIHx8IHAuaGVpZ2h0VGV4ZWxzO1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY2FsY1Jlc29sdXRpb24obyk7XHJcbiAgICAgICAgby53cmFwcGVyID0gdGhpcy5pbWFnZUZhY3RvcnkuYnVpbGQocGksIHBpLm51bWJlcj09PXVuZGVmaW5lZD8gbjogcGkubnVtYmVyLCByZXMud2lkdGgsIHJlcy5oZWlnaHQsIHAuY29sb3IsIHRoaXMucC5pbmplY3Rvcik7XHJcbiAgICAgICAgaWYoby53cmFwcGVyLnNldFF1ZXJ5KSB7XHJcbiAgICAgICAgICBvLndyYXBwZXIuc2V0UXVlcnkodGhpcy5wYWdlUXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvLnNpbXVsYXRlID0gcGkuaW50ZXJhY3RpdmU/IChvLndyYXBwZXIuc2ltdWxhdGUgfHwgKCgpPT4gdW5kZWZpbmVkKSkuYmluZChvLndyYXBwZXIpOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgby53cmFwcGVyLm9uTG9hZCA9ICgpPT4ge1xyXG4gICAgICAgICAgdGhpcy5wdXNoSW5SZW5kZXJRdWV1ZShvKTtcclxuICAgICAgICAgIHRoaXMuYm9vay5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgICAgICAgdHlwZTogJ2xvYWRlZFBhZ2UnLFxyXG4gICAgICAgICAgICBwYWdlOiBuXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIG8ud3JhcHBlci5vbkNoYW5nZSA9IChpbWFnZSk9PiB7XHJcbiAgICAgICAgICBpZihvLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tTG9hZGluZ3Mobyk7XHJcbiAgICAgICAgICAgIGlmKG8ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLm1hcCA9IG8udGV4dHVyZTtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKDB4RkZGRkZGKTtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvLnRleHR1cmUuaW1hZ2UgPSBpbWFnZTtcclxuICAgICAgICAgICAgby50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgby50ZXh0dXJlLm9uVXBkYXRlID0gKCk9PiB7XHJcbiAgICAgICAgICAgICAgaWYoby5zdGF0ZSAhPT0gJ3F1ZXVlZEZvclJlbmRlcicpIHtcclxuICAgICAgICAgICAgICAgIG8uc3RhdGUgPSAnYWN0aXZlJztcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVBlbmRpbmdzKG8ucGVuZGluZ3MpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZW5kZXJpbmc7XHJcbiAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZVJlbmRlclF1ZXVlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMudG1wTWF0ZXJpYWwubWFwID0gby50ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLnRtcE1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYm9vay5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgdHlwZTogJ2xvYWRQYWdlJyxcclxuICAgICAgcGFnZTogblxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlQ2FjaGUucHV0KG4sIG8pO1xyXG4gIH1cclxuXHJcbiAgaXNTaW5nbGVQYWdlKG8pIHtcclxuICAgIHJldHVybiB0aGlzLnAuc2luZ2xlUGFnZSB8fCAhby5uIHx8IG8ubj09PXRoaXMuYm9vay5nZXRQYWdlcygpLTE7XHJcbiAgfVxyXG5cclxuICBjYWxjUmVzb2x1dGlvbihvKSB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgaWYodGhpcy5wLmF1dG9SZXNvbHV0aW9uLmVuYWJsZSkge1xyXG4gICAgICBjb25zdCBrID0gTWF0aC5taW4oKHRoaXMuaXNTaW5nbGVQYWdlKG8pPyAxOiAwLjUpKnRoaXMudmlzdWFsLndpZHRoKCkvby53aWR0aFRleGVscywgdGhpcy52aXN1YWwuaGVpZ2h0KCkvby5oZWlnaHRUZXhlbHMpO1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgd2lkdGg6IHRoaXMucC5hdXRvUmVzb2x1dGlvbi5rKnRoaXMucC56b29tKmsqby53aWR0aFRleGVscyxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMucC5hdXRvUmVzb2x1dGlvbi5rKnRoaXMucC56b29tKmsqby5oZWlnaHRUZXhlbHNcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgd2lkdGg6IG8ud2lkdGhUZXhlbHMsXHJcbiAgICAgICAgaGVpZ2h0OiBvLmhlaWdodFRleGVsc1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHB1c2hJblJlbmRlclF1ZXVlKG8pIHtcclxuICAgIGlmKG8uc3RhdGUgIT09ICdxdWV1ZWRGb3JSZW5kZXInKSB7XHJcbiAgICAgIG8uc3RhdGUgPSAncXVldWVkRm9yUmVuZGVyJztcclxuICAgICAgdGhpcy5yZW5kZXJRdWV1ZS5wdXNoKG8pO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZW5kZXJRdWV1ZSgpIHtcclxuICAgIGlmKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnA7XHJcbiAgICAgIGlmKCF0aGlzLnJlbmRlcmluZyAmJiAocC5yZW5kZXJXaGlsZUZsaXBwaW5nIHx8ICF0aGlzLmJvb2suaXNQcm9jZXNzaW5nKCkpKSB7XHJcbiAgICAgICAgbGV0IGFjdGl2ZSwgdG9wO1xyXG4gICAgICAgIGZvcihsZXQgbyBvZiB0aGlzLnJlbmRlclF1ZXVlKSB7XHJcbiAgICAgICAgICBpZighYWN0aXZlICYmIG8uaXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICBhY3RpdmUgPSBvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoby5pc1RvcCgpKSB7XHJcbiAgICAgICAgICAgIHRvcCA9IG87XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRlcmluZyA9IHRvcCB8fCBhY3RpdmU7XHJcbiAgICAgICAgaWYodGhpcy5pc01vYmlsZSgpICYmIHAucmVuZGVySW5hY3RpdmVQYWdlc09uTW9iaWxlIHx8ICF0aGlzLmlzTW9iaWxlKCkgJiYgcC5yZW5kZXJJbmFjdGl2ZVBhZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmluZyA9IHRoaXMucmVuZGVyaW5nIHx8IHRoaXMucmVuZGVyUXVldWVbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICBpZih0aGlzLnJlbmRlcmluZy53cmFwcGVyLnN0YXJ0UmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVJlbmRlclF1ZXVlKHRoaXMucmVuZGVyaW5nKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcuc3RhdGUgPSAncmVuZGVyaW5nJztcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcud3JhcHBlci5zZXRSZXNvbHV0aW9uKHRoaXMuY2FsY1Jlc29sdXRpb24odGhpcy5yZW5kZXJpbmcpKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcud3JhcHBlci5zdGFydFJlbmRlcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmluZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0dXJuT25FdmVudHMoKSB7XHJcbiAgICB0aGlzLnRyYW5zZmVyRXZlbnRzID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHR1cm5PZmZFdmVudHMoKSB7XHJcbiAgICBjb25zdCBtb3VzZXVwID0gJC5FdmVudCgnbW91c2V1cCcpLCBtb3VzZW91dCA9ICQuRXZlbnQoJ21vdXNlb3V0Jyk7XHJcbiAgICB0aGlzLnBhZ2VDYWNoZS5mb3JFYWNoKChlbnQpPT4ge1xyXG4gICAgICBjb25zdCBvYmplY3QgPSBlbnRbMV07XHJcbiAgICAgIGlmKG9iamVjdC5zaW11bGF0ZSkge1xyXG4gICAgICAgIG9iamVjdC5zaW11bGF0ZShtb3VzZXVwLCB1bmRlZmluZWQsIDAsIDApO1xyXG4gICAgICAgIG9iamVjdC5zaW11bGF0ZShtb3VzZW91dCwgdW5kZWZpbmVkLCAwLCAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyYW5zZmVyRXZlbnRzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cmFuc2ZlckV2ZW50VG9UZXh0dXJlKG4sIGUsIGRhdGEpIHtcclxuICAgIGlmKHRoaXMudHJhbnNmZXJFdmVudHMpIHtcclxuICAgICAgY29uc3QgdG9PYmplY3QgPSB0aGlzLmdldE9yTG9hZFRleHR1cmVPYmplY3QodW5kZWZpbmVkLCBuKTtcclxuICAgICAgaWYodG9PYmplY3Qud3JhcHBlcikge1xyXG4gICAgICAgIGNvbnN0IHt1dn0gPSBkYXRhLCB0b0RvYyA9IHRvT2JqZWN0LndyYXBwZXIuZ2V0U2ltdWxhdGVkRG9jKCk7XHJcbiAgICAgICAgdGhpcy5wYWdlQ2FjaGUuZm9yRWFjaCgoZW50KT0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGVudFsxXTtcclxuICAgICAgICAgIGlmKG9iamVjdC5zaW11bGF0ZSkge1xyXG4gICAgICAgICAgICBvYmplY3Quc2ltdWxhdGUoZSwgdG9Eb2MsIHV2LngsIHV2LnkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkUHJlZGljdGVkUGFnZXMoKSB7XHJcbiAgICB0aGlzLnByZWRpY3RlZFJlcXVlc3RzID0gQmFzZU1hdGhVdGlscy5wcmVkaWN0KHRoaXMucGFnZVJlcXVlc3RzLCB0aGlzLnAucHJlbG9hZFBhZ2VzKTtcclxuICAgIGZvcihsZXQgcCBvZiB0aGlzLnByZWRpY3RlZFJlcXVlc3RzKSB7XHJcbiAgICAgIGlmKHA8dGhpcy5ib29rLmdldFBhZ2VzKCkgJiYgIXRoaXMucGFnZUNhY2hlLmdldChwKSkge1xyXG4gICAgICAgIHRoaXMubG9hZCh1bmRlZmluZWQsIHApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRQYWdlUmVxdWVzdChuKSB7XHJcbiAgICB0aGlzLnBhZ2VSZXF1ZXN0cy5wdXNoKG4pO1xyXG4gICAgaWYodGhpcy5wYWdlUmVxdWVzdHMubGVuZ3RoPnRoaXMucC5wYWdlc0ZvclByZWRpY3RpbmcpIHtcclxuICAgICAgdGhpcy5wYWdlUmVxdWVzdHMuc2hpZnQoKTtcclxuICAgIH1cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5sb2FkUHJlZGljdGVkUGFnZXMuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBzZXRNYXRlcmlhbChvLCBtYXRlcmlhbCkge1xyXG4gICAgdGhpcy5wYWdlQ2FjaGUuZm9yRWFjaCgoZSk9PiB7XHJcbiAgICAgIGNvbnN0IG9iID0gZVsxXTtcclxuICAgICAgaWYobyE9PW9iICYmIG9iLm1hdGVyaWFsPT09bWF0ZXJpYWwpIHtcclxuICAgICAgICBkZWxldGUgb2IubWF0ZXJpYWw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYobWF0ZXJpYWwgJiYgbWF0ZXJpYWwhPT1vLm1hdGVyaWFsKSB7XHJcbiAgICAgIG8ubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgdGhpcy5zZXR1cE1hdGVyaWFsKG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBNYXRlcmlhbChvKSB7XHJcbiAgICBvLm1hdGVyaWFsLm1hcCA9IG8udGV4dHVyZS5pbWFnZT8gby50ZXh0dXJlOiAodGhpcy5sb2FkaW5nQW5pbWF0aW9uPyB0aGlzLmxvYWRpbmdbby5jb2xvcl0udGV4dHVyZTogbnVsbCk7XHJcbiAgICBpZighby5tYXRlcmlhbC5tYXApIHtcclxuICAgICAgby5tYXRlcmlhbC5jb2xvciA9IG5ldyBUSFJFRS5Db2xvcihvLmNvbG9yKTtcclxuICAgIH1cclxuICAgIG8ubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JMb2FkVGV4dHVyZU9iamVjdChtYXRlcmlhbCwgbikge1xyXG4gICAgbGV0IG9iamVjdCA9IHRoaXMucGFnZUNhY2hlLmdldChuKTtcclxuICAgIGlmKCFvYmplY3QpIHtcclxuICAgICAgb2JqZWN0ID0gdGhpcy5sb2FkKG1hdGVyaWFsLCBuKTtcclxuICAgICAgdGhpcy5hZGRQYWdlUmVxdWVzdChuKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNldE1hdGVyaWFsKG9iamVjdCwgbWF0ZXJpYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0dXJlKG1hdGVyaWFsLCBuKSB7XHJcbiAgICBpZih+dGhpcy5wcmVkaWN0ZWRSZXF1ZXN0cy5pbmRleE9mKG4pKSB7XHJcbiAgICAgIHRoaXMuYWRkUGFnZVJlcXVlc3Qobik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldE9yTG9hZFRleHR1cmVPYmplY3QobWF0ZXJpYWwsIG4pO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1BhZ2VNYW5hZ2VyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9QYWdlTWFuYWdlci5qcyIsImltcG9ydCBCb29rUHJvcHNCdWlsZGVyIGZyb20gJy4vQm9va1Byb3BzQnVpbGRlcic7XHJcbmltcG9ydCBQZGYgZnJvbSAnUGRmJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBkZkJvb2tQcm9wc0J1aWxkZXIgZXh0ZW5kcyBCb29rUHJvcHNCdWlsZGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Ioc3JjLCBvblJlYWR5KSB7XHJcbiAgICBzdXBlcihvblJlYWR5KTtcclxuICAgIHRoaXMucGRmID0gbmV3IFBkZihzcmMpO1xyXG4gICAgdGhpcy5wYWdlRGVzY3JpcHRpb24gPSB7XHJcbiAgICAgIHR5cGU6ICdwZGYnLFxyXG4gICAgICBzcmM6IHRoaXMucGRmLFxyXG4gICAgICBpbnRlcmFjdGl2ZTogdHJ1ZVxyXG4gICAgfTtcclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIHBhZ2VDYWxsYmFjazogdGhpcy5wYWdlQ2FsbGJhY2suYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgIHRoaXMucGRmLmdldEhhbmRsZXIodGhpcy5pbml0LmJpbmQodGhpcykpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMucGRmLmRpc3Bvc2UoKTtcclxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIGluaXQoaGFuZGxlcikge1xyXG4gICAgY29uc3QgcGFnZXMgPSB0aGlzLnBkZi5nZXRQYWdlc051bSgpO1xyXG4gICAgdGhpcy5jYWxjU2hlZXRzKHBhZ2VzKTtcclxuICAgIGlmKHBhZ2VzPjApIHtcclxuICAgICAgaGFuZGxlci5nZXRQYWdlKDEpLlxyXG4gICAgICB0aGVuKChwYWdlKT0+IHtcclxuICAgICAgICBjb25zdCBzaXplID0gUGRmLmdldFBhZ2VTaXplKHBhZ2UpO1xyXG4gICAgICAgIHRoaXMuY2FsY1Byb3BzKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLnJlYWR5KCk7XHJcbiAgICAgIH0pLlxyXG4gICAgICBjYXRjaCgoZSk9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5wcm9wcyA9IHRoaXMuZGVmYXVsdHM7XHJcbiAgICAgIHRoaXMucmVhZHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBhZ2VDYWxsYmFjayhuKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlRGVzY3JpcHRpb247XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1BkZkJvb2tQcm9wc0J1aWxkZXIuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9qcy9jbGFzc2VzL1BkZkJvb2tQcm9wc0J1aWxkZXIuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZGZMaW5rc0hhbmRsZXIge1xyXG5cclxuICBjb25zdHJ1Y3RvcihwZGYsIGN0cmwsIGVsZW1lbnQpIHtcclxuICAgIHRoaXMucGRmID0gcGRmO1xyXG4gICAgdGhpcy5jdHJsID0gY3RybDtcclxuICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7XHJcbiAgICB0aGlzLmN1cnNvcnMgPSBbXTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgc2V0SGFuZGxlcihoYW5kbGVyKSB7XHJcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xyXG4gIH1cclxuXHJcbiAgZGVmYXVsdEhhbmRsZXIodHlwZSwgZGVzdGluYXRpb24pIHtcclxuICAgIGlmKHR5cGU9PT0naW50ZXJuYWwnKSB7XHJcbiAgICAgIHRoaXMuY3RybC5nb1RvUGFnZShkZXN0aW5hdGlvbik7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHR5cGU9PT0nZXh0ZXJuYWwnKSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGRlc3RpbmF0aW9uLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYWxsSGFuZGxlcnModHlwZSwgZGVzdGluYXRpb24pIHtcclxuICAgIGlmKCF0aGlzLmhhbmRsZXIgfHwgIXRoaXMuaGFuZGxlcih0eXBlLCBkZXN0aW5hdGlvbikpIHtcclxuICAgICAgdGhpcy5kZWZhdWx0SGFuZGxlcih0eXBlLCBkZXN0aW5hdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVFdmVudChkYXRhKSB7XHJcbiAgICBjb25zdCBlID0gZGF0YS5ldmVudCwgYW5ubyA9IGRhdGEuYW5ub3RhdGlvbjtcclxuICAgIHN3aXRjaChlLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbW91c2VvdmVyJzoge1xyXG4gICAgICAgIHRoaXMuY3Vyc29ycy5wdXNoKHRoaXMuZWxlbWVudC5jc3MoJ2N1cnNvcicpKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQuY3NzKCdjdXJzb3InLCAncG9pbnRlcicpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21vdXNlb3V0Jzoge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5jc3MoJ2N1cnNvcicsIHRoaXMuY3Vyc29ycy5wb3AoKSB8fCAnJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAndG91Y2h0YXAnOlxyXG4gICAgICBjYXNlICdjbGljayc6IHtcclxuICAgICAgICBpZihhbm5vLnVybCkge1xyXG4gICAgICAgICAgdGhpcy5jYWxsSGFuZGxlcnMoJ2V4dGVybmFsJywgYW5uby51cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGFubm8uZGVzdCkge1xyXG4gICAgICAgICAgbGV0IGRlc3RQcm9taXNlO1xyXG4gICAgICAgICAgaWYodHlwZW9mIGFubm8uZGVzdD09PSdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGRlc3RQcm9taXNlID0gdGhpcy5wZGYuaGFuZGxlci5nZXREZXN0aW5hdGlvbihhbm5vLmRlc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlc3RQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGFubm8uZGVzdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkZXN0UHJvbWlzZS5cclxuICAgICAgICAgICAgdGhlbigoZGVzdCk9PiB0eXBlb2YgZGVzdFswXT09PSdudW1iZXInPyBkZXN0WzBdOiB0aGlzLnBkZi5oYW5kbGVyLmdldFBhZ2VJbmRleChkZXN0WzBdKSkuXHJcbiAgICAgICAgICAgIHRoZW4oKG51bWJlcik9PiB0aGlzLmNhbGxIYW5kbGVycygnaW50ZXJuYWwnLCBudW1iZXIpKS5cclxuICAgICAgICAgICAgY2F0Y2goKCk9PiBjb25zb2xlLmVycm9yKCdCYWQgbGluaycpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvUGRmTGlua3NIYW5kbGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9QZGZMaW5rc0hhbmRsZXIuanMiLCJpbXBvcnQgRmluZGVyIGZyb20gJ0ZpbmRlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2hFbmdpbmUge1xyXG4gIGNvbnN0cnVjdG9yKHBhZ2VDYWxsYmFjaywgcGFnZXMpIHtcclxuICAgIHRoaXMucGFnZUNhbGxiYWNrID0gcGFnZUNhbGxiYWNrO1xyXG4gICAgdGhpcy5wYWdlcyA9IHBhZ2VzO1xyXG4gICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgfVxyXG5cclxuICBzZXRRdWVyeShxdWVyeSkge1xyXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xyXG4gICAgdGhpcy51cGRhdGUgPSB0cnVlO1xyXG4gICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzKCkge1xyXG4gICAgaWYodGhpcy51cGRhdGUpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucmVzdWx0cztcclxuICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgIGlmKHRoaXMub25QYWdlSGl0c0NoYW5nZWQpIHtcclxuICAgICAgICBmb3IobGV0IHJlcyBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUGFnZUhpdHNDaGFuZ2VkKHVuZGVmaW5lZCwgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBhZ2UgPSAwO1xyXG4gICAgICB0aGlzLnN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgaWYodGhpcy5xdWVyeS5sZW5ndGg+MSkge1xyXG4gICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYodGhpcy5wYWdlPHRoaXMucGFnZXMpIHtcclxuICAgICAgICBjb25zdCBzdGFtcCA9IHRoaXMuc3RhbXA7XHJcbiAgICAgICAgdGhpcy5maW5kKHRoaXMucGFnZUNhbGxiYWNrKHRoaXMucGFnZSkpLlxyXG4gICAgICAgICAgdGhlbigoY29udGV4dHMpPT4ge1xyXG4gICAgICAgICAgICBpZihzdGFtcCA9PT0gdGhpcy5zdGFtcCkge1xyXG4gICAgICAgICAgICAgIGlmKGNvbnRleHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRleHRzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKyt0aGlzLnBhZ2U7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5vblBhZ2VIaXRzQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VIaXRzQ2hhbmdlZCh0aGlzLnBhZ2UsIHRoaXMucXVlcnkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbmQocGkpIHtcclxuICAgIGxldCBuZXh0O1xyXG4gICAgaWYocGkudHlwZT09PSdwZGYnKSB7XHJcbiAgICAgIG5leHQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PiB7XHJcbiAgICAgICAgcGkuc3JjLmdldEhhbmRsZXIoKCk9PiB7XHJcbiAgICAgICAgICBjb25zdCBuID0gcGkubnVtYmVyPT09dW5kZWZpbmVkPyB0aGlzLnBhZ2U6IHBpLm51bWJlcjtcclxuICAgICAgICAgIGlmKHBpLnNyYy5nZXRQYWdlVHlwZShuKT09PSdyaWdodCcpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcGkuc3JjLmdldFBhZ2UobikuXHJcbiAgICAgICAgICAgIHRoZW4oKHBhZ2UpPT4ge1xyXG4gICAgICAgICAgICAgIHBhZ2UuZ2V0VGV4dENvbnRlbnQoKS5cclxuICAgICAgICAgICAgICB0aGVuKCh0ZXh0Q29udGVudCk9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBGaW5kZXIodGV4dENvbnRlbnQuaXRlbXMubWFwKChpdGVtKT0+IGl0ZW0uc3RyKSwgdGhpcy5xdWVyeSwge2hpdHM6IGZhbHNlfSkuZ2V0Q29udGV4dHMoKSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICBjYXRjaCgoKT0+IHJlc29sdmUoW10pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbmV4dCA9IFByb21pc2UucmVzb2x2ZShbXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvU2VhcmNoRW5naW5lLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9TZWFyY2hFbmdpbmUuanMiLCJpbXBvcnQgQ1NTTGF5ZXIgZnJvbSAnQ1NTTGF5ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlZXRDc3NMYXllciB7XHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBibG9jaywgcHJvcHMpIHtcclxuICAgIHRoaXMudmlzdWFsID0gdmlzdWFsO1xyXG4gICAgY29uc3Qgc2l6ZSA9IGJsb2NrLmdldFRvcFNpemUoKTtcclxuICAgIHRoaXMubGF5ZXIgPSBuZXcgQ1NTTGF5ZXIoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIHByb3BzKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZShibG9jayk7XHJcbiAgICB0aGlzLnZpc3VhbC5hZGRDc3NPYmplY3QodGhpcy5sYXllcik7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5sYXllci5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLnZpc3VhbC5yZW1vdmVDc3NPYmplY3QodGhpcy5sYXllcik7XHJcbiAgfVxyXG5cclxuICBpc0hpZGRlbigpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyLmlzSGlkZGVuKCk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5ZXIuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyLnNob3coKTtcclxuICB9XHJcblxyXG4gIHNldChjc3MsIGh0bWwsIGpzKSB7XHJcbiAgICB0aGlzLmxheWVyLnNldERhdGEoY3NzLCBodG1sLCBqcyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoYmxvY2spIHtcclxuICAgIHRoaXMuYmxvY2sgPSBibG9jaztcclxuICAgIHRoaXMuYmxvY2suZ2V0VG9wV29ybGRSb3RhdGlvbih0aGlzLmxheWVyLnJvdGF0aW9uKTtcclxuICAgIHRoaXMuYmxvY2suZ2V0VG9wV29ybGRQb3NpdGlvbih0aGlzLmxheWVyLnBvc2l0aW9uKTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9TaGVldENzc0xheWVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9TaGVldENzc0xheWVyLmpzIiwiaW1wb3J0IE1hdGhVdGlscyBmcm9tICdNYXRoVXRpbHMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlZXRQaHlzaWNzIHtcclxuXHJcbiAgc3RhdGljIHRhcmdldEZvcmNlQ2xiKG8sYSx2LGNoKSB7XHJcbiAgICBjb25zdCBsID0gYSp0aGlzLnI7XHJcbiAgICByZXR1cm4gMTAwKnRoaXMubSp0aGlzLmcqKDIvKDErTWF0aC5leHAoMTAqKGwtdGhpcy50bCkpKS0xKS10aGlzLm0qNDAqdjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBob3ZlckNvcm5lckZvcmNlQ2xiKG8sdixsLGNoKSB7XHJcbiAgICByZXR1cm4gNTtcclxuICB9XHJcblxyXG4gIGdldFRhcmdldEZvcmNlQ2xiKG1hc3MsIHRhcmdldEFuZ2xlKSB7XHJcbiAgICByZXR1cm4gU2hlZXRQaHlzaWNzLnRhcmdldEZvcmNlQ2xiLmJpbmQoe1xyXG4gICAgICBnOiB0aGlzLnAuZ3Jhdml0eSxcclxuICAgICAgbTogbWFzcyxcclxuICAgICAgdGw6IHRhcmdldEFuZ2xlKnRoaXMucC5yLFxyXG4gICAgICByOiB0aGlzLnAuclxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZHJhZ0ZvcmNlQ2xiKG8sYSx2LGNoKSB7XHJcbiAgICByZXR1cm4gby5mbGJ0Km8ubSooMTAqby5nKmNoLTUwKnYvKDErTWF0aC5leHAoMy41Kk1hdGguYWJzKGNoKSkpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkcmFnQ29ybmVyRm9yY2VDbGIobyxhLHYsY2gpIHtcclxuICAgIHJldHVybiAxNSooMi8oMStNYXRoLmV4cCgxMCooYS10aGlzLnRhKSpvLnIpKS0xKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXREcmFnQ29ybmVyRm9yY2VDbGIodGFyZ2V0QW5nbGUpIHtcclxuICAgIHJldHVybiBTaGVldFBoeXNpY3MuZHJhZ0Nvcm5lckZvcmNlQ2xiLmJpbmQoe1xyXG4gICAgICB0YTogdGFyZ2V0QW5nbGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3Iocj0xLCBncmF2aXR5PTEsIGNvcm5lckRldmlhdGlvbj0wLjE1LCBmcHM9MjQwKSB7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIHIsXHJcbiAgICAgIGNvcm5lckRldmlhdGlvbixcclxuICAgICAgbDogTWF0aC5QSSpyLFxyXG4gICAgICBzdGFydER0OiAxL2ZwcyxcclxuICAgICAgZ3Jhdml0eSxcclxuICAgICAgbWFyZ2luOiAwLjAwMipyLFxyXG4gICAgICBpbmZNOiAxZTQsXHJcbiAgICAgIGF0dGVtcHRzOiAxNixcclxuICAgICAgbWF4SXRlcmF0aW9uczogMTAwXHJcbiAgICB9O1xyXG4gICAgdGhpcy5vcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMub3MgPSBbXTtcclxuICB9XHJcblxyXG4gIGdldFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBhZGRPYmplY3QobWFzcywgYW5nbGUsIHZlbG9jaXR5LCBmbGV4aWJpbGl0eSwgY29ybmVySGVpZ2h0LCBzaW11bGF0ZUNsYiwgcmVtb3ZlQ2xiLCBmb3JjZUNsYj0oKT0+IDAsIGNvcm5lckZvcmNlQ2xiPSgpPT4gMCkge1xyXG4gICAgY29uc3Qgbm8gPSB7XHJcbiAgICAgIGlkOiBNYXRoVXRpbHMuZ2V0VW5pcXVlKCksXHJcbiAgICAgIG06IG1hc3MsXHJcbiAgICAgIHY6IHZlbG9jaXR5LFxyXG4gICAgICBsOiBhbmdsZSp0aGlzLnAucixcclxuICAgICAgZjogZm9yY2VDbGIsXHJcbiAgICAgIGNmOiBjb3JuZXJGb3JjZUNsYixcclxuICAgICAgY2g6IGNvcm5lckhlaWdodCxcclxuICAgICAgZmxidDogZmxleGliaWxpdHksXHJcbiAgICAgIHNpbXVsYXRlQ2xiLFxyXG4gICAgICByZW1vdmVDbGJcclxuICAgIH07XHJcbiAgICBsZXQgaSA9IHRoaXMub3MuZmluZEluZGV4KChvKT0+IG5vLmw8PW8ubCk7XHJcbiAgICBpID0gfmk/IGk6IHRoaXMub3MubGVuZ3RoO1xyXG4gICAgdGhpcy5vcy5zcGxpY2UoaSwgMCwgbm8pO1xyXG4gICAgcmV0dXJuIG5vLmlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyYW1ldHJNYXAobmFtZSkge1xyXG4gICAgY29uc3QgbWFwID0ge1xyXG4gICAgICBtYXNzOiAnbScsXHJcbiAgICAgIHZlbG9jaXR5OiAndicsXHJcbiAgICAgIGZsZXhpYmlsaXR5OiAnZmxidCcsXHJcbiAgICAgIGNvcm5lckhlaWdodDogJ2NoJyxcclxuICAgICAgc2ltdWxhdGVDbGI6ICdzaW11bGF0ZUNsYicsXHJcbiAgICAgIHJlbW92ZUNsYjogJ3JlbW92ZUNsYicsXHJcbiAgICAgIGZvcmNlQ2xiOiAnZicsXHJcbiAgICAgIGNvcm5lckZvcmNlQ2xiOiAnY2YnXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG1hcFtuYW1lXTtcclxuICB9XHJcblxyXG4gIHNldFBhcmFtZXRyKGlkLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgY29uc3QgbyA9IHRoaXMub3MuZmluZCgobyk9PiBvLmlkPT09aWQpO1xyXG4gICAgaWYobmFtZSA9PT0gJ2FuZ2xlJykge1xyXG4gICAgICBvLmwgPSB2YWx1ZSp0aGlzLnAucjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBvW3RoaXMuZ2V0UGFyYW1ldHJNYXAobmFtZSldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYXJhbWV0cihpZCwgbmFtZSkge1xyXG4gICAgY29uc3QgbyA9IHRoaXMub3MuZmluZCgobyk9PiBvLmlkPT09aWQpO1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgaWYobmFtZSA9PT0gJ2FuZ2xlJykge1xyXG4gICAgICB2YWx1ZSA9IG8ubC90aGlzLnAucjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB2YWx1ZSA9IG9bdGhpcy5nZXRQYXJhbWV0ck1hcChuYW1lKV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBzaW11bGF0ZShUKSB7XHJcbiAgICBsZXQgdD0wLFxyXG4gICAgICAgIGR0PXRoaXMucC5zdGFydER0LFxyXG4gICAgICAgIGF0dGVtcHQ9MCxcclxuICAgICAgICBpdD0wO1xyXG5cclxuICAgIHdoaWxlKHQ8VCAmJiBpdDx0aGlzLnAubWF4SXRlcmF0aW9ucykge1xyXG4gICAgICBpZihkdD5ULXQpIHtcclxuICAgICAgICBkdCA9IFQtdDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBub3MgPSB0aGlzLmludGVncmF0ZSh0aGlzLm9zLCBkdCksXHJcbiAgICAgICAgICAgIGNpID0gdGhpcy5maW5kQ29sbGlzaW9ucyhub3MpO1xyXG4gICAgICBpZihjaS5udW0+MSAmJiBhdHRlbXB0PHRoaXMucC5hdHRlbXB0cykge1xyXG4gICAgICAgIGR0Lz0yO1xyXG4gICAgICAgICsrYXR0ZW1wdDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZihjaS5udW09PT0xKSB7XHJcbiAgICAgICAgICBjb25zdCBzY29zID0gdGhpcy5zb2x2ZUNvbGxpc2lvbihub3NbY2kubGFzdC0xXSwgbm9zW2NpLmxhc3RdKTtcclxuICAgICAgICAgIG5vc1tjaS5sYXN0LTFdID0gc2Nvc1swXTtcclxuICAgICAgICAgIG5vc1tjaS5sYXN0XSA9IHNjb3NbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoY2kubnVtPjEpIHtcclxuICAgICAgICAgIGNvbnN0IGdzID0gW107XHJcbiAgICAgICAgICBsZXQgbGFzdCA9IC0yO1xyXG4gICAgICAgICAgZm9yKGxldCBpIG9mIGNpLmFsbCkge1xyXG4gICAgICAgICAgICBpZihpLWxhc3Q+MSkge1xyXG4gICAgICAgICAgICAgIGdzLnB1c2goW10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGdzW2dzLmxlbmd0aC0xXS5wdXNoKGkpO1xyXG4gICAgICAgICAgICBsYXN0ID0gaTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvcihsZXQgZyBvZiBncykge1xyXG4gICAgICAgICAgICBsZXQgc2csIGkwO1xyXG4gICAgICAgICAgICBpZihub3NbZ1swXV0ubD5NYXRoLlBJLzIqdGhpcy5wLnIpIHtcclxuICAgICAgICAgICAgICBzZyA9IC0xO1xyXG4gICAgICAgICAgICAgIGkwID0gZ1tnLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBzZyA9IDE7XHJcbiAgICAgICAgICAgICAgaTAgPSBnWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT1pMDsgaTxub3MubGVuZ3RoICYmIGk+LTE7IGkrPXNnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbyA9IG5vc1tpK3NnXTtcclxuICAgICAgICAgICAgICBpZihvICYmIHNnKihvLmwtbm9zW2ldLmwpPD10aGlzLnAubWFyZ2luKSB7XHJcbiAgICAgICAgICAgICAgICBvLmw9bm9zW2ldLmwrc2cqMip0aGlzLnAubWFyZ2luO1xyXG4gICAgICAgICAgICAgICAgaWYoby5sPnRoaXMucC5sIHx8IG8ubDwwKSB7XHJcbiAgICAgICAgICAgICAgICAgIG8ubCA9IG8ubD50aGlzLnAubD8gdGhpcy5wLmw6IDA7XHJcbiAgICAgICAgICAgICAgICAgIG8uY2ggPSAwO1xyXG4gICAgICAgICAgICAgICAgICBvLnY9MDtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQmFkIGNvbGxpc2lvbicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9zID0gbm9zO1xyXG4gICAgICAgIHRoaXMuZmluZEFuZFNvbHZlQ29ybmVyQ29sbGlzaW9ucygpO1xyXG4gICAgICAgIHQrPWR0O1xyXG4gICAgICAgIGR0PXRoaXMucC5zdGFydER0O1xyXG4gICAgICAgIGF0dGVtcHQ9MDtcclxuICAgICAgfVxyXG4gICAgICArK2l0O1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVtb3ZlU3RhdGljcygpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU3RhdGljcygpIHtcclxuICAgIGNvbnN0IG5vcyA9IFtdLCBub3RpZnkgPSBbW10sW11dO1xyXG4gICAgZm9yKGxldCBvIG9mIHRoaXMub3MpIHtcclxuICAgICAgaWYoby5zaW11bGF0ZUNsYikge1xyXG4gICAgICAgIG8uc2ltdWxhdGVDbGIoby5sL3RoaXMucC5yLCBvLmNoKTtcclxuICAgICAgfVxyXG4gICAgICBpZigoby5sPT09dGhpcy5wLmwgfHwgby5sPT09MCkgJiYgby52PT09MCkge1xyXG4gICAgICAgIGlmKG8ucmVtb3ZlQ2xiICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIG5vdGlmeVsoby5sIT09dGhpcy5wLmwpKzBdLnB1c2gobyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG5vcy5wdXNoKG8pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm9zID0gbm9zO1xyXG4gICAgZm9yKGxldCBvIG9mIG5vdGlmeVswXS5yZXZlcnNlKCkpIHtcclxuICAgICAgby5yZW1vdmVDbGIoTWF0aC5QSSwgby5jaCk7XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IG8gb2Ygbm90aWZ5WzFdKSB7XHJcbiAgICAgIG8ucmVtb3ZlQ2xiKDAsIG8uY2gpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEFuZFNvbHZlQ29ybmVyQ29sbGlzaW9ucygpIHtcclxuICAgIGlmKHRoaXMub3MubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IG9zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIC4uLnRoaXMub3NbMF0sXHJcbiAgICAgICAgICBsOiAwLFxyXG4gICAgICAgICAgbTogdGhpcy5wLmluZk0sXHJcbiAgICAgICAgICBjaDogMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4udGhpcy5vcyxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAuLi50aGlzLm9zWzBdLFxyXG4gICAgICAgICAgbDogMS4wNSp0aGlzLnAubCxcclxuICAgICAgICAgIG06IHRoaXMucC5pbmZNLFxyXG4gICAgICAgICAgY2g6IDBcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcblxyXG4gICAgICBmb3IobGV0IGk9MTsgaTxvcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgIGNvbnN0IGE9b3NbaS0xXSwgYj1vc1tpXSxcclxuICAgICAgICAgICAgICBhbD1hLmwrdGhpcy5wLmNvcm5lckRldmlhdGlvbiphLmNoKnRoaXMucC5yLFxyXG4gICAgICAgICAgICAgIGJsPWIubCt0aGlzLnAuY29ybmVyRGV2aWF0aW9uKmIuY2gqdGhpcy5wLnI7XHJcbiAgICAgICAgaWYoMS4wNSphbD5ibCAmJiBhLmNoPmIuY2gpIHtcclxuICAgICAgICAgIGNvbnN0IGRDaCA9IGEuY2gtYi5jaCwgZHY9YS5tL2EuZmxidCtiLm0vYi5mbGJ0LCBrYT1hLm0vYS5mbGJ0L2R2LCBrYj1iLm0vYi5mbGJ0L2R2O1xyXG4gICAgICAgICAgYS5jaD1hLmNoLWtiKmRDaDtcclxuICAgICAgICAgIGIuY2g9Yi5jaCtrYSpkQ2g7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzb2x2ZUNvbGxpc2lvbihhLCBiKSB7XHJcbiAgICBjb25zdCBtbT0oYi5tK2EubSksXHJcbiAgICAgIGF2ID0gKC1hLnYqYi5tK2EubSphLnYrMipiLm0qYi52KS9tbSxcclxuICAgICAgYnYgPSAoYi5tKmIudi1iLnYqYS5tKzIqYS5tKmEudikvbW07XHJcbiAgICByZXR1cm4gW3suLi5hLCB2OiBhdn0sIHsuLi5iLCB2OiBidn1dO1xyXG4gIH1cclxuXHJcbiAgZmluZENvbGxpc2lvbnMob3MpIHtcclxuICAgIGNvbnN0IGNpID0ge1xyXG4gICAgICBudW06IDAsXHJcbiAgICAgIGxhc3Q6IDAsXHJcbiAgICAgIGFsbDogW11cclxuICAgIH07XHJcbiAgICBmb3IobGV0IGkgPSAxOyBpPG9zLmxlbmd0aCAmJiBjaS5udW08MjsgKytpKSB7XHJcbiAgICAgIGlmKG9zW2ktMV0ubD5vc1tpXS5sIHx8IHRoaXMuaXNDb2xsaXNpb24ob3NbaS0xXSwgb3NbaV0pKSB7XHJcbiAgICAgICAgaWYob3NbaS0xXS5sPm9zW2ldLmwpIHtcclxuICAgICAgICAgICsrY2kubnVtO1xyXG4gICAgICAgIH1cclxuICAgICAgICArK2NpLm51bTtcclxuICAgICAgICBjaS5sYXN0ID0gaTtcclxuICAgICAgICBpZihjaS5hbGwuaW5kZXhPZihpLTEpPT09LTEpIHtcclxuICAgICAgICAgIGNpLmFsbC5wdXNoKGktMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNpLmFsbC5pbmRleE9mKGkpPT09LTEpIHtcclxuICAgICAgICAgIGNpLmFsbC5wdXNoKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNpO1xyXG4gIH1cclxuXHJcbiAgaXNDb2xsaXNpb24oYSwgYikge1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKGEubC1iLmwpPHRoaXMucC5tYXJnaW4gJiYgYS52PmIudjtcclxuICB9XHJcblxyXG4gIGludGVncmF0ZShvcywgZHQpIHtcclxuICAgIGNvbnN0IG5vcyA9IFtdO1xyXG4gICAgZm9yKGxldCBvIG9mIG9zKSB7XHJcbiAgICAgIGNvbnN0IHZsID0gTWF0aFV0aWxzLnJrNChcclxuICAgICAgICB0aGlzLmR5LmJpbmQoe1xyXG4gICAgICAgICAgZzogdGhpcy5wLmdyYXZpdHksXHJcbiAgICAgICAgICByOiB0aGlzLnAucixcclxuICAgICAgICAgIG06IG8ubSxcclxuICAgICAgICAgIGY6IG8uZixcclxuICAgICAgICAgIGNmOiBvLmNmLFxyXG4gICAgICAgICAgY2g6IG8uY2gsXHJcbiAgICAgICAgICBmbGJ0OiBvLmZsYnRcclxuICAgICAgICB9KSxcclxuICAgICAgICAwLFxyXG4gICAgICAgIGR0LFxyXG4gICAgICAgIFtvLnYsIG8ubCwgby5jaF1cclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgbm8gPSB7XHJcbiAgICAgICAgLi4ubyxcclxuICAgICAgICB2OiB2bFswXSxcclxuICAgICAgICBsOiB2bFsxXSxcclxuICAgICAgICBjaDogdmxbMl1cclxuICAgICAgfTtcclxuICAgICAgaWYobm8ubDw9MCB8fCBuby5sPj10aGlzLnAubCkge1xyXG4gICAgICAgIG5vLmw9bm8ubDw9MD8gMDogdGhpcy5wLmw7XHJcbiAgICAgICAgbm8udj0wO1xyXG4gICAgICAgIG5vLmNoPTA7XHJcbiAgICAgIH1cclxuICAgICAgbm9zLnB1c2gobm8pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vcztcclxuICB9XHJcblxyXG4gIGR5KHQseSkge1xyXG4gICAgY29uc3Qgdj15WzBdLCBsPXlbMV0sIGNoPXlbMl0sIGY9dGhpcy5mKHRoaXMsbC90aGlzLnIsdixjaCksIGNmPXRoaXMuY2YodGhpcyxsL3RoaXMucix2LGNoKTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICgtdGhpcy5nKk1hdGguY29zKGwvdGhpcy5yKSp0aGlzLm0rZikvdGhpcy5tLFxyXG4gICAgICB2KzAuMDEqKE1hdGgucmFuZG9tKCktMC41KSxcclxuICAgICAgdGhpcy5mbGJ0KigoMi8oMStNYXRoLmV4cCgtMC4yKmNmKSktMSkqKDEtMi8oMStNYXRoLmV4cCgtNSooTWF0aC5hYnMoY2gpLTIpKSkpLWNoKVxyXG4gICAgXTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvU2hlZXRQaHlzaWNzLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9TaGVldFBoeXNpY3MuanMiLCJcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvdW5kc0Vudmlyb21lbnQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZT17fSkge1xyXG4gICAgdGhpcy5zb3VuZHMgPSB0ZW1wbGF0ZS5zb3VuZHMgfHwge307XHJcbiAgICB0aGlzLmF1ZGlvID0ge307XHJcbiAgICBpZih0aGlzLnNvdW5kcy5zdGFydEZsaXApIHtcclxuICAgICAgdGhpcy5hdWRpby5zdGFydEZsaXAgPSBuZXcgQXVkaW8odGhpcy5zb3VuZHMuc3RhcnRGbGlwKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuc291bmRzLmVuZEZsaXApIHtcclxuICAgICAgdGhpcy5hdWRpby5lbmRGbGlwID0gbmV3IEF1ZGlvKHRoaXMuc291bmRzLmVuZEZsaXApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0RW5hYmxlZChlbmFibGVkKSB7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgdG9nbGUoKSB7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSAhdGhpcy5lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGRlbGV0ZSB0aGlzLmF1ZGlvLnN0YXJ0RmxpcDtcclxuICAgIGRlbGV0ZSB0aGlzLmF1ZGlvLmVuZEZsaXA7XHJcbiAgfVxyXG5cclxuICBzdGFydEZsaXAoKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQgJiYgdGhpcy5hdWRpby5zdGFydEZsaXApIHtcclxuICAgICAgdGhpcy5hdWRpby5zdGFydEZsaXAucGxheSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5kRmxpcCgpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCAmJiB0aGlzLmF1ZGlvLnN0YXJ0RmxpcCkge1xyXG4gICAgICB0aGlzLmF1ZGlvLnN0YXJ0RmxpcC5wYXVzZSgpO1xyXG4gICAgICB0aGlzLmF1ZGlvLnN0YXJ0RmxpcC5jdXJyZW50VGltZSA9IDA7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmVuYWJsZWQgJiYgdGhpcy5hdWRpby5lbmRGbGlwKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8uZW5kRmxpcC5wbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVGbGlwcyhlbWl0dGVyKSB7XHJcbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YXJ0RmxpcCcsIHRoaXMuc3RhcnRGbGlwLmJpbmQodGhpcykpO1xyXG4gICAgZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKCdlbmRGbGlwJywgdGhpcy5lbmRGbGlwLmJpbmQodGhpcykpO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Tb3VuZHNFbnZpcm9tZW50LmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vanMvY2xhc3Nlcy9Tb3VuZHNFbnZpcm9tZW50LmpzIiwiaW1wb3J0IFdpZGdldENvbnRyb2xsZXIgZnJvbSAnV2lkZ2V0Q29udHJvbGxlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb2NDb250cm9sbGVyIGV4dGVuZHMgV2lkZ2V0Q29udHJvbGxlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpZXcsIGJvb2tDdHJsKSB7XHJcbiAgICBzdXBlcih2aWV3KTtcclxuICAgIHRoaXMuYm9va0N0cmwgPSBib29rQ3RybDtcclxuICAgIHRoaXMudGFiID0gJ25vbmUnO1xyXG4gIH1cclxuXHJcbiAgc2V0VGh1bWJuYWlscyh0aHVtYm5haWxzKSB7XHJcbiAgICB0aGlzLnRodW1ibmFpbHMgPSB0aHVtYm5haWxzO1xyXG4gICAgdGh1bWJuYWlscy5vbk5hdmlnYXRlID0gdGhpcy5uYXZpZ2F0ZVRodW1ibmFpbHMuYmluZCh0aGlzKTtcclxuICAgIGlmKHRoaXMudGFiID09PSAnbm9uZScpIHtcclxuICAgICAgdGhpcy50YWIgPSAndGh1bWJuYWlscyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHNldFNlYXJjaChzZWFyY2gpIHtcclxuICAgIHRoaXMuc2VhcmNoID0gc2VhcmNoO1xyXG4gICAgc2VhcmNoLm9uTmF2aWdhdGUgPSB0aGlzLm5hdmlnYXRlU2VhcmNoLmJpbmQodGhpcyk7XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHNldEJvb2ttYXJrcyhib29rbWFya3MsIHBkZikge1xyXG4gICAgdGhpcy5ib29rbWFya3MgPSBib29rbWFya3M7XHJcbiAgICB0aGlzLnBkZiA9IHBkZjtcclxuICAgIGJvb2ttYXJrcy5vbk5hdmlnYXRlID0gdGhpcy5uYXZpZ2F0ZUJvb2ttYXJrcy5iaW5kKHRoaXMpO1xyXG4gICAgaWYoYm9va21hcmtzLmdldFNpemUoKSkge1xyXG4gICAgICB0aGlzLnRhYiA9ICdib29rbWFya3MnO1xyXG4gICAgICB0aGlzLmlzQm9va21hcmtzID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgY21kQm9va21hcmtzKCkge1xyXG4gICAgdGhpcy50YWIgPSAnYm9va21hcmtzJztcclxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgY21kVGh1bWJuYWlscygpIHtcclxuICAgIHRoaXMudGFiID0gJ3RodW1ibmFpbHMnO1xyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBjbWRTZWFyY2goKSB7XHJcbiAgICB0aGlzLnRhYiA9ICdzZWFyY2gnO1xyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBjbWRDbG9zZVRvYygpIHtcclxuICAgIHRoaXMuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUaHVtYm5haWxzKG51bWJlcikge1xyXG4gICAgdGhpcy5ib29rQ3RybC5nb1RvUGFnZShudW1iZXIpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVTZWFyY2gobnVtYmVyKSB7XHJcbiAgICB0aGlzLmJvb2tDdHJsLmdvVG9QYWdlKG51bWJlcik7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZUJvb2ttYXJrcyhpdGVtKSB7XHJcbiAgICBpZihpdGVtLnVybCkge1xyXG4gICAgICB3aW5kb3cub3BlbihpdGVtLnVybCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihpdGVtLmRlc3QpIHtcclxuICAgICAgbGV0IGRlc3RQcm9taXNlO1xyXG4gICAgICBpZih0eXBlb2YgaXRlbS5kZXN0PT09J3N0cmluZycpIHtcclxuICAgICAgICBkZXN0UHJvbWlzZSA9IHRoaXMucGRmLmhhbmRsZXIuZ2V0RGVzdGluYXRpb24oaXRlbS5kZXN0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkZXN0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShpdGVtLmRlc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGRlc3RQcm9taXNlLlxyXG4gICAgICAgIHRoZW4oKGRlc3QpPT4gdGhpcy5wZGYuaGFuZGxlci5nZXRQYWdlSW5kZXgoZGVzdFswXSkpLlxyXG4gICAgICAgIHRoZW4oKG51bWJlcik9PiB0aGlzLmJvb2tDdHJsLmdvVG9QYWdlKG51bWJlcikpLlxyXG4gICAgICAgIGNhdGNoKCgpPT4gY29uc29sZS5lcnJvcignQmFkIGJvb2ttYXJrJykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmlldygpIHtcclxuICAgIGlmKHRoaXMudmlldykge1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZFRvY01lbnUnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCd3aWRUaHVtYm5haWxzJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLnRhYj09PSd0aHVtYm5haWxzJyxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZFNlYXJjaCcsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy50YWI9PT0nc2VhcmNoJyxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZEJvb2ttYXJrcycsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy50YWI9PT0nYm9va21hcmtzJyxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ2NtZEJvb2ttYXJrcycsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IHRoaXMudGFiPT09J2Jvb2ttYXJrcydcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnY21kQ2xvc2VUb2MnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCdjbWRUaHVtYm5haWxzJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy50YWI9PT0ndGh1bWJuYWlscydcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnY21kU2VhcmNoJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy50YWI9PT0nc2VhcmNoJ1xyXG4gICAgICB9KTtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+IHRoaXMudGh1bWJuYWlscy5zZXRFbmFibGUodGhpcy52aXNpYmxlICYmIHRoaXMudGFiPT09J3RodW1ibmFpbHMnKSk7XHJcbiAgICAgIHN1cGVyLnVwZGF0ZVZpZXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvVG9jQ29udHJvbGxlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL2NsYXNzZXMvVG9jQ29udHJvbGxlci5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgVGhyZWVVdGlscyBmcm9tICdUaHJlZVV0aWxzJztcclxuXHJcbmNvbnN0IHJlc1ggPSAxMSxcclxuICAgICAgcmVzWSA9IDIsXHJcbiAgICAgIHJlc1ogPSAxNSxcclxuICAgICAgc2NhbGUgPSAxLFxyXG4gICAgICBmYWNlcyA9IFtdO1xyXG5cclxuY29uc3QgZnJvbnRHZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHNjYWxlLCBzY2FsZSwgcmVzWC0xLCByZXNZLTEpO1xyXG5mcm9udEdlb21ldHJ5LnRyYW5zbGF0ZSgwLjUqc2NhbGUsMC41KnNjYWxlLHNjYWxlKTtcclxuY29uc3QgYmFja0dlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoc2NhbGUsIHNjYWxlLCByZXNYLTEsIHJlc1ktMSk7XHJcbmJhY2tHZW9tZXRyeS5yb3RhdGVZKE1hdGguUEkpO1xyXG5iYWNrR2VvbWV0cnkudHJhbnNsYXRlKDAuNSpzY2FsZSwwLjUqc2NhbGUsMCk7XHJcbmNvbnN0IGxlZnRHZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHNjYWxlLCBzY2FsZSwgcmVzWi0xLCByZXNZLTEpO1xyXG5sZWZ0R2VvbWV0cnkucm90YXRlWSgtTWF0aC5QSS8yKTtcclxubGVmdEdlb21ldHJ5LnRyYW5zbGF0ZSgwLDAuNSpzY2FsZSwwLjUqc2NhbGUpO1xyXG5jb25zdCByaWdodEdlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoc2NhbGUsIHNjYWxlLCByZXNaLTEsIHJlc1ktMSk7XHJcbnJpZ2h0R2VvbWV0cnkucm90YXRlWShNYXRoLlBJLzIpO1xyXG5yaWdodEdlb21ldHJ5LnRyYW5zbGF0ZShzY2FsZSwwLjUqc2NhbGUsMC41KnNjYWxlKTtcclxuY29uc3QgdG9wR2VvbWV0cnkgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeShzY2FsZSwgc2NhbGUsIHJlc1gtMSwgcmVzWi0xKTtcclxudG9wR2VvbWV0cnkucm90YXRlWCgtTWF0aC5QSS8yKTtcclxudG9wR2VvbWV0cnkudHJhbnNsYXRlKDAuNSpzY2FsZSxzY2FsZSwwLjUqc2NhbGUpO1xyXG5jb25zdCBib3R0b21HZW9tZXRyeSA9IHRvcEdlb21ldHJ5LmNsb25lKCk7XHJcbmJvdHRvbUdlb21ldHJ5LnRyYW5zbGF0ZSgwLC1zY2FsZSwwKTtcclxuZm9yKGxldCBmIG9mIGJvdHRvbUdlb21ldHJ5LmZhY2VzKSB7XHJcbiAgW2YuYSwgZi5iXSA9IFtmLmIsIGYuYV07XHJcbn1cclxuXHJcbmNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLkdlb21ldHJ5KCk7XHJcbmdlb21ldHJ5LnZlcnRpY2VzID0gWy4uLmJvdHRvbUdlb21ldHJ5LnZlcnRpY2VzLCAuLi50b3BHZW9tZXRyeS52ZXJ0aWNlc107XHJcblxyXG5jb25zdCBhZGRGYWNlcyA9IChmcywgbWFwKT0+IHtcclxuICBmb3IobGV0IGYgb2YgZnMpIHtcclxuICAgIGdlb21ldHJ5LmZhY2VzLnB1c2gobmV3IFRIUkVFLkZhY2UzKG1hcChmLmEpLCBtYXAoZi5iKSwgbWFwKGYuYykpKTtcclxuICB9XHJcbiAgZmFjZXMucHVzaChnZW9tZXRyeS5mYWNlcy5sZW5ndGgpO1xyXG59O1xyXG5cclxuY29uc3QgbWFwVmVydGljZXMgPSAoc3JjLCBkc3QpPT4ge1xyXG4gIGNvbnN0IG1hcCA9IFtdO1xyXG4gIGNvbnN0IGVxID0gKGEsIGIpPT4gTWF0aC5hYnMoYS54LWIueCkrTWF0aC5hYnMoYS55LWIueSkrTWF0aC5hYnMoYS56LWIueik8MWUtNDtcclxuICBmb3IobGV0IGk9MDsgaTxzcmMubGVuZ3RoOyArK2kpIHtcclxuICAgIGZvcihsZXQgaj0wOyBqPGRzdC5sZW5ndGg7ICsraikge1xyXG4gICAgICBpZihlcShzcmNbaV0sIGRzdFtqXSkpIHtcclxuICAgICAgICBtYXBbaV09ajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbWFwO1xyXG59O1xyXG5cclxuY29uc3QgZnJvbnRNYXAgPSBtYXBWZXJ0aWNlcyhmcm9udEdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS52ZXJ0aWNlcyk7XHJcbmNvbnN0IGJhY2tNYXAgPSBtYXBWZXJ0aWNlcyhiYWNrR2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LnZlcnRpY2VzKTtcclxuY29uc3QgbGVmdE1hcCA9IG1hcFZlcnRpY2VzKGxlZnRHZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkudmVydGljZXMpO1xyXG5jb25zdCByaWdodE1hcCA9IG1hcFZlcnRpY2VzKHJpZ2h0R2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LnZlcnRpY2VzKTtcclxuXHJcbmFkZEZhY2VzKHRvcEdlb21ldHJ5LmZhY2VzLCAoaSk9PiBpK2JvdHRvbUdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCk7XHJcbmFkZEZhY2VzKGJvdHRvbUdlb21ldHJ5LmZhY2VzLCAoaSk9PiBpKTtcclxuYWRkRmFjZXMoZnJvbnRHZW9tZXRyeS5mYWNlcywgKGkpPT4gZnJvbnRNYXBbaV0pO1xyXG5hZGRGYWNlcyhiYWNrR2VvbWV0cnkuZmFjZXMsIChpKT0+IGJhY2tNYXBbaV0pO1xyXG5hZGRGYWNlcyhsZWZ0R2VvbWV0cnkuZmFjZXMsIChpKT0+IGxlZnRNYXBbaV0pO1xyXG5hZGRGYWNlcyhyaWdodEdlb21ldHJ5LmZhY2VzLCAoaSk9PiByaWdodE1hcFtpXSk7XHJcbmZhY2VzLnBvcCgpO1xyXG5cclxuVGhyZWVVdGlscy5jb21wdXRlRmFjZVZlcnRleFV2cyhnZW9tZXRyeSwgZmFjZXMpO1xyXG5cclxuZ2VvbWV0cnkuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcclxuLy9nZW9tZXRyeS5jb21wdXRlRmFjZU5vcm1hbHMoKTtcclxuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XHJcbi8vZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbmdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IHRydWU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcblx0cmVzWCxcclxuXHRyZXNZLFxyXG5cdHJlc1osXHJcblx0ZmFjZXMsXHJcblx0Z2VvbWV0cnlcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvbW9kZWxzL3NoZWV0QmxvY2suanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9qcy9tb2RlbHMvc2hlZXRCbG9jay5qcyIsImNvbnN0IG1vdXNlQnV0dG9ucyA9IHtcclxuICBMZWZ0OiAwLFxyXG4gIE1pZGRsZTogMSxcclxuICBSaWdodDogMlxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3BzKCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBlcHM6IDFlLTQsXHJcbiAgICBza2luOiB7XHJcbiAgICAgIGRlZmF1bHQ6ICdzaG9ydC13aGl0ZS1ib29rLXZpZXcnLFxyXG4gICAgfSxcclxuICAgIHNjYWxlOiB7XHJcbiAgICAgIGRlZmF1bHQ6IDAuOSxcclxuICAgICAgbWluOiAwLjksXHJcbiAgICAgIG1heDogMi41LFxyXG4gICAgICBsZXZlbHM6IDdcclxuICAgIH0sXHJcbiAgICBsaWdodGluZzoge1xyXG4gICAgICBkZWZhdWx0OiAwLjcsXHJcbiAgICAgIG1pbjogMCxcclxuICAgICAgbWF4OiAxLFxyXG4gICAgICBsZXZlbHM6IDdcclxuICAgIH0sXHJcbiAgICBwYW46IHtcclxuICAgICAgc3BlZWQ6IDUwXHJcbiAgICB9LFxyXG4gICAgbG9hZGluZ0FuaW1hdGlvbjoge1xyXG4gICAgICBza2luOiBmYWxzZSxcclxuICAgICAgYm9vazogdHJ1ZVxyXG4gICAgfSxcclxuICAgIGF1dG9SZXNvbHV0aW9uOiB7XHJcbiAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIGNvZWZmaWNpZW50OiAxLjVcclxuICAgIH0sXHJcbiAgICBhY3Rpb25zOiB7XHJcbiAgICAgIGNtZFpvb21Jbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFpvb21PdXQ6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZERlZmF1bHRab29tOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAnZGJsY2xpY2snLFxyXG4gICAgICAgIGNvZGU6IDBcclxuICAgICAgfSxcclxuICAgICAgY21kVG9jOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRGYXN0QmFja3dhcmQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRCYWNrd2FyZDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRm9yd2FyZDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRmFzdEZvcndhcmQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTYXZlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQcmludDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRnVsbFNjcmVlbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgd2lkU2V0dGluZ3M6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFNtYXJ0UGFuOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFNpbmdsZVBhZ2U6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgYWN0aXZlRm9yTW9iaWxlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTb3VuZHM6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTdGF0czoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRMaWdodGluZ1VwOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRMaWdodGluZ0Rvd246IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhbkxlZnQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQYW5SaWdodDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhblVwOiB7XHJcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgY21kUGFuRG93bjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kUm90YXRlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAnbW91c2VkcmFnJyxcclxuICAgICAgICBjb2RlOiBtb3VzZUJ1dHRvbnMuUmlnaHRcclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWREcmFnWm9vbToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ21vdXNlZHJhZycsXHJcbiAgICAgICAgY29kZTogbW91c2VCdXR0b25zLk1pZGRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtb3VzZUNtZFBhbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ21vdXNlZHJhZycsXHJcbiAgICAgICAgY29kZTogbW91c2VCdXR0b25zLkxlZnRcclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWRXaGVlbFpvb206IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdtb3VzZXdoZWVsJyxcclxuICAgICAgICBjb2RlOiAwXHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kUm90YXRlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAndG91Y2hkcmFnJyxcclxuICAgICAgICBjb2RlOiAzXHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kWm9vbToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ3RvdWNoZHJhZycsXHJcbiAgICAgICAgY29kZTogMlxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFBhbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ3RvdWNoZHJhZycsXHJcbiAgICAgICAgY29kZTogMVxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFN3aXBlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAndG91Y2hkcmFnJyxcclxuICAgICAgICBjb2RlOiAxXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wcm9wcy9ib29rQ29udHJvbGxlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2pzL3Byb3BzL2Jvb2tDb250cm9sbGVyLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEltYWdlQmFzZSBmcm9tICcuL0ltYWdlQmFzZSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCbGFua0ltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpIHtcclxuICAgIHN1cGVyKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTtcclxuXHJcbiAgICBQcm9taXNlLnJlc29sdmUoKS5cclxuICAgICAgdGhlbigoKT0+IHtcclxuICAgICAgICB0aGlzLnN0YXJ0UmVuZGVyID0gKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckJsYW5rUGFnZSgpO1xyXG4gICAgICAgICAgdGhpcy5maW5pc2hSZW5kZXIoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvQmxhbmtJbWFnZS5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0JsYW5rSW1hZ2UuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9va21hcmtzIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBpdGVtcywgZ2V0VGl0bGU9KGkpPT4gaS50aXRsZSwgZ2V0SXRlbXM9KGkpPT5pLml0ZW1zKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMubWFwID0gW107XHJcbiAgICB0aGlzLmdldFRpdGxlID0gZ2V0VGl0bGU7XHJcbiAgICB0aGlzLmdldEl0ZW1zID0gZ2V0SXRlbXM7XHJcbiAgICB0aGlzLm5vZGVzID0gdGhpcy5tYXBOb2RlcyhpdGVtcywgdGhpcy5tYXApO1xyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIHRvZ2xlOiAoZSk9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGxldCBsaSA9ICQoZS50YXJnZXQpO1xyXG4gICAgICAgIHdoaWxlKGxpWzBdICYmIGxpWzBdIT09Y29udGFpbmVyWzBdICYmICFsaS5oYXNDbGFzcygnaXRlbScpKSB7XHJcbiAgICAgICAgICBsaSA9ICQobGlbMF0ucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGxpLmhhc0NsYXNzKCdpdGVtJykpIHtcclxuICAgICAgICAgIGxldCBjbWQgPSAkKGUudGFyZ2V0KTtcclxuICAgICAgICAgIHdoaWxlKGNtZFswXSAmJiBjbWRbMF0hPT1saVswXSAmJiAhY21kLmhhc0NsYXNzKCdjbWQnKSkge1xyXG4gICAgICAgICAgICBjbWQgPSAkKGNtZFswXS5wYXJlbnROb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKGNtZC5oYXNDbGFzcygnY21kJykpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubWFwW2xpLmF0dHIoJ2RhdGEtaWQnKV07XHJcbiAgICAgICAgICAgIGlmKGNtZC5oYXNDbGFzcygndG9nbGUnKSkge1xyXG4gICAgICAgICAgICAgIG5vZGUubWluaW1pemVkID0gIW5vZGUubWluaW1pemVkO1xyXG4gICAgICAgICAgICAgIGlmKG5vZGUubWluaW1pemVkKSB7XHJcbiAgICAgICAgICAgICAgICBsaS5maW5kKCd1bCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgbGkuZmluZCgnLnRvZ2xlJykuYWRkQ2xhc3MoJ21pbmltaXplZCcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxpLmZpbmQoJy50b2dsZScpLnJlbW92ZUNsYXNzKCdtaW5pbWl6ZWQnKTtcclxuICAgICAgICAgICAgICAgIGxpLmFwcGVuZCgodGhpcy5yZW5kZXJOb2RlKG5vZGUpLm1hdGNoKC88dWwuKjxcXC91bD4vKSB8fCBbJyddKVswXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMub25OYXZpZ2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk5hdmlnYXRlKG5vZGUuaXRlbSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udGFpbmVyLm9uKCdjbGljaycsIHRoaXMuYmluZHMudG9nbGUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIGdldFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXAubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY29udGFpbmVyLm9mZignY2xpY2snLCB0aGlzLmJpbmRzLnRvZ2xlKTtcclxuICAgIHRoaXMuY29udGFpbmVyLmh0bWwoJycpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgdGhpcy5jb250YWluZXIuaHRtbCh0aGlzLnJlbmRlck5vZGVzKHRoaXMubm9kZXMpKTtcclxuICB9XHJcblxyXG4gIGZvckVhY2goZiwgbm9kZXM9dGhpcy5ub2Rlcykge1xyXG4gICAgZm9yKGxldCBub2RlIG9mIChub2RlcyB8fCBbXSkpIHtcclxuICAgICAgZihub2RlKTtcclxuICAgICAgdGhpcy5mb3JFYWNoKGYsIG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwYW5kKCkge1xyXG4gICAgdGhpcy5mb3JFYWNoKChuKT0+IG4ubWluaW1pemVkID0gZmFsc2UpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIG1pbmltaXplKCkge1xyXG4gICAgdGhpcy5mb3JFYWNoKChuKT0+IG4ubWluaW1pemVkID0gdHJ1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyTm9kZShub2RlKSB7XHJcbiAgICByZXR1cm4gWyc8ZGl2IGNsYXNzPVwiYXJlYVwiPicsXHJcbiAgICAgIG5vZGUuY2hpbGRyZW4/ICc8YSBocmVmPVwiI1wiIGNsYXNzPVwiY21kIHRvZ2xlJyArIChub2RlLm1pbmltaXplZD8gJyBtaW5pbWl6ZWQnOiAnJykgKyAnXCI+PGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1yaWdodFwiPjwvaT48L2E+ICc6ICc8aSBjbGFzcz1cIndoaXRlLXNwYWNlXCI+PC9pPiAnLFxyXG4gICAgICAnPGEgY2xhc3M9XCJjbWRcIiB0aXRsZT1cIicsIG5vZGUudGl0bGUsJ1wiIGhyZWY9XCIjXCI+Jywgbm9kZS50aXRsZSwgJzwvYT48L2Rpdj4nLFxyXG4gICAgICBub2RlLm1pbmltaXplZD8gJyc6IHRoaXMucmVuZGVyTm9kZXMobm9kZS5jaGlsZHJlbilcclxuICAgIF0uam9pbignJyk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJOb2Rlcyhub2Rlcykge1xyXG4gICAgbGV0IHJlcyA9IFsnPGRpdiBjbGFzcz1cImJvb2ttYXJrc1wiPiddO1xyXG4gICAgaWYobm9kZXMgJiYgbm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJlcy5wdXNoKCc8dWwgY2xhc3M9XCJsZXZlbC0nLCBub2Rlc1swXS5sZXZlbCwgJ1wiPicpO1xyXG4gICAgICBmb3IobGV0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgICByZXMucHVzaChbXHJcbiAgICAgICAgICAnPGxpIGNsYXNzPVwiaXRlbVwiIGRhdGEtaWQ9XCInLCBub2RlLmlkLCdcIj4nLFxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlck5vZGUobm9kZSksXHJcbiAgICAgICAgICAnPC9saT4nXS5qb2luKCcnKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzLnB1c2goJzwvdWw+Jyk7XHJcbiAgICB9XHJcbiAgICByZXMucHVzaCgnPC9kaXY+Jyk7XHJcbiAgICByZXR1cm4gcmVzLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgbWFwTm9kZXMoaXRlbXMsIG1hcD1bXSwgbGV2ZWw9MCkge1xyXG4gICAgbGV0IG5vZGVzID0gbnVsbDtcclxuICAgIGlmKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICBub2Rlcz1bXTtcclxuICAgICAgZm9yKGxldCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBtYXAubGVuZ3RoO1xyXG4gICAgICAgIG1hcC5wdXNoKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGUoaXRlbSksXHJcbiAgICAgICAgICBsZXZlbCxcclxuICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICBtaW5pbWl6ZWQ6IHRydWUsXHJcbiAgICAgICAgICBjaGlsZHJlbjogdGhpcy5tYXBOb2Rlcyh0aGlzLmdldEl0ZW1zKGl0ZW0pLCBtYXAsIGxldmVsKzEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIG1hcFtpZF0gPSBub2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Cb29rbWFya3MuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9Cb29rbWFya3MuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV0ZWN0b3Ige1xyXG5cclxuXHRzdGF0aWMgY2FudmFzID0gISEgd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuXHJcblx0c3RhdGljIHdlYmdsID0gKGZ1bmN0aW9uKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcblx0XHRcdHJldHVybiAhISAod2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dCAmJiAoY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpKSk7XHJcblx0XHR9XHJcblx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fSkoKTtcclxuXHJcblx0c3RhdGljIHdvcmtlcnMgPSAhISB3aW5kb3cuV29ya2VyO1xyXG5cclxuXHRzdGF0aWMgZmlsZWFwaSA9IHdpbmRvdy5GaWxlICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlTGlzdCAmJiB3aW5kb3cuQmxvYjtcclxuXHJcblx0c3RhdGljIGdldFdlYkdMRXJyb3JNZXNzYWdlKCkge1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0ZWxlbWVudC5pZCA9ICd3ZWJnbC1lcnJvci1tZXNzYWdlJztcclxuXHRcdGVsZW1lbnQuc3R5bGUuZm9udEZhbWlseSA9ICdtb25vc3BhY2UnO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxM3B4JztcclxuXHRcdGVsZW1lbnQuc3R5bGUuZm9udFdlaWdodCA9ICdub3JtYWwnO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHRcdGVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmJztcclxuXHRcdGVsZW1lbnQuc3R5bGUuY29sb3IgPSAnIzAwMCc7XHJcblx0XHRlbGVtZW50LnN0eWxlLnBhZGRpbmcgPSAnMS41ZW0nO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS53aWR0aCA9ICc0MDBweCc7XHJcblx0XHRlbGVtZW50LnN0eWxlLm1hcmdpbiA9ICc1ZW0gYXV0byAwJztcclxuXHJcblx0XHRpZiAoIURldGVjdG9yLndlYmdsKSB7XHJcblx0XHRcdGVsZW1lbnQuaW5uZXJIVE1MID0gd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dCA/IFtcclxuXHRcdFx0XHQnWW91ciBncmFwaGljcyBjYXJkIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCA8YSBocmVmPVwiaHR0cDovL2tocm9ub3Mub3JnL3dlYmdsL3dpa2kvR2V0dGluZ19hX1dlYkdMX0ltcGxlbWVudGF0aW9uXCIgc3R5bGU9XCJjb2xvcjojMDAwXCI+V2ViR0w8L2E+LjxiciAvPicsXHJcblx0XHRcdFx0J0ZpbmQgb3V0IGhvdyB0byBnZXQgaXQgPGEgaHJlZj1cImh0dHA6Ly9nZXQud2ViZ2wub3JnL1wiIHN0eWxlPVwiY29sb3I6IzAwMFwiPmhlcmU8L2E+LidcclxuXHRcdFx0XS5qb2luKCdcXG4nKSA6IFtcclxuXHRcdFx0XHQnWW91ciBicm93c2VyIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCA8YSBocmVmPVwiaHR0cDovL2tocm9ub3Mub3JnL3dlYmdsL3dpa2kvR2V0dGluZ19hX1dlYkdMX0ltcGxlbWVudGF0aW9uXCIgc3R5bGU9XCJjb2xvcjojMDAwXCI+V2ViR0w8L2E+Ljxici8+JyxcclxuXHRcdFx0XHQnRmluZCBvdXQgaG93IHRvIGdldCBpdCA8YSBocmVmPVwiaHR0cDovL2dldC53ZWJnbC5vcmcvXCIgc3R5bGU9XCJjb2xvcjojMDAwXCI+aGVyZTwvYT4uJ1xyXG5cdFx0XHRdLmpvaW4oJ1xcbicpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGVsZW1lbnQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkR2V0V2ViR0xNZXNzYWdlKHBhcmFtZXRlcnMpIHtcclxuXHRcdGxldCBwYXJlbnQsIGlkLCBlbGVtZW50O1xyXG5cdFx0cGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307XHJcblxyXG5cdFx0cGFyZW50ID0gcGFyYW1ldGVycy5wYXJlbnQgfHwgJChkb2N1bWVudC5ib2R5KTtcclxuXHRcdGlkID0gcGFyYW1ldGVycy5pZCB8fCAnb2xkaWUnO1xyXG5cclxuXHRcdGVsZW1lbnQgPSBEZXRlY3Rvci5nZXRXZWJHTEVycm9yTWVzc2FnZSgpO1xyXG5cdFx0Ly9lbGVtZW50LmlkID0gaWQ7XHJcblxyXG5cdFx0cGFyZW50LmFwcGVuZChlbGVtZW50KTtcclxuXHR9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0RldGVjdG9yLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRGV0ZWN0b3IuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb2NNb3VzZVNpbXVsYXRvciB7XHJcblxyXG4gIHN0YXRpYyBIT1ZFUiA9ICdTSU1VTEFURUQtSE9WRVInO1xyXG4gIHN0YXRpYyBBQ1RJVkUgPSAnU0lNVUxBVEVELUFDVElWRSc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGpGcmFtZSwgZWxlbWVudCwgYkVsZW1lbnQ9ZG9jdW1lbnQuYm9keSkge1xyXG4gICAgdGhpcy5qRnJhbWUgPSBqRnJhbWU7XHJcbiAgICB0aGlzLnduZCA9IGpGcmFtZVswXS5jb250ZW50V2luZG93O1xyXG4gICAgdGhpcy5kb2MgPSBqRnJhbWVbMF0uY29udGVudERvY3VtZW50O1xyXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudCB8fCBkb2MuYm9keTtcclxuICAgIHRoaXMuYkVsZW1lbnQgPSBiRWxlbWVudDtcclxuICAgIHRoaXMucmVzZW5kUHJvcGVydGllcyA9IHRoaXMuZ2V0RGVmYXVsdFJlc2VuZFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMudW5kZWZpbmVkUHJvcGVydGllcyA9IHRoaXMuZ2V0RGVmYXVsdFVuZGVmaW5lZFByb3BlcnRpZXMoKTtcclxuICAgIHRoaXMuY3Vyc29ycyA9IFtdO1xyXG4gICAgdGhpcy5vbkRvY0NoYW5nZUNsYnMgPSBbXTtcclxuICAgIGNvbnN0IHRlcm1zID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZpbmQ6ICc6aG92ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZTogJy4nK0RvY01vdXNlU2ltdWxhdG9yLkhPVkVSXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaW5kOiAnOmFjdGl2ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlOiAnLicrRG9jTW91c2VTaW11bGF0b3IuQUNUSVZFXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBdO1xyXG4gICAgbGV0IHN0eWxlID0gWyc8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+J107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZG9jLnN0eWxlU2hlZXRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGxldCBzcyA9IHRoaXMuZG9jLnN0eWxlU2hlZXRzW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNzLmNzc1J1bGVzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgbGV0IHIgPSBzcy5jc3NSdWxlc1tqXSwgY3NzVGV4dDtcclxuICAgICAgICBmb3IobGV0IHRlcm0gb2YgdGVybXMpIHtcclxuICAgICAgICAgIGlmICh+ci5zZWxlY3RvclRleHQuaW5kZXhPZih0ZXJtLmZpbmQpKSB7XHJcbiAgICAgICAgICAgIGNzc1RleHQgPSAoY3NzVGV4dCB8fCByLmNzc1RleHQpLnJlcGxhY2UobmV3IFJlZ0V4cCh0ZXJtLmZpbmQsICdnJyksIHRlcm0ucmVwbGFjZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNzc1RleHQpIHtcclxuICAgICAgICAgIHN0eWxlLnB1c2goY3NzVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdHlsZS5wdXNoKCc8L3N0eWxlPicpO1xyXG4gICAgJCh0aGlzLmRvYy5oZWFkKS5hcHBlbmQoJChzdHlsZS5qb2luKCcnKSkpO1xyXG4gIH1cclxuXHJcbiAgY29udmVydENvb3Jkcyh4LCB5KSB7XHJcbiAgICBjb25zdCBqRWxlbWVudCA9ICQodGhpcy5lbGVtZW50KTtcclxuICAgIGNvbnN0IG9mZnNldCA9IGpFbGVtZW50Lm9mZnNldCgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDogb2Zmc2V0LmxlZnQrakVsZW1lbnQud2lkdGgoKSp4LFxyXG4gICAgICB5OiBvZmZzZXQudG9wK2pFbGVtZW50LmhlaWdodCgpKigxLXkpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlckV2ZW50KGVsZW1lbnQsIGUsIHAsIHR5cGUsIGFkdmFuY2VkUHJvcHMpIHtcclxuICAgIGNvbnN0IHByb3BzID0ge307XHJcbiAgICBmb3IobGV0IG4gb2YgdGhpcy5yZXNlbmRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHByb3BzW25dID0gZVtuXTtcclxuICAgIH1cclxuICAgIGZvcihsZXQgbiBvZiB0aGlzLnVuZGVmaW5lZFByb3BlcnRpZXMpIHtcclxuICAgICAgcHJvcHNbbl0gPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IG4gaW4gYWR2YW5jZWRQcm9wcykge1xyXG4gICAgICBpZihhZHZhbmNlZFByb3BzLmhhc093blByb3BlcnR5KG4pKSB7XHJcbiAgICAgICAgcHJvcHNbbl0gPSBhZHZhbmNlZFByb3BzW25dO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm9wcy52aWV3ID0gdGhpcy53bmQ7XHJcbiAgICBwcm9wcy5wYWdlWCA9IHAueDtcclxuICAgIHByb3BzLnBhZ2VZID0gcC55O1xyXG4gICAgY29uc3QgakUgPSAkLkV2ZW50KHR5cGUsIHByb3BzKTtcclxuICAgIGpFLnRpbWVTdGFtcCA9IGUudGltZVN0YW1wO1xyXG4gICAgJChlbGVtZW50KS50cmlnZ2VyKGpFKTtcclxuICB9XHJcblxyXG4gIGFkZENsYXNzKGVsZW1lbnQsIG5hbWUpIHtcclxuICAgICQoZWxlbWVudCkuYWRkQ2xhc3MobmFtZSk7XHJcbiAgICBjb25zdCBzdHlsZSA9IHRoaXMud25kLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XHJcbiAgICB0aGlzLmN1cnNvcnMucHVzaCgkKHRoaXMuYkVsZW1lbnQpLmNzcygnY3Vyc29yJykpO1xyXG4gICAgJCh0aGlzLmJFbGVtZW50KS5jc3MoJ2N1cnNvcicsIHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2N1cnNvcicpKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNsYXNzKGVsZW1lbnQsIG5hbWUpIHtcclxuICAgICQoZWxlbWVudCkucmVtb3ZlQ2xhc3MobmFtZSk7XHJcbiAgICAkKHRoaXMuYkVsZW1lbnQpLmNzcygnY3Vyc29yJywgdGhpcy5jdXJzb3JzLnBvcCgpKTtcclxuICB9XHJcblxyXG4gIGVudGVyRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICB0aGlzLmFkZENsYXNzKGVsZW1lbnQsIERvY01vdXNlU2ltdWxhdG9yLkhPVkVSKTtcclxuICB9XHJcblxyXG4gIGxlYXZlRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKGVsZW1lbnQsIERvY01vdXNlU2ltdWxhdG9yLkhPVkVSKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICB0aGlzLmFkZENsYXNzKGVsZW1lbnQsIERvY01vdXNlU2ltdWxhdG9yLkFDVElWRSk7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKGVsZW1lbnQsIERvY01vdXNlU2ltdWxhdG9yLkFDVElWRSk7XHJcbiAgfVxyXG5cclxuICBhZGREb2NDaGFuZ2VDbGIoY2xiKSB7XHJcbiAgICB0aGlzLm9uRG9jQ2hhbmdlQ2xicy5wdXNoKGNsYik7XHJcbiAgfVxyXG5cclxuICBub3RpZnkoKSB7XHJcbiAgICBmb3IobGV0IGNsYiBvZiB0aGlzLm9uRG9jQ2hhbmdlQ2xicykge1xyXG4gICAgICBjbGIodGhpcy53bmQsIHRoaXMuZG9jKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVsZW1lbnRGcm9tUG9pbnQocCkge1xyXG4gICAgbGV0IG5vZGUgPSB0aGlzLmRvYy5ib2R5LCBuZXh0ID0gdHJ1ZTtcclxuICAgIHdoaWxlKG5leHQpIHtcclxuICAgICAgbmV4dCA9IGZhbHNlO1xyXG4gICAgICBmb3IobGV0IGk9MDsgaTxub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjb25zdCBjaGlsZCA9IG5vZGUuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICBpZihjaGlsZCBpbnN0YW5jZW9mIHRoaXMud25kLkVsZW1lbnQpIHtcclxuICAgICAgICAgIGNvbnN0IGpDID0gJChjaGlsZCksIG9mZnNldCA9IGpDLm9mZnNldCgpLCBoZWlnaHQgPSBqQy5oZWlnaHQoKSwgd2lkdGggPSBqQy53aWR0aCgpO1xyXG4gICAgICAgICAgaWYocC54Pm9mZnNldC5sZWZ0ICYmIHAueDxvZmZzZXQubGVmdCt3aWR0aCAmJiBwLnk+b2Zmc2V0LnRvcCAmJiBwLnk8b2Zmc2V0LnRvcCtoZWlnaHQpIHtcclxuICAgICAgICAgICAgbm9kZSA9IGNoaWxkO1xyXG4gICAgICAgICAgICBuZXh0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZTtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnQocCkge1xyXG4gICAgY29uc3Qgb2ZmMCA9IHRoaXMuakZyYW1lLm9mZnNldCgpO1xyXG4gICAgdGhpcy5qRnJhbWUub2Zmc2V0KHtsZWZ0OiAwLjUqd2luZG93LmlubmVyV2lkdGgtcC54LCB0b3A6IDAuNSp3aW5kb3cuaW5uZXJIZWlnaHQtcC55fSk7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuZG9jLmVsZW1lbnRGcm9tUG9pbnQocC54LCBwLnkpO1xyXG4gICAgaWYoIWVsZW1lbnQpIHsgLy8gaXQgaXNuJ3QgYSBqb2tlIGl0J3MgSUVcclxuICAgICAgZWxlbWVudCA9IHRoaXMuZG9jLmVsZW1lbnRGcm9tUG9pbnQocC54LCBwLnkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5qRnJhbWUub2Zmc2V0KG9mZjApO1xyXG4gICAgcmV0dXJuIGVsZW1lbnQ/IGVsZW1lbnQ6IHRoaXMuZWxlbWVudEZyb21Qb2ludChwKTtcclxuICB9XHJcblxyXG4gIHNpbXVsYXRlKGUsIGRvYywgeCwgeSkge1xyXG4gICAgY29uc3QgcCA9IHRoaXMuY29udmVydENvb3Jkcyh4LCB5KSxcclxuICAgICAgICAgIGVsZW1lbnQgPSBkb2M9PT10aGlzLmRvYz8gdGhpcy5nZXRFbGVtZW50KHApOiB1bmRlZmluZWQ7XHJcbiAgICBsZXQgdHJpZ2dlciA9IGVsZW1lbnQgIT09IHVuZGVmaW5lZCwgbm90aWZ5ID0gZmFsc2U7XHJcblxyXG4gICAgc3dpdGNoKGUudHlwZSkge1xyXG4gICAgICBjYXNlICdtb3VzZWRvd24nOiB7XHJcbiAgICAgICAgaWYodGhpcy5jYXBFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVFbGVtZW50KHRoaXMuY2FwRWxlbWVudCk7XHJcbiAgICAgICAgICBub3RpZnkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhcEVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgICAgIGlmKHRoaXMuY2FwRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmF0ZUVsZW1lbnQodGhpcy5jYXBFbGVtZW50KTtcclxuICAgICAgICAgIG5vdGlmeSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21vdXNldXAnOiB7XHJcbiAgICAgICAgaWYodGhpcy5jYXBFbGVtZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVFbGVtZW50KHRoaXMuY2FwRWxlbWVudCk7XHJcbiAgICAgICAgICBub3RpZnkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnRpbWVTdGFtcCA9IGUudGltZVN0YW1wO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ2NsaWNrJzoge1xyXG4gICAgICAgIHRyaWdnZXIgPSBlbGVtZW50ICYmIHRoaXMuY2FwRWxlbWVudCA9PT0gZWxlbWVudCAmJiBlLnRpbWVTdGFtcCA9PT0gdGhpcy50aW1lU3RhbXA7XHJcbiAgICAgICAgdGhpcy5jYXBFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21vdXNlZW50ZXInOlxyXG4gICAgICBjYXNlICdtb3VzZW92ZXInOlxyXG4gICAgICBjYXNlICdtb3VzZW1vdmUnOiB7XHJcbiAgICAgICAgbGV0IGxlYXZlZCA9IG51bGw7XHJcbiAgICAgICAgaWYodGhpcy5ob3ZFbGVtZW50ICE9PSBlbGVtZW50ICYmIHRoaXMuaG92RWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQodGhpcy5ob3ZFbGVtZW50LCBlLCBwLCAnbW91c2VvdXQnLCB7cmVsYXRlZFRhcmdldDogZWxlbWVudD8gZWxlbWVudDogbnVsbH0pO1xyXG4gICAgICAgICAgdGhpcy5sZWF2ZUVsZW1lbnQodGhpcy5ob3ZFbGVtZW50KTtcclxuICAgICAgICAgIGxlYXZlZCA9IHRoaXMuaG92RWxlbWVudDtcclxuICAgICAgICAgIHRoaXMuaG92RWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIG5vdGlmeSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLmhvdkVsZW1lbnQgJiYgZWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoZWxlbWVudCwgZSwgcCwgJ21vdXNlb3ZlcicsIHtyZWxhdGVkVGFyZ2V0OiBsZWF2ZWR9KTtcclxuICAgICAgICAgIHRoaXMuZW50ZXJFbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5ob3ZFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICAgIG5vdGlmeSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyaWdnZXIgPSBlbGVtZW50ICYmIGUudHlwZSA9PT0gJ21vdXNlbW92ZSc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6XHJcbiAgICAgIGNhc2UgJ21vdXNlb3V0Jzoge1xyXG4gICAgICAgIGlmKHRoaXMuaG92RWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQodGhpcy5ob3ZFbGVtZW50LCBlLCBwLCAnbW91c2VvdXQnLCB7cmVsYXRlZFRhcmdldDogZS5yZWxhdGVkVGFyZ2V0fSk7XHJcbiAgICAgICAgICB0aGlzLmxlYXZlRWxlbWVudCh0aGlzLmhvdkVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5ob3ZFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgbm90aWZ5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJpZ2dlciA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZih0cmlnZ2VyKSB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGVsZW1lbnQsIGUsIHAsIGUudHlwZSk7XHJcbiAgICB9XHJcbiAgICBpZihub3RpZnkpIHtcclxuICAgICAgdGhpcy5ub3RpZnkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERlZmF1bHRVbmRlZmluZWRQcm9wZXJ0aWVzKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ2NsaWVudFgnLFxyXG4gICAgICAnY2xpZW50WScsXHJcbiAgICAgICdvZmZzZXRYJyxcclxuICAgICAgJ29mZnNldFknLFxyXG4gICAgICAnc2NyZWVuWCcsXHJcbiAgICAgICdzY3JlZW5ZJ1xyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGdldERlZmF1bHRSZXNlbmRQcm9wZXJ0aWVzKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ2FsdEtleScsXHJcbiAgICAgICdidWJibGVzJyxcclxuICAgICAgJ2J1dHRvbicsXHJcbiAgICAgICdidXR0b25zJyxcclxuICAgICAgJ2NhbmNlbGFibGUnLFxyXG4gICAgICAnY2hhbmdlZFRvdWNoZXMnLFxyXG4gICAgICAnY2hhcicsXHJcbiAgICAgICdjaGFyQ29kZScsXHJcbiAgICAgICdjdHJsS2V5JyxcclxuICAgICAgJ2RhdGEnLFxyXG4gICAgICAnZGV0YWlsJyxcclxuICAgICAgJ2V2ZW50UGhhc2UnLFxyXG4gICAgICAnaXNEZWZhdWx0UHJldmVudGVkJyxcclxuICAgICAgJ2tleScsXHJcbiAgICAgICdrZXlDb2RlJyxcclxuICAgICAgJ21ldGFLZXknLFxyXG4gICAgICAncG9pbnRlcklkJyxcclxuICAgICAgJ3BvaW50ZXJUeXBlJyxcclxuICAgICAgJ3NoaWZ0S2V5JyxcclxuICAgICAgJ3RhcmdldFRvdWNoZXMnLFxyXG4gICAgICAndG91Y2hlcycsXHJcbiAgICAgICd3aGljaCdcclxuICAgIF07XHJcbiAgfVxyXG5cclxufVxyXG5cclxuLypcclxuYWx0S2V5LFxyXG5idWJibGVzLFxyXG5idXR0b24sXHJcbmJ1dHRvbnMsXHJcbmNhbmNlbGFibGUsXHJcbmNoYW5nZWRUb3VjaGVzLFxyXG5jaGFyLFxyXG5jaGFyQ29kZSxcclxuY2xpZW50WCxcclxuY2xpZW50WSxcclxuY3RybEtleSxcclxuY3VycmVudFRhcmdldCxcclxuZGF0YSxcclxuZGVsZWdhdGVUYXJnZXQsXHJcbmRldGFpbCxcclxuZXZlbnRQaGFzZSxcclxuaGFuZGxlT2JqLFxyXG5pc0RlZmF1bHRQcmV2ZW50ZWQsXHJcbmtleSxcclxua2V5Q29kZSxcclxubWV0YUtleSxcclxub2Zmc2V0WCxcclxub2Zmc2V0WSxcclxub3JpZ2luYWxFdmVudCxcclxucGFnZVgsXHJcbnBhZ2VZLFxyXG5wb2ludGVySWQsXHJcbnBvaW50ZXJUeXBlLFxyXG5yZWxhdGVkVGFyZ2V0LFxyXG5zY3JlZW5YLFxyXG5zY3JlZW5ZLFxyXG5zaGlmdEtleSxcclxudGFyZ2V0LFxyXG50YXJnZXRUb3VjaGVzLFxyXG50aW1lU3RhbXAsXHJcbnRvRWxlbWVudCxcclxudG91Y2hlcyxcclxudHlwZSxcclxudmlldyxcclxud2hpY2hcclxuKi9cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRG9jTW91c2VTaW11bGF0b3IuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9Eb2NNb3VzZVNpbXVsYXRvci5qcyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbTJJbWFnZSB7XG5cbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIGNhY2hlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy53aW5kb3cgPSB3bmQ7XG4gICAgdGhpcy5kb2N1bWVudCA9IGRvYztcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG5cbiAgICBjb25zdCB1dGlsID0gbmV3VXRpbCgpO1xuICAgIGNvbnN0IGlubGluZXIgPSBuZXdJbmxpbmVyKCk7XG4gICAgY29uc3QgZm9udEZhY2VzID0gbmV3Rm9udEZhY2VzKCk7XG4gICAgY29uc3QgaW1hZ2VzID0gbmV3SW1hZ2VzKCk7XG5cbiAgICB0aGlzLnRvU3ZnID0gdG9Tdmc7XG4gICAgdGhpcy50b1BuZyA9IHRvUG5nO1xuICAgIHRoaXMudG9KcGVnID0gdG9KcGVnO1xuICAgIHRoaXMudG9CbG9iID0gdG9CbG9iO1xuICAgIHRoaXMudG9QaXhlbERhdGEgPSB0b1BpeGVsRGF0YTtcbiAgICB0aGlzLmltcGwgPSB7XG4gICAgICAgICAgICAgICAgICBmb250RmFjZXM6IGZvbnRGYWNlcyxcbiAgICAgICAgICAgICAgICAgIGltYWdlczogaW1hZ2VzLFxuICAgICAgICAgICAgICAgICAgdXRpbDogdXRpbCxcbiAgICAgICAgICAgICAgICAgIGlubGluZXI6IGlubGluZXJcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb3B0aW9ucy5maWx0ZXIgLSBTaG91bGQgcmV0dXJuIHRydWUgaWYgcGFzc2VkIG5vZGUgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXRcbiAgICAgKiAgICAgICAgICAoZXhjbHVkaW5nIG5vZGUgbWVhbnMgZXhjbHVkaW5nIGl0J3MgY2hpbGRyZW4gYXMgd2VsbCkuIE5vdCBjYWxsZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9ucy5iZ2NvbG9yIC0gY29sb3IgZm9yIHRoZSBiYWNrZ3JvdW5kLCBhbnkgdmFsaWQgQ1NTIGNvbG9yIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLndpZHRoIC0gd2lkdGggdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbnMuaGVpZ2h0IC0gaGVpZ2h0IHRvIGJlIGFwcGxpZWQgdG8gbm9kZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zLnN0eWxlIC0gYW4gb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgdG8gYmUgY29waWVkIHRvIG5vZGUncyBzdHlsZSBiZWZvcmUgcmVuZGVyaW5nLlxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBvcHRpb25zLnF1YWxpdHkgLSBhIE51bWJlciBiZXR3ZWVuIDAgYW5kIDEgaW5kaWNhdGluZyBpbWFnZSBxdWFsaXR5IChhcHBsaWNhYmxlIHRvIEpQRUcgb25seSksXG4gICAgICAgICAgICAgICAgZGVmYXVsdHMgdG8gMS4wLlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBTVkcgaW1hZ2UgZGF0YSBVUkxcbiAgICAgKiAqL1xuXG4gICAgZnVuY3Rpb24gdG9Tdmcobm9kZSwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVOb2RlKG5vZGUsIG9wdGlvbnMuZmlsdGVyLCB0cnVlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihlbWJlZEZvbnRzKVxuICAgICAgICAgICAgLnRoZW4oaW5saW5lSW1hZ2VzKVxuICAgICAgICAgICAgLnRoZW4oYXBwbHlPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNsb25lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VTdmdEYXRhVXJpKGNsb25lLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndpZHRoIHx8IHV0aWwud2lkdGgobm9kZSksXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVpZ2h0IHx8IHV0aWwuaGVpZ2h0KG5vZGUpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5T3B0aW9ucyhjbG9uZSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmdjb2xvcikgY2xvbmUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gb3B0aW9ucy5iZ2NvbG9yO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aWR0aCkgY2xvbmUuc3R5bGUud2lkdGggPSBvcHRpb25zLndpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmhlaWdodCkgY2xvbmUuc3R5bGUuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgKyAncHgnO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zdHlsZSlcbiAgICAgICAgICAgICAgICBzZWxmLndpbmRvdy5PYmplY3Qua2V5cyhvcHRpb25zLnN0eWxlKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICBjbG9uZS5zdHlsZVtwcm9wZXJ0eV0gPSBvcHRpb25zLnN0eWxlW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLCBAc2VlIHtAbGluayB0b1N2Z31cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgVWludDhBcnJheSBjb250YWluaW5nIFJHQkEgcGl4ZWwgZGF0YS5cbiAgICAgKiAqL1xuICAgIGZ1bmN0aW9uIHRvUGl4ZWxEYXRhKG5vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzLmdldENvbnRleHQoJzJkJykuZ2V0SW1hZ2VEYXRhKFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICB1dGlsLndpZHRoKG5vZGUpLFxuICAgICAgICAgICAgICAgICAgICB1dGlsLmhlaWdodChub2RlKVxuICAgICAgICAgICAgICAgICkuZGF0YTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9ucywgQHNlZSB7QGxpbmsgdG9Tdmd9XG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFBORyBpbWFnZSBkYXRhIFVSTFxuICAgICAqICovXG4gICAgZnVuY3Rpb24gdG9Qbmcobm9kZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNhbnZhcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMsIEBzZWUge0BsaW5rIHRvU3ZnfVxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBKUEVHIGltYWdlIGRhdGEgVVJMXG4gICAgICogKi9cbiAgICBmdW5jdGlvbiB0b0pwZWcobm9kZSwgb3B0aW9ucykge1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIG9wdGlvbnMucXVhbGl0eSB8fCAxLjApO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLCBAc2VlIHtAbGluayB0b1N2Z31cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUE5HIGltYWdlIGJsb2JcbiAgICAgKiAqL1xuICAgIGZ1bmN0aW9uIHRvQmxvYihub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBkcmF3KG5vZGUsIG9wdGlvbnMgfHwge30pXG4gICAgICAgICAgICAudGhlbih1dGlsLmNhbnZhc1RvQmxvYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZHJhdyhkb21Ob2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0b1N2Zyhkb21Ob2RlLCBvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4odXRpbC5tYWtlSW1hZ2UpXG4gICAgICAgICAgICAudGhlbih1dGlsLmRlbGF5KDEwMCkpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYW52YXMgPSBuZXdDYW52YXMoZG9tTm9kZSk7XG4gICAgICAgICAgICAgICAgY2FudmFzLmdldENvbnRleHQoJzJkJykuZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gbmV3Q2FudmFzKGRvbU5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IHNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSBvcHRpb25zLndpZHRoIHx8IHV0aWwud2lkdGgoZG9tTm9kZSk7XG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgdXRpbC5oZWlnaHQoZG9tTm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmJnY29sb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gb3B0aW9ucy5iZ2NvbG9yO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmVOb2RlKG5vZGUsIGZpbHRlciwgcm9vdCkge1xuICAgICAgICBpZiAoIXJvb3QgJiYgZmlsdGVyICYmICFmaWx0ZXIobm9kZSkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgICAgICAgICAudGhlbihtYWtlTm9kZUNvcHkpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVDaGlsZHJlbihub2RlLCBjbG9uZSwgZmlsdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc0Nsb25lKG5vZGUsIGNsb25lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1ha2VOb2RlQ29weShub2RlKSB7XG4gICAgICAgICAgICBpZiAodXRpbC5pc0NhbnZhcyhub2RlKSkgcmV0dXJuIHV0aWwubWFrZUltYWdlKG5vZGUudG9EYXRhVVJMKCkpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNsb25lQ2hpbGRyZW4ob3JpZ2luYWwsIGNsb25lLCBmaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gb3JpZ2luYWwuY2hpbGROb2RlcztcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2xvbmUpO1xuXG4gICAgICAgICAgICByZXR1cm4gY2xvbmVDaGlsZHJlbkluT3JkZXIoY2xvbmUsIHV0aWwuYXNBcnJheShjaGlsZHJlbiksIGZpbHRlcilcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbkluT3JkZXIocGFyZW50LCBjaGlsZHJlbiwgZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZU5vZGUoY2hpbGQsIGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNoaWxkQ2xvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRDbG9uZSkgcGFyZW50LmFwcGVuZENoaWxkKGNoaWxkQ2xvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQ2xvbmUob3JpZ2luYWwsIGNsb25lKSB7XG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNFbGVtZW50KGNsb25lKSkgcmV0dXJuIGNsb25lO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgICAgICAudGhlbihjbG9uZVN0eWxlKVxuICAgICAgICAgICAgICAgIC50aGVuKGNsb25lUHNldWRvRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgLnRoZW4oY29weVVzZXJJbnB1dClcbiAgICAgICAgICAgICAgICAudGhlbihmaXhTdmcpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsb25lU3R5bGUoKSB7XG4gICAgICAgICAgICAgICAgY29weVN0eWxlKHNlbGYud2luZG93LmdldENvbXB1dGVkU3R5bGUob3JpZ2luYWwpLCBjbG9uZS5zdHlsZSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5U3R5bGUoc291cmNlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jc3NUZXh0KSB0YXJnZXQuY3NzVGV4dCA9IHNvdXJjZS5jc3NUZXh0O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZSwgdGFyZ2V0KTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5UHJvcGVydGllcyhzb3VyY2UsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5hc0FycmF5KHNvdXJjZSkuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmdldFByb3BlcnR5VmFsdWUobmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9uZVBzZXVkb0VsZW1lbnRzKCkge1xuICAgICAgICAgICAgICAgIFsnOmJlZm9yZScsICc6YWZ0ZXInXS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lUHNldWRvRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNsb25lUHNldWRvRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlID0gc2VsZi53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09ICcnIHx8IGNvbnRlbnQgPT09ICdub25lJykgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHV0aWwudWlkKCk7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLmNsYXNzTmFtZSA9IGNsb25lLmNsYXNzTmFtZSArICcgJyArIGNsYXNzTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gc2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgICAgICAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZm9ybWF0UHNldWRvRWxlbWVudFN0eWxlKGNsYXNzTmFtZSwgZWxlbWVudCwgc3R5bGUpKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSAnLicgKyBjbGFzc05hbWUgKyAnOicgKyBlbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3NzVGV4dCA9IHN0eWxlLmNzc1RleHQgPyBmb3JtYXRDc3NUZXh0KHN0eWxlKSA6IGZvcm1hdENzc1Byb3BlcnRpZXMoc3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc2VsZWN0b3IgKyAneycgKyBjc3NUZXh0ICsgJ30nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZm9ybWF0Q3NzVGV4dChzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmNzc1RleHQgKyAnIGNvbnRlbnQ6ICcgKyBjb250ZW50ICsgJzsnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRDc3NQcm9wZXJ0aWVzKHN0eWxlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5hc0FycmF5KHN0eWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZvcm1hdFByb3BlcnR5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuam9pbignOyAnKSArICc7JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdFByb3BlcnR5KG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAnOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSkgPyAnICFpbXBvcnRhbnQnIDogJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gY29weVVzZXJJbnB1dCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc1RleHRBcmVhKG9yaWdpbmFsKSkgY2xvbmUuaW5uZXJIVE1MID0gb3JpZ2luYWwudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNJbnB1dChvcmlnaW5hbCkpIGNsb25lLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIG9yaWdpbmFsLnZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZml4U3ZnKCkge1xuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc1NWRyhjbG9uZSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjbG9uZS5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIXV0aWwuaXNTVkdSZWN0KGNsb25lKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIFsnd2lkdGgnLCAnaGVpZ2h0J10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xvbmUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICBjbG9uZS5zdHlsZS5zZXRQcm9wZXJ0eShhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVtYmVkRm9udHMobm9kZSkge1xuICAgICAgICByZXR1cm4gZm9udEZhY2VzLnJlc29sdmVBbGwoKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNzc1RleHQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZU5vZGUgPSBzZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpO1xuICAgICAgICAgICAgICAgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChzZWxmLmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzc1RleHQpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlubGluZUltYWdlcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBpbWFnZXMuaW5saW5lQWxsKG5vZGUpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlU3ZnRGF0YVVyaShub2RlLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3htbG5zJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYud2luZG93LlhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhub2RlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbih1dGlsLmVzY2FwZVhodG1sKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHhodG1sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJyxcbiAgICAgICAgICAgICAgICAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCInLCB3aWR0aCwgJ1wiIGhlaWdodD1cIicsIGhlaWdodCwgJ1wiPicsXG4gICAgICAgICAgICAgICAgICAnPGZvcmVpZ25PYmplY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj4nLCB4aHRtbCwgJzwvZm9yZWlnbk9iamVjdD4nLFxuICAgICAgICAgICAgICAgICc8L3N2Zz4nXS5qb2luKCcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5ld1V0aWwoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlc2NhcGU6IGVzY2FwZSxcbiAgICAgICAgICAgIHBhcnNlRXh0ZW5zaW9uOiBwYXJzZUV4dGVuc2lvbixcbiAgICAgICAgICAgIG1pbWVUeXBlOiBtaW1lVHlwZSxcbiAgICAgICAgICAgIGRhdGFBc1VybDogZGF0YUFzVXJsLFxuICAgICAgICAgICAgaXNEYXRhVXJsOiBpc0RhdGFVcmwsXG4gICAgICAgICAgICBjYW52YXNUb0Jsb2I6IGNhbnZhc1RvQmxvYixcbiAgICAgICAgICAgIHJlc29sdmVVcmw6IHJlc29sdmVVcmwsXG4gICAgICAgICAgICBnZXRBbmRFbmNvZGU6IGdldEFuZEVuY29kZSxcbiAgICAgICAgICAgIHVpZDogdWlkKCksXG4gICAgICAgICAgICBkZWxheTogZGVsYXksXG4gICAgICAgICAgICBhc0FycmF5OiBhc0FycmF5LFxuICAgICAgICAgICAgZXNjYXBlWGh0bWw6IGVzY2FwZVhodG1sLFxuICAgICAgICAgICAgbWFrZUltYWdlOiBtYWtlSW1hZ2UsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcblxuICAgICAgICAgICAgaXNFbGVtZW50LFxuICAgICAgICAgICAgaXNDYW52YXMsXG4gICAgICAgICAgICBpc1RleHRBcmVhLFxuICAgICAgICAgICAgaXNJbnB1dCxcbiAgICAgICAgICAgIGlzU1ZHLFxuICAgICAgICAgICAgaXNTVkdSZWN0LFxuICAgICAgICAgICAgaXNJbWFnZVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIG1pbWVzKCkge1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAqIE9ubHkgV09GRiBhbmQgRU9UIG1pbWUgdHlwZXMgZm9yIGZvbnRzIGFyZSAncmVhbCdcbiAgICAgICAgICAgICAqIHNlZSBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL21lZGlhLXR5cGVzLnhodG1sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IFdPRkYgPSAnYXBwbGljYXRpb24vZm9udC13b2ZmJztcbiAgICAgICAgICAgIGNvbnN0IEpQRUcgPSAnaW1hZ2UvanBlZyc7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgJ3dvZmYnOiBXT0ZGLFxuICAgICAgICAgICAgICAgICd3b2ZmMic6IFdPRkYsXG4gICAgICAgICAgICAgICAgJ3R0Zic6ICdhcHBsaWNhdGlvbi9mb250LXRydWV0eXBlJyxcbiAgICAgICAgICAgICAgICAnZW90JzogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JyxcbiAgICAgICAgICAgICAgICAncG5nJzogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICAgICAgJ2pwZyc6IEpQRUcsXG4gICAgICAgICAgICAgICAgJ2pwZWcnOiBKUEVHLFxuICAgICAgICAgICAgICAgICdnaWYnOiAnaW1hZ2UvZ2lmJyxcbiAgICAgICAgICAgICAgICAndGlmZic6ICdpbWFnZS90aWZmJyxcbiAgICAgICAgICAgICAgICAnc3ZnJzogJ2ltYWdlL3N2Zyt4bWwnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcGFyc2VFeHRlbnNpb24odXJsKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IC9cXC4oW15cXC5cXC9dKj8pJC9nLmV4ZWModXJsKTtcbiAgICAgICAgICAgIGlmIChtYXRjaCkgcmV0dXJuIG1hdGNoWzFdO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtaW1lVHlwZSh1cmwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHBhcnNlRXh0ZW5zaW9uKHVybCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHJldHVybiBtaW1lcygpW2V4dGVuc2lvbl0gfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc0RhdGFVcmwodXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gdXJsLnNlYXJjaCgvXihkYXRhOikvKSAhPT0gLTE7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB0b0Jsb2IoY2FudmFzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBzZWxmLndpbmRvdy5hdG9iKGNhbnZhcy50b0RhdGFVUkwoKS5zcGxpdCgnLCcpWzFdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBiaW5hcnlTdHJpbmcubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmFyeUFycmF5ID0gbmV3IHNlbGYud2luZG93LlVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgICAgIGJpbmFyeUFycmF5W2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBzZWxmLndpbmRvdy5CbG9iKFtiaW5hcnlBcnJheV0sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ltYWdlL3BuZydcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMpIHtcbiAgICAgICAgICAgIGlmIChjYW52YXMudG9CbG9iKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYW52YXMudG9CbG9iKHJlc29sdmUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdG9CbG9iKGNhbnZhcyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlVXJsKHVybCwgYmFzZVVybCkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gc2VsZi5kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBkb2MuY3JlYXRlRWxlbWVudCgnYmFzZScpO1xuICAgICAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoYmFzZSk7XG4gICAgICAgICAgICBjb25zdCBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgICAgICAgYmFzZS5ocmVmID0gYmFzZVVybDtcbiAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcbiAgICAgICAgICAgIHJldHVybiBhLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiB1aWQoKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAndScgKyBmb3VyUmFuZG9tQ2hhcnMoKSArIGluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3VyUmFuZG9tQ2hhcnMoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS82MjQ4NzIyLzI1MTkzNzMgKi9cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgnMDAwMCcgKyAoc2VsZi53aW5kb3cuTWF0aC5yYW5kb20oKSAqIHNlbGYud2luZG93Lk1hdGgucG93KDM2LCA0KSA8PCAwKS50b1N0cmluZygzNikpLnNsaWNlKC00KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbWFrZUltYWdlKHVyaSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBzZWxmLndpbmRvdy5JbWFnZSgpO1xuICAgICAgICAgICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShpbWFnZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpbWFnZS5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IHVyaTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0QW5kRW5jb2RlKHVybCkge1xuICAgICAgICAgIGxldCBkYXRhID0gc2VsZi5jYWNoZS5nZXQodXJsKTtcbiAgICAgICAgICBpZihkYXRhKSB7XG4gICAgICAgICAgICBpZihkYXRhLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpPT4ge1xuICAgICAgICAgICAgICAgIGlmKGRhdGEuY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGRhdGEucGVuZGluZ3MucHVzaChyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBzZWxmLmNhY2hlLnB1dCh1cmwsIHtwZW5kaW5nczogW119KTtcblxuICAgICAgICAgICAgY29uc3QgVElNRU9VVCA9IDMwMDAwO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IHNlbGYud2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGRvbmU7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vbnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgICAgICAgICAgIHJlcXVlc3QudGltZW91dCA9IFRJTUVPVVQ7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VuZCgpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCdjYW5ub3QgZmV0Y2ggcmVzb3VyY2U6ICcgKyB1cmwgKyAnLCBzdGF0dXM6ICcgKyByZXF1ZXN0LnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IHNlbGYud2luZG93LkZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmNvbnRlbnQgPSBlbmNvZGVyLnJlc3VsdC5zcGxpdCgvLC8pWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCByZXNvbHZlIG9mIGRhdGEucGVuZGluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wZW5kaW5ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVyLnJlYWRBc0RhdGFVUkwocmVxdWVzdC5yZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdGltZW91dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbCgndGltZW91dCBvZiAnICsgVElNRU9VVCArICdtcyBvY2N1cmVkIHdoaWxlIGZldGNoaW5nIHJlc291cmNlOiAnICsgdXJsKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmYWlsKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZGF0YUFzVXJsKGNvbnRlbnQsIHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBbJ2RhdGE6Jyx0eXBlLCc7YmFzZTY0LCcsY29udGVudF0uam9pbignJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBlc2NhcGUoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP14ke30oKXxcXFtcXF1cXC9cXFxcXSkvZywgJ1xcXFwkMScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZGVsYXkobXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhcmcpO1xuICAgICAgICAgICAgICAgICAgICB9LCBtcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYXNBcnJheShhcnJheUxpa2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGFycmF5ID0gW107XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBhcnJheUxpa2UubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgYXJyYXkucHVzaChhcnJheUxpa2VbaV0pO1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZXNjYXBlWGh0bWwoc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLygjfFxcbikvZywgKGMpPT4gYz09PScjJz8gJyUyMyc6ICclMEEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHdpZHRoKG5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLWxlZnQtd2lkdGgnKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1yaWdodC13aWR0aCcpO1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuc2Nyb2xsV2lkdGggKyBsZWZ0Qm9yZGVyICsgcmlnaHRCb3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoZWlnaHQobm9kZSkge1xuICAgICAgICAgICAgY29uc3QgdG9wQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci10b3Atd2lkdGgnKTtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbUJvcmRlciA9IHB4KG5vZGUsICdib3JkZXItYm90dG9tLXdpZHRoJyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxIZWlnaHQgKyB0b3BCb3JkZXIgKyBib3R0b21Cb3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBweChub2RlLCBzdHlsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNlbGYud2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZSkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlLnJlcGxhY2UoJ3B4JywgJycpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBzZWxmLndpbmRvdy5FbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNDYW52YXMobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2Ygc2VsZi53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1RleHRBcmVhKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LkhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc0lucHV0KG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LkhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1NWRyhub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBzZWxmLndpbmRvdy5TVkdFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNTVkdSZWN0KG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LlNWR1JlY3RFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNJbWFnZShub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBzZWxmLndpbmRvdy5IVE1MSW1hZ2VFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV3SW5saW5lcigpIHtcbiAgICAgICAgY29uc3QgVVJMX1JFR0VYID0gL3VybFxcKFsnXCJdPyhbXidcIl0rPylbJ1wiXT9cXCkvZztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5saW5lQWxsOiBpbmxpbmVBbGwsXG4gICAgICAgICAgICBzaG91bGRQcm9jZXNzOiBzaG91bGRQcm9jZXNzLFxuICAgICAgICAgICAgaW1wbDoge1xuICAgICAgICAgICAgICAgIHJlYWRVcmxzOiByZWFkVXJscyxcbiAgICAgICAgICAgICAgICBpbmxpbmU6IGlubGluZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHNob3VsZFByb2Nlc3Moc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nLnNlYXJjaChVUkxfUkVHRVgpICE9PSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRVcmxzKHN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gVVJMX1JFR0VYLmV4ZWMoc3RyaW5nKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChtYXRjaFsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1dGlsLmlzRGF0YVVybCh1cmwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpbmxpbmUoc3RyaW5nLCB1cmwsIGJhc2VVcmwsIGdldCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1cmwpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVVybCA/IHV0aWwucmVzb2x2ZVVybCh1cmwsIGJhc2VVcmwpIDogdXJsO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oZ2V0IHx8IHV0aWwuZ2V0QW5kRW5jb2RlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLmRhdGFBc1VybChkYXRhLCB1dGlsLm1pbWVUeXBlKHVybCkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKHVybEFzUmVnZXgodXJsKSwgWyckMScsIGRhdGFVcmwsICckMyddLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gdXJsQXNSZWdleCh1cmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYud2luZG93LlJlZ0V4cChbJyh1cmxcXFxcKFtcXCdcIl0/KSgnLCB1dGlsLmVzY2FwZSh1cmwpLCAnKShbXFwnXCJdP1xcXFwpKSddLmpvaW4oJycpLCAnZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW5saW5lQWxsKHN0cmluZywgYmFzZVVybCwgZ2V0KSB7XG4gICAgICAgICAgICBpZiAobm90aGluZ1RvSW5saW5lKCkpIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVhZFVybHMpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHVybHMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoc3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdXJscy5mb3JFYWNoKGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb25lLnRoZW4oZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmUoc3RyaW5nLCB1cmwsIGJhc2VVcmwsIGdldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBub3RoaW5nVG9JbmxpbmUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFzaG91bGRQcm9jZXNzKHN0cmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdGb250RmFjZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsLFxuICAgICAgICAgICAgaW1wbDoge1xuICAgICAgICAgICAgICAgIHJlYWRBbGw6IHJlYWRBbGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiByZXNvbHZlQWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRBbGwoc2VsZi5kb2N1bWVudClcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAod2ViRm9udHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgd2ViRm9udHMubWFwKGZ1bmN0aW9uICh3ZWJGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkZvbnQucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjc3NTdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjc3NTdHJpbmdzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVhZEFsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXRpbC5hc0FycmF5KHNlbGYuZG9jdW1lbnQuc3R5bGVTaGVldHMpKVxuICAgICAgICAgICAgICAgIC50aGVuKGdldENzc1J1bGVzKVxuICAgICAgICAgICAgICAgIC50aGVuKHNlbGVjdFdlYkZvbnRSdWxlcylcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChuZXdXZWJGb250KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gc2VsZWN0V2ViRm9udFJ1bGVzKGNzc1J1bGVzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1J1bGVzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydWxlLnR5cGUgPT09IENTU1J1bGUuRk9OVF9GQUNFX1JVTEU7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVyLnNob3VsZFByb2Nlc3MocnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBnZXRDc3NSdWxlcyhzdHlsZVNoZWV0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNzc1J1bGVzID0gW107XG4gICAgICAgICAgICAgICAgc3R5bGVTaGVldHMuZm9yRWFjaChmdW5jdGlvbiAoc2hlZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYXNBcnJheShzaGVldC5jc3NSdWxlcyB8fCBbXSkuZm9yRWFjaChjc3NSdWxlcy5wdXNoLmJpbmQoY3NzUnVsZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoaWxlIHJlYWRpbmcgQ1NTIHJ1bGVzIGZyb20gJyArIHNoZWV0LmhyZWYsIGUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3NzUnVsZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5ld1dlYkZvbnQod2ViRm9udFJ1bGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9ICh3ZWJGb250UnVsZS5wYXJlbnRTdHlsZVNoZWV0IHx8IHt9KS5ocmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZXIuaW5saW5lQWxsKHdlYkZvbnRSdWxlLmNzc1RleHQsIGJhc2VVcmwpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzcmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWJGb250UnVsZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdzcmMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdJbWFnZXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmxpbmVBbGw6IGlubGluZUFsbCxcbiAgICAgICAgICAgIGltcGw6IHtcbiAgICAgICAgICAgICAgICBuZXdJbWFnZTogbmV3SW1hZ2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBuZXdJbWFnZShlbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlubGluZTogaW5saW5lXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbmxpbmUoZ2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNEYXRhVXJsKGVsZW1lbnQuc3JjKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlbGVtZW50LnNyYylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZ2V0IHx8IHV0aWwuZ2V0QW5kRW5jb2RlKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuZGF0YUFzVXJsKGRhdGEsIHV0aWwubWltZVR5cGUoZWxlbWVudC5zcmMpKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5vbmxvYWQgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNyYyA9IGRhdGFVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpbmxpbmVBbGwobm9kZSkge1xuICAgICAgICAgICAgaWYgKCF1dGlsLmlzRWxlbWVudChub2RlKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKTtcblxuICAgICAgICAgICAgcmV0dXJuIGlubGluZUJhY2tncm91bmQobm9kZSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzSW1hZ2Uobm9kZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3SW1hZ2Uobm9kZSkuaW5saW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmFzQXJyYXkobm9kZS5jaGlsZE5vZGVzKS5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVBbGwoY2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbmxpbmVCYWNrZ3JvdW5kKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWJhY2tncm91bmQpIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lci5pbmxpbmVBbGwoYmFja2dyb3VuZClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGlubGluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KCdiYWNrZ3JvdW5kJylcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRG9tMkltYWdlLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRG9tMkltYWdlLmpzIiwiaW1wb3J0IHskLCBUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcmFnIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIHZpc3VhbFdvcmxkKSB7XHJcbiAgICB0aGlzLnduZCA9IHduZDtcclxuICAgIHRoaXMuZG9jID0gZG9jO1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWxXb3JsZDtcclxuICAgIHRoaXMuY29vcmRzID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcclxuICAgIHRoaXMuaW50ZXJzZWN0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgIHRoaXMucmF5Y2FzdGVyID0gdGhpcy52aXN1YWwucmF5Y2FzdGVyO1xyXG4gICAgdGhpcy5jYW1lcmEgPSB0aGlzLnZpc3VhbC5jYW1lcmE7XHJcbiAgICB0aGlzLnBsYW5lID0gbmV3IFRIUkVFLlBsYW5lKCk7XHJcbiAgICB0aGlzLnRocmVlcyA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jb250cm9sc1N0YXRlID0gdGhpcy52aXN1YWwuZ2V0Q29udHJvbHNTdGF0ZSgpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMudmlzdWFsLmVsZW1lbnQ7XHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBvbk1vdXNlTW92ZTogdGhpcy5vbk1vdXNlTW92ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBvbk1vdXNlRG93bjogdGhpcy5vbk1vdXNlRG93bi5iaW5kKHRoaXMpLFxyXG4gICAgICBvbk1vdXNlVXA6IHRoaXMub25Nb3VzZVVwLmJpbmQodGhpcylcclxuICAgIH07XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub24oJ21vdXNlbW92ZScsIHRoaXMuYmluZHMub25Nb3VzZU1vdmUpO1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9uKCdtb3VzZWRvd24nLCB0aGlzLmJpbmRzLm9uTW91c2VEb3duKTtcclxuICAgICQodGhpcy5kb2MpLm9uKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5vbk1vdXNlVXApO1xyXG4gIH1cclxuXHJcbiAgYWRkVGhyZWUodGhyZWUpIHtcclxuICAgIHRoaXMudGhyZWVzLnB1c2godGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVGhyZWUodGhyZWUpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnRocmVlcy5pbmRleE9mKHRocmVlKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMudGhyZWVzLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGlja0NhbGxiYWNrKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdDYWxsYmFjaygpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25SZWxlYXNlQ2FsbGJhY2soKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgICQodGhpcy5lbGVtZW50KS5vZmYoJ21vdXNlbW92ZScsIHRoaXMuYmluZHMub25Nb3VzZU1vdmUpO1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9mZignbW91c2Vkb3duJywgdGhpcy5iaW5kcy5vbk1vdXNlRG93bik7XHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ21vdXNldXAnLCB0aGlzLmJpbmRzLm9uTW91c2VVcCk7XHJcbiAgfVxyXG5cclxuICBzZXRDb29yZHNGcm9tRXZlbnQoZSkge1xyXG4gICAgY29uc3QgakVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudCk7XHJcbiAgICBjb25zdCBvZmZzZXQgPSBqRWxlbWVudC5vZmZzZXQoKTtcclxuICAgIHRoaXMuY29vcmRzLnggPSAoKGUucGFnZVgtb2Zmc2V0LmxlZnQpL2pFbGVtZW50LndpZHRoKCkpKjItMTtcclxuICAgIHRoaXMuY29vcmRzLnkgPSAtKChlLnBhZ2VZLW9mZnNldC50b3ApL2pFbGVtZW50LmhlaWdodCgpKSoyKzE7XHJcbiAgICByZXR1cm4gdGhpcy5jb29yZHM7XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlRG93bihlKSB7XHJcbiAgICBpZighdGhpcy5lbmFibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYodGhpcy5zZWxlY3RlZCkgdGhpcy5vbk1vdXNlVXAoZSk7XHJcblxyXG4gICAgdGhpcy5zZXRDb29yZHNGcm9tRXZlbnQoZSk7XHJcbiAgXHR0aGlzLnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHRoaXMuY29vcmRzLCB0aGlzLmNhbWVyYSk7XHJcblxyXG4gIFx0Y29uc3QgaW50ZXJzZWN0cyA9IHRoaXMucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdHModGhpcy50aHJlZXMpO1xyXG4gIFx0aWYoaW50ZXJzZWN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gaW50ZXJzZWN0c1swXS5vYmplY3Q7XHJcbiAgICAgIGlmKCF0aGlzLm9uUGlja0NhbGxiYWNrKGludGVyc2VjdHNbMF0pKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IHYgPSBpbnRlcnNlY3RzWzBdLnBvaW50LmNsb25lKCk7XHJcbiAgICAgIHRoaXMuZGlzdGFuY2UgPSB2LnN1Yih0aGlzLnJheWNhc3Rlci5yYXkub3JpZ2luKS5sZW5ndGgoKTs7XHJcbiAgICAgIHRoaXMuY29udHJvbHNTdGF0ZSA9IHRoaXMudmlzdWFsLmdldENvbnRyb2xzU3RhdGUoKTtcclxuICAgICAgdGhpcy52aXN1YWwuc2V0Q29udHJvbHNTdGF0ZShmYWxzZSk7XHJcbiAgICAgIHRoaXMucGxhbmUuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodGhpcy52aXN1YWwuY2FtZXJhLmdldFdvcmxkRGlyZWN0aW9uKHRoaXMucGxhbmUubm9ybWFsKSwgaW50ZXJzZWN0c1swXS5wb2ludCk7XHJcbiAgICAgIC8vdGhpcy5wbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLnBsYW5lLm5vcm1hbC5zZXQoMCwwLDEpLCBuZXcgVEhSRUUuVmVjdG9yMygwLDAsMCkpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XHJcbiAgXHR9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Nb3VzZU1vdmUoZSkge1xyXG4gICAgaWYoIXRoaXMuZW5hYmxlZCkgcmV0dXJuO1xyXG4gIFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICBcdGlmKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5zZXRDb29yZHNGcm9tRXZlbnQoZSk7XHJcbiAgICBcdHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEodGhpcy5jb29yZHMsIHRoaXMuY2FtZXJhKTtcclxuXHQgICAgaWYodGhpcy5yYXljYXN0ZXIucmF5LmludGVyc2VjdFBsYW5lKHRoaXMucGxhbmUsIHRoaXMuaW50ZXJzZWN0aW9uKSkge1xyXG4gICAgICAgIGlmKCF0aGlzLm9uRHJhZ0NhbGxiYWNrKHRoaXMuaW50ZXJzZWN0aW9uKSkgdGhpcy5vbk1vdXNlVXAoZSk7XHJcbiAgICAgIH0vKiovXHJcbiAgICAgIC8vdGhpcy5pbnRlcnNlY3Rpb24uY29weSh0aGlzLnJheWNhc3Rlci5yYXkuZGlyZWN0aW9uKS5ub3JtYWxpemUoKS5tdWx0aXBseVNjYWxhcih0aGlzLmRpc3RhbmNlKS5hZGQodGhpcy5yYXljYXN0ZXIucmF5Lm9yaWdpbik7LyoqL1xyXG4gICAgICAvL2lmKCF0aGlzLm9uRHJhZ0NhbGxiYWNrKHRoaXMuc2VsZWN0ZWQsIHRoaXMuaW50ZXJzZWN0aW9uKSkgdGhpcy5vbk1vdXNlVXAoZSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBvbk1vdXNlVXAoZSkge1xyXG4gICAgaWYodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLm9uUmVsZWFzZUNhbGxiYWNrKCk7XHJcbiAgXHRcdHRoaXMuc2VsZWN0ZWQgPSBudWxsO1xyXG4gICAgICB0aGlzLnZpc3VhbC5zZXRDb250cm9sc1N0YXRlKHRoaXMuY29udHJvbHNTdGF0ZSk7XHJcbiAgXHR9XHJcbiAgICBpZighdGhpcy5lbmFibGVkKSByZXR1cm47XHJcbiAgXHRlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9EcmFnLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRHJhZy5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbnJlcXVpcmUoJ2ltcG9ydHMtbG9hZGVyP2RlZmluZT0+ZmFsc2UhanF1ZXJ5LW1vdXNld2hlZWwnKSgkKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50c1RvQWN0aW9ucyB7XHJcblxyXG4gIHN0YXRpYyBtb2RLZXlzID0ge1xyXG4gICAgQ3RybDogMSxcclxuICAgIFNoaWZ0OiAyLFxyXG4gICAgQWx0OiA0XHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIG1vdXNlQnV0dG9ucyA9IHtcclxuICAgIExlZnQ6IDAsXHJcbiAgICBNaWRkbGU6IDEsXHJcbiAgICBSaWdodDogMlxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBnZXRFdmVudEZsYWdzKGUpIHtcclxuICAgIHJldHVybiBlLmN0cmxLZXk8PDAgfCBlLnNoaWZ0S2V5PDwxIHwgZS5hbHRLZXk8PDI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0UG9zaXRpb24odG91Y2hlcykge1xyXG4gICAgbGV0IHgsIHk7XHJcbiAgICBpZih0b3VjaGVzLmxlbmd0aD09PTIpIHtcclxuICAgICAgeCA9IHRvdWNoZXNbMV0ucGFnZVgtdG91Y2hlc1swXS5wYWdlWDtcclxuICAgICAgeSA9IHRvdWNoZXNbMV0ucGFnZVktdG91Y2hlc1swXS5wYWdlWTtcclxuICAgICAgeSA9IC1NYXRoLnNxcnQoeCp4K3kqeSk7XHJcbiAgICAgIHggPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHggPSB0b3VjaGVzWzBdLnBhZ2VYO1xyXG4gICAgICB5ID0gdG91Y2hlc1swXS5wYWdlWTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHgsXHJcbiAgICAgIHlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBhY3Rpb25zKSB7XHJcbiAgICB0aGlzLmFjdGlvbnMgPSBhY3Rpb25zIHx8IHt9O1xyXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIHRoaXMuZG9jID0gZWxlbWVudFswXS5vd25lckRvY3VtZW50O1xyXG4gICAgdGhpcy53bmQgPSB0aGlzLmRvYy5kZWZhdWx0VmlldztcclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgY29udGV4dE1lbnU6IHRoaXMuY29udGV4dE1lbnUuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIG1vdXNlRG93bjogdGhpcy5tb3VzZURvd24uYmluZCh0aGlzKSxcclxuICAgICAgbW91c2VNb3ZlOiB0aGlzLm1vdXNlTW92ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBtb3VzZVVwOiB0aGlzLm1vdXNlVXAuYmluZCh0aGlzKSxcclxuICAgICAgbW91c2VXaGVlbDogdGhpcy5tb3VzZVdoZWVsLmJpbmQodGhpcyksXHJcblxyXG4gICAgICBtb3VzZU1vdmVEb2M6IHRoaXMubW91c2VNb3ZlRG9jLmJpbmQodGhpcyksXHJcbiAgICAgIG1vdXNlVXBEb2M6IHRoaXMubW91c2VVcERvYy5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgY2xpY2s6IHRoaXMuY2xpY2suYmluZCh0aGlzKSxcclxuICAgICAgZGJsY2xpY2s6IHRoaXMuZGJsY2xpY2suYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIHRvdWNoU3RhcnQ6IHRoaXMudG91Y2hTdGFydC5iaW5kKHRoaXMpLFxyXG4gICAgICB0b3VjaE1vdmU6IHRoaXMudG91Y2hNb3ZlLmJpbmQodGhpcyksXHJcbiAgICAgIHRvdWNoRW5kOiB0aGlzLnRvdWNoRW5kLmJpbmQodGhpcyksXHJcblxyXG4gICAgICBrZXlEb3duOiB0aGlzLmtleURvd24uYmluZCh0aGlzKSxcclxuICAgICAga2V5UHJlc3M6IHRoaXMua2V5UHJlc3MuYmluZCh0aGlzKSxcclxuICAgICAga2V5VXA6IHRoaXMua2V5VXAuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ2NvbnRleHRtZW51JywgdGhpcy5iaW5kcy5jb250ZXh0TWVudSk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCdtb3VzZWRvd24nLCB0aGlzLmJpbmRzLm1vdXNlRG93bik7XHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ21vdXNlbW92ZScsIHRoaXMuYmluZHMubW91c2VNb3ZlKTtcclxuICAgIHRoaXMuZWxlbWVudC5vbignbW91c2V1cCcsIHRoaXMuYmluZHMubW91c2VVcCk7XHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ21vdXNld2hlZWwnLCB0aGlzLmJpbmRzLm1vdXNlV2hlZWwpO1xyXG5cclxuICAgICQodGhpcy5kb2MpLm9uKCdtb3VzZW1vdmUnLCB0aGlzLmJpbmRzLm1vdXNlTW92ZURvYyk7XHJcbiAgICAkKHRoaXMuZG9jKS5vbignbW91c2V1cCcsIHRoaXMuYmluZHMubW91c2VVcERvYyk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCdjbGljaycsIHRoaXMuYmluZHMuY2xpY2spO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCdkYmxjbGljaycsIHRoaXMuYmluZHMuZGJsY2xpY2spO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5vbigndG91Y2hzdGFydCcsIHRoaXMuYmluZHMudG91Y2hTdGFydCk7XHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ3RvdWNobW92ZScsIHRoaXMuYmluZHMudG91Y2hNb3ZlKTtcclxuICAgIHRoaXMuZWxlbWVudC5vbigndG91Y2hlbmQnLCB0aGlzLmJpbmRzLnRvdWNoRW5kKTtcclxuXHJcbiAgICAkKHRoaXMud25kKS5vbigna2V5ZG93bicsIHRoaXMuYmluZHMua2V5RG93bik7XHJcbiAgICAkKHRoaXMud25kKS5vbigna2V5cHJlc3MnLCB0aGlzLmJpbmRzLmtleVByZXNzKTtcclxuICAgICQodGhpcy53bmQpLm9uKCdrZXl1cCcsIHRoaXMuYmluZHMua2V5VXApO1xyXG4gIH1cclxuXHJcbiAgYWRkQWN0aW9uKGFjdGlvbiwgdHlwZSwgY29kZSwgZmxhZ3MpIHtcclxuICAgIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZighdGhpcy5hY3Rpb25zW3R5cGVdKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uc1t0eXBlXSA9IHt9O1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuYWN0aW9uc1t0eXBlXVtjb2RlXSkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNbdHlwZV1bY29kZV0gPSB7fVxyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuYWN0aW9uc1t0eXBlXVtjb2RlXVtmbGFnc10pIHtcclxuICAgICAgdGhpcy5hY3Rpb25zW3R5cGVdW2NvZGVdW2ZsYWdzXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3Rpb25zW3R5cGVdW2NvZGVdW2ZsYWdzXS5wdXNoKGFjdGlvbik7XHJcbiAgfVxyXG5cclxuICBnZXRBY3Rpb25zKHR5cGUsIGNvZGUsIGZsYWdzKSB7XHJcbiAgICByZXR1cm4gKCh0aGlzLmFjdGlvbnNbdHlwZV0gfHwge30pW2NvZGVdIHx8IHt9KVtmbGFnc10gfHwgW107XHJcbiAgfVxyXG5cclxuICBmaXJlQWN0aW9ucyhhY3Rpb25zLCBlLCBkYXRhKSB7XHJcbiAgICBmb3IobGV0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XHJcbiAgICAgIGFjdGlvbihlLCBkYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnRleHRNZW51KGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucygnY29udGV4dG1lbnUnLCBlLmJ1dHRvbiwgZmxhZ3MpLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlRG93bihlKSB7XHJcbiAgICBpZih0aGlzLnBpY2tlZCkge1xyXG4gICAgICB0aGlzLm1vdXNlVXBEb2MoKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucygnbW91c2Vkb3duJywgZS5idXR0b24sIGZsYWdzKSwgZSk7XHJcbiAgICAgIHRoaXMucGlja2VkID0ge1xyXG4gICAgICAgIHg6IGUucGFnZVgsXHJcbiAgICAgICAgeTogZS5wYWdlWSxcclxuICAgICAgICBhY3Rpb25zOiB0aGlzLmdldEFjdGlvbnMoJ21vdXNlZHJhZycsIGUuYnV0dG9uLCBmbGFncylcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLnBpY2tlZC5hY3Rpb25zLCBlLCB7XHJcbiAgICAgICAgc3RhdGU6ICdzdGFydCdcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZU1vdmUoZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSk7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKCdtb3VzZW1vdmUnLCBlLmJ1dHRvbiwgZmxhZ3MpLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlTW92ZURvYyhlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQgJiYgdGhpcy5waWNrZWQpIHtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLnBpY2tlZC5hY3Rpb25zLCBlLCB7XHJcbiAgICAgICAgc3RhdGU6ICdtb3ZlJyxcclxuICAgICAgICBkeDogZS5wYWdlWC10aGlzLnBpY2tlZC54LFxyXG4gICAgICAgIGR5OiBlLnBhZ2VZLXRoaXMucGlja2VkLnlcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucGlja2VkID0ge1xyXG4gICAgICAgIHg6IGUucGFnZVgsXHJcbiAgICAgICAgeTogZS5wYWdlWSxcclxuICAgICAgICBhY3Rpb25zOiB0aGlzLnBpY2tlZC5hY3Rpb25zXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZVVwKGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucygnbW91c2V1cCcsIGUuYnV0dG9uLCBmbGFncyksIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VVcERvYyhlKSB7XHJcbiAgICBpZih0aGlzLnBpY2tlZCkge1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMucGlja2VkLmFjdGlvbnMsIGUsIHtcclxuICAgICAgICBzdGF0ZTogJ2VuZCdcclxuICAgICAgfSk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLnBpY2tlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlV2hlZWwoZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSk7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKCdtb3VzZXdoZWVsJywgMCwgZmxhZ3MpLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsaWNrcyhlLCB0eXBlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnModHlwZSwgZS5idXR0b24sIGZsYWdzKSwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGljayhlKSB7XHJcbiAgICB0aGlzLmNsaWNrcyhlLCAnY2xpY2snKTtcclxuICB9XHJcblxyXG4gIGRibGNsaWNrKGUpIHtcclxuICAgIHRoaXMuY2xpY2tzKGUsICdkYmxjbGljaycpO1xyXG4gIH1cclxuXHJcbiAgdG91Y2hQaWNrKGUsIGZsYWdzLCB0b3VjaGVzKSB7XHJcbiAgICB0aGlzLnRvdWNoUGlja2VkID0ge1xyXG4gICAgICAuLi5FdmVudHNUb0FjdGlvbnMuZ2V0UG9zaXRpb24odG91Y2hlcyksXHJcbiAgICAgIGFjdGlvbnM6IHRoaXMuZ2V0QWN0aW9ucygndG91Y2hkcmFnJywgdG91Y2hlcy5sZW5ndGgsIGZsYWdzKSxcclxuICAgICAgY29kZTogdG91Y2hlcy5sZW5ndGgsXHJcbiAgICAgIGZsYWdzXHJcbiAgICB9O1xyXG4gICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLnRvdWNoUGlja2VkLmFjdGlvbnMsIGUsIHtcclxuICAgICAgc3RhdGU6ICdzdGFydCdcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG91Y2hTdGFydChlKSB7XHJcbiAgICBpZih0aGlzLnRvdWNoUGlja2VkKSB7XHJcbiAgICAgIHRoaXMudG91Y2hFbmQoZSk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKSwgdG91Y2hlcyA9IGUudG91Y2hlcyB8fCBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcztcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnMoJ3RvdWNoc3RhcnQnLCB0b3VjaGVzLmxlbmd0aCwgZmxhZ3MpLCBlKTtcclxuICAgICAgdGhpcy50b3VjaFBpY2soZSwgZmxhZ3MsIHRvdWNoZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG91Y2hNb3ZlKGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpLCB0b3VjaGVzID0gZS50b3VjaGVzIHx8IGUub3JpZ2luYWxFdmVudC50b3VjaGVzO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucygndG91Y2htb3ZlJywgdG91Y2hlcy5sZW5ndGgsIGZsYWdzKSwgZSk7XHJcbiAgICAgIGlmKHRoaXMudG91Y2hQaWNrZWQpIHtcclxuICAgICAgICBpZih0aGlzLnRvdWNoUGlja2VkLmNvZGU9PT10b3VjaGVzLmxlbmd0aCAmJiB0aGlzLnRvdWNoUGlja2VkLmZsYWdzPT09ZmxhZ3MpIHtcclxuICAgICAgICAgIGNvbnN0IHBvcyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRQb3NpdGlvbih0b3VjaGVzKTtcclxuICAgICAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy50b3VjaFBpY2tlZC5hY3Rpb25zLCBlLCB7XHJcbiAgICAgICAgICAgIHN0YXRlOiAnbW92ZScsXHJcbiAgICAgICAgICAgIGR4OiBwb3MueC10aGlzLnRvdWNoUGlja2VkLngsXHJcbiAgICAgICAgICAgIGR5OiBwb3MueS10aGlzLnRvdWNoUGlja2VkLnlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy50b3VjaFBpY2tlZCA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy50b3VjaFBpY2tlZCxcclxuICAgICAgICAgICAgLi4ucG9zXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG91Y2hFbmQoZSk7XHJcbiAgICAgICAgICB0aGlzLnRvdWNoUGljayhlLCBmbGFncywgdG91Y2hlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b3VjaEVuZChlKSB7XHJcbiAgICBpZih0aGlzLnRvdWNoUGlja2VkKSB7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy50b3VjaFBpY2tlZC5hY3Rpb25zLCBlLCB7XHJcbiAgICAgICAgc3RhdGU6ICdlbmQnXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWxldGUgdGhpcy50b3VjaFBpY2tlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGtleShlLCB0eXBlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnModHlwZSwgZS5rZXlDb2RlLCBmbGFncyksIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5RG93bihlKSB7XHJcbiAgICB0aGlzLmtleShlLCAna2V5ZG93bicpO1xyXG4gIH1cclxuXHJcbiAga2V5UHJlc3MoZSkge1xyXG4gICAgdGhpcy5rZXkoZSwgJ2tleXByZXNzJyk7XHJcbiAgfVxyXG5cclxuICBrZXlVcChlKSB7XHJcbiAgICB0aGlzLmtleShlLCAna2V5dXAnKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCdjb250ZXh0bWVudScsIHRoaXMuYmluZHMuY29udGV4dE1lbnUpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ21vdXNlZG93bicsIHRoaXMuYmluZHMubW91c2VEb3duKTtcclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ21vdXNlbW92ZScsIHRoaXMuYmluZHMubW91c2VNb3ZlKTtcclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ21vdXNldXAnLCB0aGlzLmJpbmRzLm1vdXNlVXApO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9mZignbW91c2V3aGVlbCcsIHRoaXMuYmluZHMubW91c2VXaGVlbCk7XHJcblxyXG4gICAgJCh0aGlzLmRvYykub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLmJpbmRzLm1vdXNlTW92ZURvYyk7XHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ21vdXNldXAnLCB0aGlzLmJpbmRzLm1vdXNlVXBEb2MpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ2NsaWNrJywgdGhpcy5iaW5kcy5jbGljayk7XHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCdkYmxjbGljaycsIHRoaXMuYmluZHMuZGJsY2xpY2spO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ3RvdWNoc3RhcnQnLCB0aGlzLmJpbmRzLnRvdWNoU3RhcnQpO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9mZigndG91Y2htb3ZlJywgdGhpcy5iaW5kcy50b3VjaE1vdmUpO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9mZigndG91Y2hlbmQnLCB0aGlzLmJpbmRzLnRvdWNoRW5kKTtcclxuXHJcbiAgICAkKHRoaXMud25kKS5vZmYoJ2tleWRvd24nLCB0aGlzLmJpbmRzLmtleURvd24pO1xyXG4gICAgJCh0aGlzLnduZCkub2ZmKCdrZXlwcmVzcycsIHRoaXMuYmluZHMua2V5UHJlc3MpO1xyXG4gICAgJCh0aGlzLnduZCkub2ZmKCdrZXl1cCcsIHRoaXMuYmluZHMua2V5VXApO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRXZlbnRzVG9BY3Rpb25zLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRXZlbnRzVG9BY3Rpb25zLmpzIiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZ1bGxTY3JlZW4ge1xyXG5cclxuXHRzdGF0aWMgX2hhc1dlYmtpdEZ1bGxTY3JlZW5cdD0gISFkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuO1xyXG5cdHN0YXRpYyBfaGFzTW96RnVsbFNjcmVlblx0PSAhIWRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW47XHJcblx0c3RhdGljIF9oYXNNc0Z1bGxzY3JlZW4gPSAhIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tc1JlcXVlc3RGdWxsc2NyZWVuO1xyXG5cclxuXHRzdGF0aWMgYXZhaWxhYmxlKCkge1xyXG5cdFx0cmV0dXJuIEZ1bGxTY3JlZW4uX2hhc1dlYmtpdEZ1bGxTY3JlZW4gfHwgRnVsbFNjcmVlbi5faGFzTW96RnVsbFNjcmVlbiB8fCBGdWxsU2NyZWVuLl9oYXNNc0Z1bGxzY3JlZW47XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWN0aXZhdGVkKCkge1xyXG5cdFx0aWYoRnVsbFNjcmVlbi5faGFzV2Via2l0RnVsbFNjcmVlbikge1xyXG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVuO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihGdWxsU2NyZWVuLl9oYXNNb3pGdWxsU2NyZWVuKSB7XHJcblx0XHRcdHJldHVybiBkb2N1bWVudC5tb3pGdWxsU2NyZWVuO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihGdWxsU2NyZWVuLl9oYXNNc0Z1bGxzY3JlZW4pIHtcclxuXHRcdFx0cmV0dXJuICEhZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudDtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmFzc2VydChmYWxzZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBoYW5kbGVyKSB7XHJcblx0XHRpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7XHJcblx0XHQgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRmdWxsc2NyZWVuY2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW96ZnVsbHNjcmVlbmNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdCAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHQgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdNU0Z1bGxzY3JlZW5DaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgcmVtb3ZlRXZlbnRMaXN0ZW5lcihlbGVtZW50LCBoYW5kbGVyKSB7XHJcblx0XHRpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKSB7XHJcblx0XHQgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd3ZWJraXRmdWxsc2NyZWVuY2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0ICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW96ZnVsbHNjcmVlbmNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdCAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Z1bGxzY3JlZW5jaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHQgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdNU0Z1bGxzY3JlZW5DaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgcmVxdWVzdChlbGVtZW50KSB7XHJcblx0XHRlbGVtZW50XHQ9IGVsZW1lbnRcdHx8IGRvY3VtZW50LmJvZHk7XHJcblx0XHRpZihGdWxsU2NyZWVuLl9oYXNXZWJraXRGdWxsU2NyZWVuKSB7XHJcblx0XHRcdGVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxTY3JlZW4oKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoRnVsbFNjcmVlbi5faGFzTW96RnVsbFNjcmVlbikge1xyXG5cdFx0XHRlbGVtZW50Lm1velJlcXVlc3RGdWxsU2NyZWVuKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKEZ1bGxTY3JlZW4uX2hhc01zRnVsbHNjcmVlbikge1xyXG5cdFx0XHRlbGVtZW50Lm1zUmVxdWVzdEZ1bGxzY3JlZW4oKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmFzc2VydChmYWxzZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2FuY2VsKCkge1xyXG5cdFx0aWYoRnVsbFNjcmVlbi5faGFzV2Via2l0RnVsbFNjcmVlbikge1xyXG5cdFx0XHRkb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk7XHJcblx0XHR9ZWxzZSBpZihGdWxsU2NyZWVuLl9oYXNNb3pGdWxsU2NyZWVuKSB7XHJcblx0XHRcdGRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoRnVsbFNjcmVlbi5faGFzTXNGdWxsc2NyZWVuKSB7XHJcblx0XHRcdGRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKTtcclxuXHRcdH1cclxuXHRcdGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmFzc2VydChmYWxzZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9GdWxsU2NyZWVuLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvRnVsbFNjcmVlbi5qcyIsImltcG9ydCB7JCwgaHRtbDJjYW52YXN9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgSW1hZ2VCYXNlIGZyb20gJy4vSW1hZ2VCYXNlJztcclxuaW1wb3J0IEJhc2VNYXRoVXRpbHMgZnJvbSAnLi9CYXNlTWF0aFV0aWxzJztcclxuaW1wb3J0IERvbTJJbWFnZSBmcm9tICcuL0RvbTJJbWFnZSc7XHJcbmltcG9ydCBEb2NNb3VzZVNpbXVsYXRvciBmcm9tICcuL0RvY01vdXNlU2ltdWxhdG9yJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludGVyYWN0aXZlSW1hZ2UgZXh0ZW5kcyBJbWFnZUJhc2Uge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgc3JjLCBjYWNoZSwgaW5qZWN0b3IpIHtcclxuICAgIHN1cGVyKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTtcclxuXHJcbiAgICB0aGlzLmlJZCA9ICdpJytCYXNlTWF0aFV0aWxzLmdldFVuaXF1ZSgpO1xyXG4gICAgY29uc3QgakZyYW1lID0gJCgnPGlmcmFtZSBpZD1cIicrdGhpcy5pSWQrJ1wiIHNyYz1cIicgKyBzcmMgKyAnXCIgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IC0xMDAwcHg7XCI+PC9pZnJhbWU+Jyk7XHJcbiAgICAkKHRoaXMuZG9jLmJvZHkpLmFwcGVuZChqRnJhbWUpO1xyXG4gICAgdGhpcy5mcmFtZSA9IGpGcmFtZVswXTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge307XHJcblxyXG4gICAgaWYoaW5qZWN0b3IpIHtcclxuICAgICAgaW5qZWN0b3IodGhpcy5mcmFtZS5jb250ZW50V2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmRvYy5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCd3d3cuaHR0cDovL3czLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHknLCAnMS4xJykpIHsgLy8gc3ZnIGZvcmVpZ25PYmplY3QgcmVuZGVyZXJcclxuICAgICAgdGhpcy5pbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICB0aGlzLmJpbmRzLmltYWdlTG9hZCA9ICgpPT4ge1xyXG4gICAgICAgIHRoaXMucmVuZGVySW1hZ2UodGhpcy5pbWFnZSk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hSZW5kZXIoKTtcclxuICAgICAgfTtcclxuICAgICAgJCh0aGlzLmltYWdlKS5vbignbG9hZCcsIHRoaXMuYmluZHMuaW1hZ2VMb2FkKTtcclxuICAgICAgdGhpcy5zdmdSZW5kZXIgPSBuZXcgRG9tMkltYWdlKHRoaXMuZnJhbWUuY29udGVudFdpbmRvdywgdGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQsIGNhY2hlKTtcclxuICAgIH0gLy8gb3RoZXJ3aXNlIC0gaHRtbDJjYW52YXNcclxuXHJcbiAgICB0aGlzLmJpbmRzLmZyYW1lTG9hZCA9ICgpPT4ge1xyXG4gICAgICBpZih+dGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQudGl0bGUuaW5kZXhPZignNDA0JykpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0UmVuZGVyID0gKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlck5vdEZvdW5kUGFnZSgpO1xyXG4gICAgICAgICAgdGhpcy5maW5pc2hSZW5kZXIoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgICBpZih0aGlzLmZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSAkKHRoaXMuZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkpLndpZHRoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gJCh0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5KS5oZWlnaHQoKTtcclxuICAgICAgICAgICAgakZyYW1lLmNzcygnd2lkdGgnLCB0aGlzLndpZHRoKydweCcpLmNzcygnaGVpZ2h0JywgdGhpcy5oZWlnaHQrJ3B4Jyk7XHJcbiAgICAgICAgICAgIGpGcmFtZS5vZmZzZXQoe2xlZnQ6IC10aGlzLndpZHRoLTEwMCwgdG9wOiAwfSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc3ZnUmVuZGVyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaW11bGF0b3IgPSBuZXcgRG9jTW91c2VTaW11bGF0b3IoakZyYW1lLCB0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LCB0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2ltdWxhdG9yLmFkZERvY0NoYW5nZUNsYih0aGlzLmZpbmlzaExvYWQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdGFydFJlbmRlciA9ICgpPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICAkKHRoaXMuZnJhbWUuY29udGVudFdpbmRvdykub24oJ2xvYWQnLCB0aGlzLmJpbmRzLmZyYW1lTG9hZCk7XHJcbiAgfVxyXG5cclxuICBnZXRTaW11bGF0ZWREb2MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQ7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBpZih0aGlzLnN2Z1JlbmRlcikge1xyXG4gICAgICB0aGlzLnN2Z1JlbmRlci50b1N2Zyh0aGlzLnNpbXVsYXRvci5lbGVtZW50LCB7aGVpZ2h0OiB0aGlzLmhlaWdodCsncHgnLCB3aWR0aDogdGhpcy53aWR0aCsncHgnfSlcclxuICAgICAgICAudGhlbigoZGF0YVVybCk9PiB7XHJcbiAgICAgICAgICB0aGlzLmltYWdlLnNyYyA9IGRhdGFVcmw7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycm9yKT0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RvbTJJbWFnZTogJywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJCbGFua1BhZ2UoKTtcclxuICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaHRtbDJjYW52YXModGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keSwge3RpbWVvdXQ6IDMwMDAwfSkuXHJcbiAgICAgICAgdGhlbigoY2FudmFzKT0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVySW1hZ2UoY2FudmFzKTtcclxuICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgJCh0aGlzLmltYWdlKS5vZmYoJ2xvYWQnLCB0aGlzLmJpbmRzLmltYWdlTG9hZCk7XHJcbiAgICAkKHRoaXMuZnJhbWUuY29udGVudFdpbmRvdykub2ZmKCdsb2FkJywgdGhpcy5iaW5kcy5mcmFtZUxvYWQpO1xyXG4gICAgJCh0aGlzLmRvYy5ib2R5KS5maW5kKCcjJyt0aGlzLmlJZCkucmVtb3ZlKCk7XHJcbiAgICBpZih0aGlzLmltYWdlKSB7XHJcbiAgICAgIHRoaXMuaW1hZ2Uuc3JjID0gJyc7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmltYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mcmFtZS5zcmMgPSAnJztcclxuICAgIGRlbGV0ZSB0aGlzLmZyYW1lO1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgc2ltdWxhdGUoZSwgZG9jLCB4LCB5KSB7XHJcbiAgICBpZih0aGlzLnNpbXVsYXRvcikge1xyXG4gICAgICB0aGlzLnNpbXVsYXRvci5zaW11bGF0ZShlLCBkb2MsIHgsIHkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvSW50ZXJhY3RpdmVJbWFnZS5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL0ludGVyYWN0aXZlSW1hZ2UuanMiLCJpbXBvcnQgeyQsIHRyfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEdyYXBoVXRpbHMgZnJvbSAnLi9HcmFwaFV0aWxzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICcuL01hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2FkaW5nQW5pbWF0aW9uIHtcclxuXHJcbiAgZHkodCx5KSB7XHJcbiAgICBjb25zdCB3PXlbMF0sIGE9eVsxXTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIC10aGlzLmcqTWF0aC5jb3MoYSksXHJcbiAgICAgIHdcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBpbnRlZ3JhdGUoVCkge1xyXG4gICAgbGV0IHQ9MCwgZHQ9dGhpcy5wLmR0LCBvcyA9IHRoaXMub3M7XHJcbiAgICB3aGlsZSh0PFQpIHtcclxuICAgICAgaWYodCtkdD5UKSB7XHJcbiAgICAgICAgZHQ9VC10O1xyXG4gICAgICB9XHJcbiAgICAgIG9zPU1hdGhVdGlscy5yazQodGhpcy5keS5iaW5kKHtnOiB0aGlzLnAuZ30pLCAwLCBkdCwgb3MpO1xyXG4gICAgICB0Kz1kdDtcclxuICAgIH1cclxuICAgIHJldHVybiBvcztcclxuICB9XHJcblxyXG4gIGNhbGNUaW1lVG8odGFyZ2V0KSB7XHJcbiAgICBsZXQgdD0wLCBkdD10aGlzLnAuZHQsIG9zID0gdGhpcy5vcztcclxuICAgIHdoaWxlKE1hdGguYWJzKG9zWzFdLXRhcmdldCk+MWUtNCkge1xyXG4gICAgICBjb25zdCBub3M9TWF0aFV0aWxzLnJrNCh0aGlzLmR5LmJpbmQoe2c6IHRoaXMucC5nfSksIDAsIGR0LCBvcyk7XHJcbiAgICAgIGlmKG5vc1swXTwwICYmIG5vc1sxXTx0YXJnZXQgfHwgbm9zWzBdPjAgJiYgbm9zWzFdPnRhcmdldCkge1xyXG4gICAgICAgIGR0Lz0yO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIG9zID0gbm9zO1xyXG4gICAgICAgIHQrPWR0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdDtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShUKSB7XHJcbiAgICB0aGlzLm9zID0gdGhpcy5pbnRlZ3JhdGUoVCk7XHJcblxyXG4gICAgdGhpcy50Kz1UXHJcbiAgICBpZih0aGlzLnQ+PXRoaXMucC51cGRhdGVJbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnQgPSAwO1xyXG4gICAgICBjb25zdCByID0gMC4wNipNYXRoLm1pbih0aGlzLmMud2lkdGgsIHRoaXMuYy5oZWlnaHQpLFxyXG4gICAgICAgICAgICBhID0gdGhpcy5vc1sxXSxcclxuICAgICAgICAgICAgeDAgPSAwLjUqdGhpcy5jLndpZHRoLFxyXG4gICAgICAgICAgICB5MCA9IDAuNSp0aGlzLmMuaGVpZ2h0LFxyXG4gICAgICAgICAgICBjdHggPSB0aGlzLmN0eDtcclxuXHJcbiAgICAgIGN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jLndpZHRoLCB0aGlzLmMuaGVpZ2h0KTtcclxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICBjdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKHRoaXMucC5jb2xvciwxKTtcclxuICAgICAgY3R4LnJlY3QoMCwgMCwgdGhpcy5jLndpZHRoLCB0aGlzLmMuaGVpZ2h0KTtcclxuICAgICAgY3R4LmZpbGwoKTtcclxuXHJcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgY3R4LnNoYWRvd0JsdXIgPSA1MDtcclxuICAgICAgY3R4LmZpbGxTdHlsZSA9IEdyYXBoVXRpbHMuY29sb3IyUmdiYShHcmFwaFV0aWxzLmludmVyc2VDb2xvcih0aGlzLnAuY29sb3IsMC45KSxNYXRoLmFicyh0aGlzLm9zWzBdLzYuMzYpKTtcclxuICAgICAgY3R4LnNoYWRvd0NvbG9yID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKEdyYXBoVXRpbHMuaW52ZXJzZUNvbG9yKHRoaXMucC5jb2xvciwxKSwwLjkpO1xyXG4gICAgICBjdHguc2hhZG93T2Zmc2V0WCA9IDA7XHJcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRZID0gMDtcclxuICAgICAgY3R4LmZvbnQ9J2JvbGQgJytNYXRoLnJvdW5kKDAuMjUqcikrJ3B4IEFyaWFsJztcclxuICAgICAgY3R4LnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICBjdHgudGV4dEJhc2VsaW5lID0gJ21pZGRsZSc7XHJcbiAgICAgIGN0eC5maWxsVGV4dCh0cignTG9hZGluZy4uLicpLHgwLHkwKTtcclxuXHJcbiAgICAgIGNvbnN0IHBzID0gMTAsIGRhPTIqTWF0aC5QSS9wczsvLzIuNSpfci9yXHJcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IEdyYXBoVXRpbHMuY29sb3IyUmdiYShHcmFwaFV0aWxzLmludmVyc2VDb2xvcih0aGlzLnAuY29sb3IsMSksMC43KTtcclxuICAgICAgZm9yKGxldCBpPTAsIF9hPWEsIF9yPTAuMipyOyBpPHBzOyArK2ksIF9yKj0wLjksIF9hKz1kYSkge1xyXG4gICAgICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgICAgICBjdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKEdyYXBoVXRpbHMuaW52ZXJzZUNvbG9yKHRoaXMucC5jb2xvciwocHMtaSkvcHMpLDAuNyoocHMtaSkvcHMpO1xyXG4gICAgICAgIGNvbnN0IGN4PXgwK3IqTWF0aC5jb3MoX2EpLCBjeT15MC1yKk1hdGguc2luKF9hKSwgbng9eDArcipNYXRoLmNvcyhfYStkYSksIG55PXkwLXIqTWF0aC5zaW4oX2ErZGEpO1xyXG4gICAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMC4yKihueC1jeCk7XHJcbiAgICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwLjIqKG55LWN5KTtcclxuICAgICAgICBjdHguYXJjKGN4LCBjeSwgX3IsIDAsIE1hdGguUEkqMiwgMSk7XHJcbiAgICAgICAgY3R4LmZpbGwoKTtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLm9uQ2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmMsIHRoaXMucC5jb2xvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEltYWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYztcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmMud2lkdGggPSAwO1xyXG4gICAgdGhpcy5jLmhlaWdodCA9IDA7XHJcbiAgICBkZWxldGUgdGhpcy5jdHg7XHJcbiAgICBkZWxldGUgdGhpcy5jO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU3ByaXRlKG4pIHtcclxuICAgIGNvbnN0IGMgPSAkKCc8Y2FudmFzIHdpZHRoPVwiJyt0aGlzLmMud2lkdGgqbisnXCIgaGVpZ2h0PVwiJyt0aGlzLmMuaGVpZ2h0KydcIj48L2NhbnZhcz4nKVswXSwgY3R4ID0gYy5nZXRDb250ZXh0KCcyZCcpLFxyXG4gICAgdCA9IHRoaXMuY2FsY1RpbWVUbyh0aGlzLm9zWzFdK01hdGguc2lnbih0aGlzLm9zWzBdKSoyKk1hdGguUEkpLCBkdD10LyhuKzEpO1xyXG4gICAgY29uc3Qge3VwZGF0ZUludGVydmFsfSA9IHRoaXMucDtcclxuICAgIHRoaXMucC51cGRhdGVJbnRlcnZhbCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxuOyArK2kpIHtcclxuICAgICAgdGhpcy51cGRhdGUoZHQpO1xyXG4gICAgICBjdHguZHJhd0ltYWdlKHRoaXMuYywgaSp0aGlzLmMud2lkdGgsIDApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wLnVwZGF0ZUludGVydmFsID0gdXBkYXRlSW50ZXJ2YWw7XHJcbiAgICByZXR1cm4gYztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7XHJcbiAgICBjb25zdCBqQyA9ICQoJzxjYW52YXMgd2lkdGg9XCInK3dpZHRoKydcIiBoZWlnaHQ9XCInK2hlaWdodCsnXCI+PC9jYW52YXM+Jyk7XHJcbiAgICB0aGlzLmMgPSBqQ1swXTtcclxuICAgIHRoaXMucCA9IHtcclxuICAgICAgZzogOS44LFxyXG4gICAgICBkdDogMS82MCxcclxuICAgICAgY29sb3IsXHJcbiAgICAgIHVwZGF0ZUludGVydmFsOiAwLjI1XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jdHggPSB0aGlzLmMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIHRoaXMub3MgPSBbLTIsIE1hdGguUEkvMl07XHJcbiAgICB0aGlzLnQgPSB0aGlzLnAudXBkYXRlSW50ZXJ2YWw7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Mb2FkaW5nQW5pbWF0aW9uLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvTG9hZGluZ0FuaW1hdGlvbi5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2FkaW5nQ29udHJvbGxlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpZXcsIHNob3dQcm9ncmVzcz10cnVlLCBsb2FkaW5nTXNnPXVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy52aWV3ID0gdmlldztcclxuICAgIHRoaXMucHJvZ3Jlc3MgPSAwO1xyXG4gICAgdGhpcy5zaG93UHJvZ3Jlc3MgPSBzaG93UHJvZ3Jlc3M7XHJcbiAgICB0aGlzLmdldExvYWRpbmdNc2cgPSBsb2FkaW5nTXNnIHx8IExvYWRpbmdDb250cm9sbGVyLmRlZmF1bHRMb2FkaW5nTXNnO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGVmYXVsdExvYWRpbmdNc2cocHJvZ3Jlc3MpIHtcclxuICAgIHJldHVybiBbJ1BsZWFzZSB3YWl0Li4uIHRoZSBBcHBsaWNhdGlvbiBpcyBMb2FkaW5nOiAnLCBwcm9ncmVzcywgJyUnXS5qb2luKCcnKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnNob3dQcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICBkZWxldGUgdGhpcy52aWV3O1xyXG4gIH1cclxuXHJcbiAgc2V0UHJvZ3Jlc3Modikge1xyXG4gICAgdGhpcy5wcm9ncmVzcyA9IHY7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZXcoKSB7XHJcbiAgICBpZih0aGlzLnZpZXcpIHtcclxuXHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnd2lkTG9hZGluZ1Byb2dyZXNzJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLnNob3dQcm9ncmVzcyxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCd0eHRMb2FkaW5nUHJvZ3Jlc3MnLCB7XHJcbiAgICAgICAgdmFsdWU6IHRoaXMuZ2V0TG9hZGluZ01zZyh0aGlzLnByb2dyZXNzKSxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZm9yKGxldCBuYW1lIG9mIHRoaXMudmlldy5nZXRMaW5rcygpKSB7XHJcbiAgICAgICAgdGhpcy52aWV3LnNldFN0YXRlKG5hbWUsIHtcclxuICAgICAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ2lucFBhZ2VzJywge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCdpbnBQYWdlJywge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlOiBmYWxzZSxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvTG9hZGluZ0NvbnRyb2xsZXIuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9Mb2FkaW5nQ29udHJvbGxlci5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBFdmVudENvbnZlcnRlciBmcm9tICcuL0V2ZW50Q29udmVydGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vdXNlRXZlbnRDb252ZXJ0ZXIgZXh0ZW5kcyBFdmVudENvbnZlcnRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHduZCwgZG9jLCBlbGVtZW50KSB7XHJcbiAgICBzdXBlcih3bmQsIGRvYyk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIGNvbnZlcnQ6IHRoaXMuY29udmVydC5iaW5kKHRoaXMpXHJcbiAgICB9O1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9uKCdtb3VzZW1vdmUgbW91c2Vkb3duIG1vdXNlb3ZlciBtb3VzZW91dCBjbGljaycsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgICAkKHRoaXMuZG9jKS5vbignbW91c2V1cCcsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9mZignbW91c2Vtb3ZlIG1vdXNlZG93biBtb3VzZW92ZXIgbW91c2VvdXQgY2xpY2snLCB0aGlzLmJpbmRzLmNvbnZlcnQpO1xyXG4gICAgJCh0aGlzLmRvYykub2ZmKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvTW91c2VFdmVudENvbnZlcnRlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL01vdXNlRXZlbnRDb252ZXJ0ZXIuanMiLCJpbXBvcnQge1RIUkVFfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICcuL01hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPYmplY3QzRFdhdGNoZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aXN1YWwsIGJvdW5kQm94Q2xiLCB0ZXN0U2NhbGU9dGhpcy50ZXN0U2NhbGUpIHtcclxuICAgIHRoaXMudmlzdWFsID0gdmlzdWFsO1xyXG4gICAgdGhpcy5ib3VuZEJveENsYiA9IGJvdW5kQm94Q2xiO1xyXG4gICAgdGhpcy50ZXN0U2NhbGUgPSB0ZXN0U2NhbGU7XHJcbiAgICB0aGlzLmNhbWVyYSA9IHZpc3VhbC5jYW1lcmE7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSB0aGlzLnZpc3VhbC5lbGVtZW50O1xyXG4gICAgdGhpcy5lbGVtZW50U2l6ZSA9IHt3OiAxLCBoOiAxfTtcclxuICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHRoaXMudmlzdWFsLnduZC5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XHJcbiAgICB0aGlzLm9yYml0ID0gdmlzdWFsLmdldE9yYml0KCk7XHJcbiAgICB0aGlzLnNjYWxlID0gMTtcclxuXHJcbiAgICB0aGlzLmVwcyA9IDFlLTQ7XHJcbiAgICB0aGlzLnYgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgdGhpcy5kdiA9IG5ldyBUSFJFRS5WZWN0b3IyKCk7XHJcblxyXG4gICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgdmlzdWFsLmFkZFJlbmRlckNhbGxiYWNrKHRoaXMudXBkYXRlLmJpbmQodGhpcykpO1xyXG5cclxuICAgIHRoaXMub3MgPSB7XHJcbiAgICAgIHZ4OiAwLFxyXG4gICAgICB2eTogMCxcclxuICAgICAgeDogMCxcclxuICAgICAgeTogMFxyXG4gICAgfTtcclxuICAgIHRoaXMub3JiaXQudXBkYXRlKCk7XHJcbiAgICB0aGlzLmNhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG4gICAgbGV0IGJveCA9IHRoaXMuY29tcHV0ZUNsaWVudEJvdW5kQm94KCksIGs9MS4xMTtcclxuICAgIHRoaXMubW92ZVBhbih7eDogLWsqYm94Lm1pZC54LCB5OiAtaypib3gubWlkLnl9KTtcclxuICB9XHJcblxyXG4gIG1vdmVQYW4oZHYpIHtcclxuICAgIHRoaXMub3JiaXQucGFuKGR2LngqdGhpcy52aXN1YWwud2lkdGgoKSwgLWR2LnkqdGhpcy52aXN1YWwuaGVpZ2h0KCkpO1xyXG4gIH1cclxuXHJcbiAgdlRvQ2FtZXJhKHYpIHtcclxuICAgIHYucHJvamVjdCh0aGlzLmNhbWVyYSk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4OiAwLjUqdi54LFxyXG4gICAgICB5OiAwLjUqdi55XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZUNsaWVudEJvdW5kQm94KCkge1xyXG4gICAgY29uc3QgYm94ID0gdGhpcy5ib3VuZEJveENsYigpLFxyXG4gICAgICB4cyA9IFtib3gubWluLngsIGJveC5tYXgueF0sXHJcbiAgICAgIHlzID0gWzAsIDBdLFxyXG4gICAgICB6cyA9IFtib3gubWluLnosIGJveC5tYXguel07XHJcblxyXG4gICAgY29uc3QgcHMgPSBbXSwgcmVzID0ge21heDoge30sIG1pbjoge319O1xyXG4gICAgZm9yKGxldCB4IG9mIHhzKSB7XHJcbiAgICAgIGZvcihsZXQgeSBvZiB5cykge1xyXG4gICAgICAgIGZvcihsZXQgeiBvZiB6cykge1xyXG4gICAgICAgICAgcHMucHVzaCh0aGlzLnZUb0NhbWVyYSh0aGlzLnYuc2V0KHgseSx6KSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHBzLnNvcnQoKHAxLCBwMik9PiBwMS54LXAyLngpO1xyXG4gICAgcmVzLm1pbi54ID0gcHNbMF0ueDtcclxuICAgIHJlcy5tYXgueCA9IHBzW3BzLmxlbmd0aC0xXS54O1xyXG4gICAgcHMuc29ydCgocDEsIHAyKT0+IHAxLnktcDIueSk7XHJcbiAgICByZXMubWluLnkgPSBwc1swXS55O1xyXG4gICAgcmVzLm1heC55ID0gcHNbcHMubGVuZ3RoLTFdLnk7XHJcblxyXG4gICAgcmVzLndpZHRoID0gcmVzLm1heC54LXJlcy5taW4ueDtcclxuICAgIHJlcy5oZWlnaHQgPSByZXMubWF4LnktcmVzLm1pbi55O1xyXG5cclxuICAgIHJlcy5taWQgPSB7XHJcbiAgICAgIHg6IDAuNSoocmVzLm1heC54K3Jlcy5taW4ueCksXHJcbiAgICAgIHk6IDAuNSoocmVzLm1heC55K3Jlcy5taW4ueSlcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHNldE9iamVjdChib3VuZEJveENsYikge1xyXG4gICAgdGhpcy5ib3VuZEJveENsYiA9IGJvdW5kQm94Q2xiO1xyXG4gIH1cclxuXHJcbiAgdGVzdFNjYWxlKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBjb21wdXRlQ29ycihLLCBtaW4sIG1heCkge1xyXG4gICAgbGV0IGNvcnIgPSAwO1xyXG4gICAgaWYoSzwxKSB7XHJcbiAgICAgIGlmKG1pbj4tMC41KSB7XHJcbiAgICAgICAgY29yciA9IC0wLjUtbWluO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYobWF4PDAuNSkge1xyXG4gICAgICAgIGNvcnIgPSAwLjUtbWF4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYobWluPC0wLjUpIHtcclxuICAgICAgICBjb3JyID0gLTAuNS1taW47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihtYXg+MC41KSB7XHJcbiAgICAgICAgY29yciA9IDAuNS1tYXg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjb3JyO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NhbGUoKSB7XHJcbiAgICBjb25zdCBib3ggPSB0aGlzLmNvbXB1dGVDbGllbnRCb3VuZEJveCgpLFxyXG4gICAgICBLeCA9IHRoaXMuZWxlbWVudFNpemUudy9ib3gud2lkdGgsXHJcbiAgICAgIEt5ID0gdGhpcy5lbGVtZW50U2l6ZS5oL2JveC5oZWlnaHQ7XHJcbiAgICByZXR1cm4gMS9NYXRoLm1pbihLeCwgS3kpO1xyXG4gIH1cclxuXHJcbiAgY2VudGVyVmlldyhUKSB7XHJcbiAgICBsZXQgYm94ID0gdGhpcy5jb21wdXRlQ2xpZW50Qm91bmRCb3goKSxcclxuICAgICAgS3ggPSB0aGlzLmVsZW1lbnRTaXplLncvYm94LndpZHRoLFxyXG4gICAgICBLeSA9IHRoaXMuZWxlbWVudFNpemUuaC9ib3guaGVpZ2h0LFxyXG4gICAgICBLID0gTWF0aC5taW4oS3gsIEt5KTtcclxuXHJcbiAgICBpZih0aGlzLnRlc3RTY2FsZSgpICYmIE1hdGguYWJzKDEvSy10aGlzLnNjYWxlKT50aGlzLmVwcykge1xyXG4gICAgICBjb25zdCBzY2FsZSA9IDEvSyswLjIqKHRoaXMuc2NhbGUtMS9LKTtcclxuICAgICAgdGhpcy5vcmJpdC5zZXRTY2FsZSh0aGlzLm9yYml0LmdldFNjYWxlKCkvKEsqc2NhbGUpKTtcclxuICAgICAgdGhpcy5vcmJpdC51cGRhdGUoKTtcclxuICAgICAgdGhpcy5jYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcclxuICAgICAgYm94ID0gdGhpcy5jb21wdXRlQ2xpZW50Qm91bmRCb3goKTtcclxuICAgICAgICBLeCA9IHRoaXMuZWxlbWVudFNpemUudy9ib3gud2lkdGg7XHJcbiAgICAgICAgS3kgPSB0aGlzLmVsZW1lbnRTaXplLmgvYm94LmhlaWdodDtcclxuICAgICAgICBLID0gTWF0aC5taW4oS3gsIEt5KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkdiA9IHRoaXMuZHY7XHJcbiAgICBpZihLPjEtdGhpcy5lcHMpIHtcclxuICAgICAgZHYuc2V0KC1ib3gubWlkLngsIC1ib3gubWlkLnkpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGR2LnNldCh0aGlzLmNvbXB1dGVDb3JyKEt4LCBib3gubWluLngsIGJveC5tYXgueCksXHJcbiAgICAgICAgICAgICB0aGlzLmNvbXB1dGVDb3JyKEt5LCBib3gubWluLnksIGJveC5tYXgueSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKE1hdGguc3FydCh0aGlzLm9zLnZ4KnRoaXMub3MudngrdGhpcy5vcy52eSp0aGlzLm9zLnZ5KT4wLjAwMyB8fCBkdi5sZW5ndGgoKT4wLjAwMykge1xyXG4gICAgICBsZXQgZHQgPSAxLzYwLCB0PTAsIG9zID0ge1xyXG4gICAgICAgIC4uLnRoaXMub3MsXHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwXHJcbiAgICAgIH07XHJcbiAgICAgIG9zLnRmID0gKHZ4LCB2eSwgeCwgeSk9PiAoe1xyXG4gICAgICAgIHg6IDc1Kihkdi54LXgpL01hdGgucG93KHRoaXMuZGV2aWNlUGl4ZWxSYXRpbywgMS4wKSxcclxuICAgICAgICB5OiA3NSooZHYueS15KS9NYXRoLnBvdyh0aGlzLmRldmljZVBpeGVsUmF0aW8sIDEuMClcclxuICAgICAgfSk7XHJcbiAgICAgIHdoaWxlKHQ8VCkge1xyXG4gICAgICAgIGlmKHQrZHQ+VCkge1xyXG4gICAgICAgICAgZHQgPSBULXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9zID0gdGhpcy5pbnRlZ3JhdGUob3MsIGR0KTtcclxuICAgICAgICB0ICs9IGR0O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubW92ZVBhbihvcyk7XHJcbiAgICAgIHRoaXMub3MgPSBvcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGludGVncmF0ZShvcywgZHQpIHtcclxuICAgIGNvbnN0IFt2eCwgdnksIHgsIHldID0gTWF0aFV0aWxzLnJrNChcclxuICAgICAgdGhpcy5keS5iaW5kKG9zKSxcclxuICAgICAgMCxcclxuICAgICAgZHQsXHJcbiAgICAgIFtvcy52eCwgb3MudnksIG9zLngsIG9zLnldXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4ub3MsXHJcbiAgICAgIHZ4LCB2eSwgeCwgeVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGR5KHQsWSkge1xyXG4gICAgY29uc3QgW3Z4LCB2eSwgeCwgeV0gPSBZLCB2ZCA9IDE1LCB0ZiA9IHRoaXMudGYodngsIHZ5LCB4LCB5KTtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIHRmLngtdmQqdngsXHJcbiAgICAgIHRmLnktdmQqdnksXHJcbiAgICAgIHZ4LFxyXG4gICAgICB2eVxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkdCkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkICYmIHRoaXMuYm91bmRCb3hDbGIpIHtcclxuICAgICAgdGhpcy5jZW50ZXJWaWV3KGR0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL09iamVjdDNEV2F0Y2hlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL09iamVjdDNEV2F0Y2hlci5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JiaXQgZXh0ZW5kcyBUSFJFRS5FdmVudERpc3BhdGNoZXIge1xyXG5cclxuICBjb25zdHJ1Y3RvcihvYmplY3QsIGRvbUVsZW1lbnQpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgXHR0aGlzLm9iamVjdCA9IG9iamVjdDtcclxuICBcdHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keTtcclxuXHJcbiAgXHQvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGlzIGNvbnRyb2xcclxuICBcdHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gIFx0Ly8gXCJ0YXJnZXRcIiBzZXRzIHRoZSBsb2NhdGlvbiBvZiBmb2N1cywgd2hlcmUgdGhlIG9iamVjdCBvcmJpdHMgYXJvdW5kXHJcbiAgXHR0aGlzLnRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcblxyXG4gIFx0Ly8gSG93IGZhciB5b3UgY2FuIGRvbGx5IGluIGFuZCBvdXQoUGVyc3BlY3RpdmVDYW1lcmEgb25seSlcclxuICBcdHRoaXMubWluRGlzdGFuY2UgPSAwO1xyXG4gIFx0dGhpcy5tYXhEaXN0YW5jZSA9IEluZmluaXR5O1xyXG5cclxuICBcdC8vIEhvdyBmYXIgeW91IGNhbiB6b29tIGluIGFuZCBvdXQoT3J0aG9ncmFwaGljQ2FtZXJhIG9ubHkpXHJcbiAgXHR0aGlzLm1pblpvb20gPSAwO1xyXG4gIFx0dGhpcy5tYXhab29tID0gSW5maW5pdHk7XHJcblxyXG4gIFx0Ly8gSG93IGZhciB5b3UgY2FuIG9yYml0IHZlcnRpY2FsbHksIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuXHJcbiAgXHQvLyBSYW5nZSBpcyAwIHRvIE1hdGguUEkgcmFkaWFucy5cclxuICBcdHRoaXMubWluUG9sYXJBbmdsZSA9IDA7IC8vIHJhZGlhbnNcclxuICBcdHRoaXMubWF4UG9sYXJBbmdsZSA9IE1hdGguUEk7IC8vIHJhZGlhbnNcclxuXHJcbiAgXHQvLyBIb3cgZmFyIHlvdSBjYW4gb3JiaXQgaG9yaXpvbnRhbGx5LCB1cHBlciBhbmQgbG93ZXIgbGltaXRzLlxyXG4gIFx0Ly8gSWYgc2V0LCBtdXN0IGJlIGEgc3ViLWludGVydmFsIG9mIHRoZSBpbnRlcnZhbCBbLU1hdGguUEksIE1hdGguUEkgXS5cclxuICBcdHRoaXMubWluQXppbXV0aEFuZ2xlID0gLUluZmluaXR5OyAvLyByYWRpYW5zXHJcbiAgXHR0aGlzLm1heEF6aW11dGhBbmdsZSA9IEluZmluaXR5OyAvLyByYWRpYW5zXHJcblxyXG4gIFx0Ly8gU2V0IHRvIHRydWUgdG8gZW5hYmxlIGRhbXBpbmcgKGluZXJ0aWEpXHJcbiAgXHQvLyBJZiBkYW1waW5nIGlzIGVuYWJsZWQsIHlvdSBtdXN0IGNhbGwgY29udHJvbHMudXBkYXRlKCkgaW4geW91ciBhbmltYXRpb24gbG9vcFxyXG4gIFx0dGhpcy5lbmFibGVEYW1waW5nID0gZmFsc2U7XHJcbiAgXHR0aGlzLmRhbXBpbmdGYWN0b3IgPSAwLjI1O1xyXG5cclxuICBcdC8vIFRoaXMgb3B0aW9uIGFjdHVhbGx5IGVuYWJsZXMgZG9sbHlpbmcgaW4gYW5kIG91dDsgbGVmdCBhcyBcInpvb21cIiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXHJcbiAgXHQvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB6b29taW5nXHJcbiAgXHR0aGlzLmVuYWJsZVpvb20gPSB0cnVlO1xyXG4gIFx0dGhpcy56b29tU3BlZWQgPSAxLjA7XHJcblxyXG4gIFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcm90YXRpbmdcclxuICBcdHRoaXMuZW5hYmxlUm90YXRlID0gdHJ1ZTtcclxuICBcdHRoaXMucm90YXRlU3BlZWQgPSAxLjA7XHJcblxyXG4gIFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcGFubmluZ1xyXG4gIFx0dGhpcy5lbmFibGVQYW4gPSB0cnVlO1xyXG5cclxuICBcdC8vIFNldCB0byB0cnVlIHRvIGF1dG9tYXRpY2FsbHkgcm90YXRlIGFyb3VuZCB0aGUgdGFyZ2V0XHJcbiAgXHQvLyBJZiBhdXRvLXJvdGF0ZSBpcyBlbmFibGVkLCB5b3UgbXVzdCBjYWxsIGNvbnRyb2xzLnVwZGF0ZSgpIGluIHlvdXIgYW5pbWF0aW9uIGxvb3BcclxuICBcdHRoaXMuYXV0b1JvdGF0ZSA9IGZhbHNlO1xyXG4gIFx0dGhpcy5hdXRvUm90YXRlU3BlZWQgPSAyLjA7IC8vIDMwIHNlY29uZHMgcGVyIHJvdW5kIHdoZW4gZnBzIGlzIDYwXHJcblxyXG4gIFx0Ly8gZm9yIHJlc2V0XHJcbiAgXHR0aGlzLnRhcmdldDAgPSB0aGlzLnRhcmdldC5jbG9uZSgpO1xyXG4gIFx0dGhpcy5wb3NpdGlvbjAgPSB0aGlzLm9iamVjdC5wb3NpdGlvbi5jbG9uZSgpO1xyXG4gIFx0dGhpcy56b29tMCA9IHRoaXMub2JqZWN0Lnpvb207XHJcblxyXG4gIFx0Ly9cclxuICBcdC8vIHB1YmxpYyBtZXRob2RzXHJcbiAgXHQvL1xyXG4gIFx0dGhpcy5nZXRQb2xhckFuZ2xlID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gc3BoZXJpY2FsLnBoaTtcclxuICBcdH07XHJcblxyXG4gIFx0dGhpcy5nZXRBemltdXRoYWxBbmdsZSA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHNwaGVyaWNhbC50aGV0YTtcclxuICBcdH07XHJcblxyXG4gIFx0dGhpcy5yZXNldCA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0c2NvcGUudGFyZ2V0LmNvcHkoc2NvcGUudGFyZ2V0MCk7XHJcbiAgXHRcdHNjb3BlLm9iamVjdC5wb3NpdGlvbi5jb3B5KHNjb3BlLnBvc2l0aW9uMCk7XHJcbiAgXHRcdHNjb3BlLm9iamVjdC56b29tID0gc2NvcGUuem9vbTA7XHJcblxyXG4gIFx0XHRzY29wZS5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gIFx0XHRzY29wZS5kaXNwYXRjaEV2ZW50KGNoYW5nZUV2ZW50KTtcclxuXHJcbiAgXHRcdHNjb3BlLnVwZGF0ZSgpO1xyXG4gIFx0fTtcclxuXHJcbiAgICB0aGlzLnpvb21PdXQgPSBmdW5jdGlvbihzcGVlZD10aGlzLnpvb21TcGVlZCkge1xyXG4gICAgICBjb25zdCBfc3BlZWQgPSB0aGlzLnpvb21TcGVlZDtcclxuICAgICAgdGhpcy56b29tU3BlZWQgPSBzcGVlZDtcclxuICAgICAgZG9sbHlJbihnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgIHRoaXMuem9vbVNwZWVkID0gX3NwZWVkO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnpvb21JbiA9IGZ1bmN0aW9uKHNwZWVkPXRoaXMuem9vbVNwZWVkKSB7XHJcbiAgICAgIGNvbnN0IF9zcGVlZCA9IHRoaXMuem9vbVNwZWVkO1xyXG4gICAgICB0aGlzLnpvb21TcGVlZCA9IHNwZWVkO1xyXG4gICAgICBkb2xseU91dChnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgIHRoaXMuem9vbVNwZWVkID0gX3NwZWVkO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldFNjYWxlID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgIHJldHVybiBzY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldFNjYWxlID0gZnVuY3Rpb24obmV3U2NhbGUpIHtcclxuICAgICAgc2NhbGUgPSBuZXdTY2FsZTtcclxuICAgIH1cclxuXHJcbiAgXHQvLyB0aGlzIG1ldGhvZCBpcyBleHBvc2VkLCBidXQgcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY2FuIG1ha2UgaXQgcHJpdmF0ZS4uLlxyXG4gIFx0dGhpcy51cGRhdGUgPSBmdW5jdGlvbigpIHtcclxuICBcdFx0dmFyIG9mZnNldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgXHRcdC8vIHNvIGNhbWVyYS51cCBpcyB0aGUgb3JiaXQgYXhpc1xyXG4gIFx0XHR2YXIgcXVhdCA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkuc2V0RnJvbVVuaXRWZWN0b3JzKG9iamVjdC51cCwgbmV3IFRIUkVFLlZlY3RvcjMoMCwgMSwgMCkpO1xyXG4gIFx0XHR2YXIgcXVhdEludmVyc2UgPSBxdWF0LmNsb25lKCkuaW52ZXJzZSgpO1xyXG4gIFx0XHR2YXIgbGFzdFBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBcdFx0dmFyIGxhc3RRdWF0ZXJuaW9uID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcclxuXHJcbiAgXHRcdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKCkge1xyXG4gIFx0XHRcdHZhciBwb3NpdGlvbiA9IHNjb3BlLm9iamVjdC5wb3NpdGlvbjtcclxuICBcdFx0XHRvZmZzZXQuY29weShwb3NpdGlvbikuc3ViKHNjb3BlLnRhcmdldCk7XHJcbiAgXHRcdFx0Ly8gcm90YXRlIG9mZnNldCB0byBcInktYXhpcy1pcy11cFwiIHNwYWNlXHJcbiAgXHRcdFx0b2Zmc2V0LmFwcGx5UXVhdGVybmlvbihxdWF0KTtcclxuICBcdFx0XHQvLyBhbmdsZSBmcm9tIHotYXhpcyBhcm91bmQgeS1heGlzXHJcbiAgXHRcdFx0c3BoZXJpY2FsLnNldEZyb21WZWN0b3IzKG9mZnNldCk7XHJcbiAgXHRcdFx0aWYoc2NvcGUuYXV0b1JvdGF0ZSkge1xyXG4gIFx0XHRcdFx0cm90YXRlTGVmdChnZXRBdXRvUm90YXRpb25BbmdsZSgpKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0c3BoZXJpY2FsLnRoZXRhICs9IHNwaGVyaWNhbERlbHRhLnRoZXRhO1xyXG4gIFx0XHRcdHNwaGVyaWNhbC5waGkgKz0gc3BoZXJpY2FsRGVsdGEucGhpO1xyXG4gIFx0XHRcdC8vIHJlc3RyaWN0IHRoZXRhIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcclxuICBcdFx0XHRzcGhlcmljYWwudGhldGEgPSBNYXRoLm1heChzY29wZS5taW5BemltdXRoQW5nbGUsIE1hdGgubWluKHNjb3BlLm1heEF6aW11dGhBbmdsZSwgc3BoZXJpY2FsLnRoZXRhKSk7XHJcbiAgXHRcdFx0Ly8gcmVzdHJpY3QgcGhpIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcclxuICBcdFx0XHRzcGhlcmljYWwucGhpID0gTWF0aC5tYXgoc2NvcGUubWluUG9sYXJBbmdsZSwgTWF0aC5taW4oc2NvcGUubWF4UG9sYXJBbmdsZSwgc3BoZXJpY2FsLnBoaSkpO1xyXG4gIFx0XHRcdHNwaGVyaWNhbC5tYWtlU2FmZSgpO1xyXG4gIFx0XHRcdHNwaGVyaWNhbC5yYWRpdXMgKj0gc2NhbGU7XHJcbiAgXHRcdFx0Ly8gcmVzdHJpY3QgcmFkaXVzIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcclxuICBcdFx0XHRzcGhlcmljYWwucmFkaXVzID0gTWF0aC5tYXgoc2NvcGUubWluRGlzdGFuY2UsIE1hdGgubWluKHNjb3BlLm1heERpc3RhbmNlLCBzcGhlcmljYWwucmFkaXVzKSk7XHJcbiAgXHRcdFx0Ly8gbW92ZSB0YXJnZXQgdG8gcGFubmVkIGxvY2F0aW9uXHJcbiAgXHRcdFx0c2NvcGUudGFyZ2V0LmFkZChwYW5PZmZzZXQpO1xyXG4gIFx0XHRcdG9mZnNldC5zZXRGcm9tU3BoZXJpY2FsKHNwaGVyaWNhbCk7XHJcbiAgXHRcdFx0Ly8gcm90YXRlIG9mZnNldCBiYWNrIHRvIFwiY2FtZXJhLXVwLXZlY3Rvci1pcy11cFwiIHNwYWNlXHJcbiAgXHRcdFx0b2Zmc2V0LmFwcGx5UXVhdGVybmlvbihxdWF0SW52ZXJzZSk7XHJcbiAgXHRcdFx0cG9zaXRpb24uY29weShzY29wZS50YXJnZXQpLmFkZChvZmZzZXQpO1xyXG4gIFx0XHRcdHNjb3BlLm9iamVjdC5sb29rQXQoc2NvcGUudGFyZ2V0KTtcclxuXHJcbiAgXHRcdFx0aWYoc2NvcGUuZW5hYmxlRGFtcGluZz09PXRydWUpIHtcclxuICBcdFx0XHRcdHNwaGVyaWNhbERlbHRhLnRoZXRhICo9KDEtc2NvcGUuZGFtcGluZ0ZhY3Rvcik7XHJcbiAgXHRcdFx0XHRzcGhlcmljYWxEZWx0YS5waGkgKj0oMS1zY29wZS5kYW1waW5nRmFjdG9yKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0c3BoZXJpY2FsRGVsdGEuc2V0KDAsIDAsIDApO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0c2NhbGUgPSAxO1xyXG4gIFx0XHRcdHBhbk9mZnNldC5zZXQoMCwgMCwgMCk7XHJcblxyXG4gIFx0XHRcdC8vIHVwZGF0ZSBjb25kaXRpb24gaXM6XHJcbiAgXHRcdFx0Ly8gbWluKGNhbWVyYSBkaXNwbGFjZW1lbnQsIGNhbWVyYSByb3RhdGlvbiBpbiByYWRpYW5zKV4yID4gRVBTXHJcbiAgXHRcdFx0Ly8gdXNpbmcgc21hbGwtYW5nbGUgYXBwcm94aW1hdGlvbiBjb3MoeC8yKSA9IDEteF4yIC8gOFxyXG5cclxuICBcdFx0XHRpZih6b29tQ2hhbmdlZCB8fFxyXG4gIFx0XHRcdFx0bGFzdFBvc2l0aW9uLmRpc3RhbmNlVG9TcXVhcmVkKHNjb3BlLm9iamVjdC5wb3NpdGlvbikgPiBFUFMgfHxcclxuICBcdFx0XHRcdDggKigxLWxhc3RRdWF0ZXJuaW9uLmRvdChzY29wZS5vYmplY3QucXVhdGVybmlvbikpID4gRVBTKSB7XHJcblxyXG4gIFx0XHRcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudChjaGFuZ2VFdmVudCk7XHJcblxyXG4gIFx0XHRcdFx0bGFzdFBvc2l0aW9uLmNvcHkoc2NvcGUub2JqZWN0LnBvc2l0aW9uKTtcclxuICBcdFx0XHRcdGxhc3RRdWF0ZXJuaW9uLmNvcHkoc2NvcGUub2JqZWN0LnF1YXRlcm5pb24pO1xyXG4gIFx0XHRcdFx0em9vbUNoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG4gIFx0XHR9O1xyXG4gIFx0fSgpO1xyXG5cclxuICAgIHRoaXMuZGlzcG9zZSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIH07XHJcblxyXG4gIFx0Ly9cclxuICBcdC8vIGludGVybmFsc1xyXG4gIFx0Ly9cclxuICBcdHZhciBzY29wZSA9IHRoaXM7XHJcbiAgXHR2YXIgY2hhbmdlRXZlbnQgPSB7IHR5cGU6ICdjaGFuZ2UnIH07XHJcbiAgXHR2YXIgRVBTID0gMWUtNjtcclxuICBcdC8vIGN1cnJlbnQgcG9zaXRpb24gaW4gc3BoZXJpY2FsIGNvb3JkaW5hdGVzXHJcbiAgXHR2YXIgc3BoZXJpY2FsID0gbmV3IFRIUkVFLlNwaGVyaWNhbCgpO1xyXG4gIFx0dmFyIHNwaGVyaWNhbERlbHRhID0gbmV3IFRIUkVFLlNwaGVyaWNhbCgpO1xyXG5cclxuICBcdHZhciBzY2FsZSA9IDE7XHJcbiAgXHR2YXIgcGFuT2Zmc2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBcdHZhciB6b29tQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICBcdGZ1bmN0aW9uIGdldEF1dG9Sb3RhdGlvbkFuZ2xlKCkge1xyXG4gIFx0XHRyZXR1cm4gMiAqIE1hdGguUEkgLyA2MCAvIDYwICogc2NvcGUuYXV0b1JvdGF0ZVNwZWVkO1xyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIGdldFpvb21TY2FsZSgpIHtcclxuICBcdFx0cmV0dXJuIE1hdGgucG93KDAuOTUsIHNjb3BlLnpvb21TcGVlZCk7XHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gcm90YXRlTGVmdChhbmdsZSkge1xyXG4gIFx0XHRzcGhlcmljYWxEZWx0YS50aGV0YSAtPSBhbmdsZTtcclxuICBcdH1cclxuXHJcbiAgXHRmdW5jdGlvbiByb3RhdGVVcChhbmdsZSkge1xyXG4gIFx0XHRzcGhlcmljYWxEZWx0YS5waGkgLT0gYW5nbGU7XHJcbiAgXHR9XHJcblxyXG4gIFx0dmFyIHBhbkxlZnQgPSBmdW5jdGlvbigpIHtcclxuICBcdFx0dmFyIHYgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24gcGFuTGVmdChkaXN0YW5jZSwgb2JqZWN0TWF0cml4KSB7XHJcbiAgXHRcdFx0di5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMCk7IC8vIGdldCBYIGNvbHVtbiBvZiBvYmplY3RNYXRyaXhcclxuICBcdFx0XHR2Lm11bHRpcGx5U2NhbGFyKC0gZGlzdGFuY2UpO1xyXG4gIFx0XHRcdHBhbk9mZnNldC5hZGQodik7XHJcbiAgXHRcdH07XHJcbiAgXHR9KCk7XHJcblxyXG4gIFx0dmFyIHBhblVwID0gZnVuY3Rpb24oKSB7XHJcbiAgXHRcdHZhciB2ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBcdFx0cmV0dXJuIGZ1bmN0aW9uIHBhblVwKGRpc3RhbmNlLCBvYmplY3RNYXRyaXgpIHtcclxuICBcdFx0XHR2LnNldEZyb21NYXRyaXhDb2x1bW4ob2JqZWN0TWF0cml4LCAxKTsgLy8gZ2V0IFkgY29sdW1uIG9mIG9iamVjdE1hdHJpeFxyXG4gIFx0XHRcdHYubXVsdGlwbHlTY2FsYXIoZGlzdGFuY2UpO1xyXG4gIFx0XHRcdHBhbk9mZnNldC5hZGQodik7XHJcbiAgXHRcdH07XHJcbiAgXHR9KCk7XHJcblxyXG4gIFx0Ly8gZGVsdGFYIGFuZCBkZWx0YVkgYXJlIGluIHBpeGVsczsgcmlnaHQgYW5kIGRvd24gYXJlIHBvc2l0aXZlXHJcbiAgXHRzY29wZS5wYW4gPSBmdW5jdGlvbigpIHtcclxuICBcdFx0dmFyIG9mZnNldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgXHRcdHJldHVybiBmdW5jdGlvbiBwYW4oZGVsdGFYLCBkZWx0YVkpIHtcclxuICBcdFx0XHR2YXIgZWxlbWVudCA9IHNjb3BlLmRvbUVsZW1lbnQ7XHJcbiAgXHRcdFx0aWYoc2NvcGUub2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICBcdFx0XHRcdC8vIHBlcnNwZWN0aXZlXHJcbiAgXHRcdFx0XHR2YXIgcG9zaXRpb24gPSBzY29wZS5vYmplY3QucG9zaXRpb247XHJcbiAgXHRcdFx0XHRvZmZzZXQuY29weShwb3NpdGlvbikuc3ViKHNjb3BlLnRhcmdldCk7XHJcbiAgXHRcdFx0XHR2YXIgdGFyZ2V0RGlzdGFuY2UgPSBvZmZzZXQubGVuZ3RoKCk7XHJcbiAgXHRcdFx0XHQvLyBoYWxmIG9mIHRoZSBmb3YgaXMgY2VudGVyIHRvIHRvcCBvZiBzY3JlZW5cclxuICBcdFx0XHRcdHRhcmdldERpc3RhbmNlICo9IE1hdGgudGFuKChzY29wZS5vYmplY3QuZm92IC8gMikgKiBNYXRoLlBJIC8gMTgwLjApO1xyXG4gIFx0XHRcdFx0Ly8gd2UgYWN0dWFsbHkgZG9uJ3QgdXNlIHNjcmVlbldpZHRoLCBzaW5jZSBwZXJzcGVjdGl2ZSBjYW1lcmEgaXMgZml4ZWQgdG8gc2NyZWVuIGhlaWdodFxyXG4gIFx0XHRcdFx0cGFuTGVmdCgyICogZGVsdGFYICogdGFyZ2V0RGlzdGFuY2UgLyBlbGVtZW50LmNsaWVudEhlaWdodCwgc2NvcGUub2JqZWN0Lm1hdHJpeCk7XHJcbiAgXHRcdFx0XHRwYW5VcCgyICogZGVsdGFZICogdGFyZ2V0RGlzdGFuY2UgLyBlbGVtZW50LmNsaWVudEhlaWdodCwgc2NvcGUub2JqZWN0Lm1hdHJpeCk7XHJcbiAgXHRcdFx0fSBlbHNlIGlmKHNjb3BlLm9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gIFx0XHRcdFx0Ly8gb3J0aG9ncmFwaGljXHJcbiAgXHRcdFx0XHRwYW5MZWZ0KGRlbHRhWCAqKHNjb3BlLm9iamVjdC5yaWdodC1zY29wZS5vYmplY3QubGVmdCkgLyBzY29wZS5vYmplY3Quem9vbSAvIGVsZW1lbnQuY2xpZW50V2lkdGgsIHNjb3BlLm9iamVjdC5tYXRyaXgpO1xyXG4gIFx0XHRcdFx0cGFuVXAoZGVsdGFZICooc2NvcGUub2JqZWN0LnRvcC1zY29wZS5vYmplY3QuYm90dG9tKSAvIHNjb3BlLm9iamVjdC56b29tIC8gZWxlbWVudC5jbGllbnRIZWlnaHQsIHNjb3BlLm9iamVjdC5tYXRyaXgpO1xyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHQvLyBjYW1lcmEgbmVpdGhlciBvcnRob2dyYXBoaWMgbm9yIHBlcnNwZWN0aXZlXHJcbiAgXHRcdFx0XHRjb25zb2xlLndhcm4oJ1dBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZS1wYW4gZGlzYWJsZWQuJyk7XHJcbiAgXHRcdFx0XHRzY29wZS5lbmFibGVQYW4gPSBmYWxzZTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH07XHJcbiAgXHR9KCk7XHJcblxyXG4gIFx0ZnVuY3Rpb24gZG9sbHlJbihkb2xseVNjYWxlKSB7XHJcbiAgICAgIGlmKHNjb3BlLm9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgXHRcdFx0c2NhbGUgLz0gZG9sbHlTY2FsZTtcclxuICBcdFx0fSBlbHNlIGlmKHNjb3BlLm9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gIFx0XHRcdHNjb3BlLm9iamVjdC56b29tID0gTWF0aC5tYXgoc2NvcGUubWluWm9vbSwgTWF0aC5taW4oc2NvcGUubWF4Wm9vbSwgc2NvcGUub2JqZWN0Lnpvb20gKiBkb2xseVNjYWxlKSk7XHJcbiAgXHRcdFx0c2NvcGUub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICBcdFx0XHR6b29tQ2hhbmdlZCA9IHRydWU7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0Y29uc29sZS53YXJuKCdXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUtZG9sbHkvem9vbSBkaXNhYmxlZC4nKTtcclxuICBcdFx0XHRzY29wZS5lbmFibGVab29tID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRmdW5jdGlvbiBkb2xseU91dChkb2xseVNjYWxlKSB7XHJcbiAgICAgIGlmKHNjb3BlLm9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgXHRcdFx0c2NhbGUgKj0gZG9sbHlTY2FsZTtcclxuICBcdFx0fSBlbHNlIGlmKHNjb3BlLm9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gIFx0XHRcdHNjb3BlLm9iamVjdC56b29tID0gTWF0aC5tYXgoc2NvcGUubWluWm9vbSwgTWF0aC5taW4oc2NvcGUubWF4Wm9vbSwgc2NvcGUub2JqZWN0Lnpvb20gLyBkb2xseVNjYWxlKSk7XHJcbiAgXHRcdFx0c2NvcGUub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICBcdFx0XHR6b29tQ2hhbmdlZCA9IHRydWU7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0Y29uc29sZS53YXJuKCdXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUtZG9sbHkvem9vbSBkaXNhYmxlZC4nKTtcclxuICBcdFx0XHRzY29wZS5lbmFibGVab29tID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgICAvKiBBY3Rpb25zICovXHJcblxyXG4gICAgZnVuY3Rpb24gcm90YXRlKGV2ZW50LCBkYXRhKSB7XHJcbiAgICAgIGlmKHNjb3BlLmVuYWJsZWQgJiYgc2NvcGUuZW5hYmxlUm90YXRlICYmIGRhdGEuc3RhdGU9PT0nbW92ZScpIHtcclxuICAgICAgICB2YXIgZWxlbWVudCA9IHNjb3BlLmRvbUVsZW1lbnQ7XHJcbiAgICAgICAgLy8gcm90YXRpbmcgYWNyb3NzIHdob2xlIHNjcmVlbiBnb2VzIDM2MCBkZWdyZWVzIGFyb3VuZFxyXG4gICAgICAgIHJvdGF0ZUxlZnQoMiAqIE1hdGguUEkgKiBkYXRhLmR4IC8gZWxlbWVudC5jbGllbnRXaWR0aCAqIHNjb3BlLnJvdGF0ZVNwZWVkKTtcclxuICAgICAgICAvLyByb3RhdGluZyB1cCBhbmQgZG93biBhbG9uZyB3aG9sZSBzY3JlZW4gYXR0ZW1wdHMgdG8gZ28gMzYwLCBidXQgbGltaXRlZCB0byAxODBcclxuICAgICAgICByb3RhdGVVcCgyICogTWF0aC5QSSAqIGRhdGEuZHkgLyBlbGVtZW50LmNsaWVudEhlaWdodCAqIHNjb3BlLnJvdGF0ZVNwZWVkKTtcclxuICAgICAgICBzY29wZS51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhbihldmVudCwgZGF0YSkge1xyXG4gICAgICBpZihzY29wZS5lbmFibGVkICYmIHNjb3BlLmVuYWJsZVBhbiAmJiBkYXRhLnN0YXRlPT09J21vdmUnKSB7XHJcbiAgICAgICAgc2NvcGUucGFuKGRhdGEuZHgsIGRhdGEuZHkpO1xyXG4gICAgICAgIHNjb3BlLnVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb2Zmc2V0RG9sbHkoZXZlbnQsIGRhdGEpIHtcclxuICAgICAgaWYoc2NvcGUuZW5hYmxlZCAmJiBzY29wZS5lbmFibGVab29tICYmIGRhdGEuc3RhdGU9PT0nbW92ZScpIHtcclxuICAgICAgICBpZihkYXRhLmR5PjApIHtcclxuICAgICAgICAgIGRvbGx5SW4oZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZihkYXRhLmR5PDApIHtcclxuICAgICAgICAgIGRvbGx5T3V0KGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB3aGVlbERvbGx5KGV2ZW50KSB7XHJcbiAgICAgIGlmKHNjb3BlLmVuYWJsZWQgJiYgc2NvcGUuZW5hYmxlWm9vbSkge1xyXG4gICAgICAgIGlmKGV2ZW50LmRlbHRhWT4wKSB7XHJcbiAgICAgICAgICBkb2xseU91dChnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmKGV2ZW50LmRlbHRhWTwwKSB7XHJcbiAgICAgICAgICBkb2xseUluKGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NvcGUudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFjdGlvbnMgPSB7XHJcbiAgICAgIHJvdGF0ZSxcclxuICAgICAgcGFuLFxyXG4gICAgICBvZmZzZXREb2xseSxcclxuICAgICAgd2hlZWxEb2xseVxyXG4gICAgfVxyXG5cclxuICBcdC8vIGZvcmNlIGFuIHVwZGF0ZSBhdCBzdGFydFxyXG4gIFx0dGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL09yYml0LmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvT3JiaXQuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgSW1hZ2VCYXNlIGZyb20gJy4vSW1hZ2VCYXNlJztcclxuaW1wb3J0IFBkZiBmcm9tICcuL1BkZic7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJy4vQmFzZU1hdGhVdGlscyc7XHJcbmltcG9ydCBDdXN0b21FdmVudENvbnZlcnRlciBmcm9tICcuL0N1c3RvbUV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IFBvbHlUYXJnZXQgZnJvbSAnLi90YXJnZXRzL1BvbHlUYXJnZXQnO1xyXG5cclxuaW1wb3J0IEZpbmRlciBmcm9tICcuL0ZpbmRlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZGZJbWFnZSBleHRlbmRzIEltYWdlQmFzZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBwZGYsIG4pIHtcclxuICAgIHN1cGVyKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5ID0gJyc7XHJcbiAgICB0aGlzLm4gPSBuO1xyXG4gICAgdGhpcy5wZGYgPSBwZGY7XHJcbiAgICB0aGlzLnYgPSB7eDogMCwgeTogMCwgejogMCwgc2V0OiBmdW5jdGlvbih4LHkseikge1xyXG4gICAgICB0aGlzLng9eDsgdGhpcy55PXk7IHRoaXMuej16O1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH0sIHRyYW5zZm9ybTogZnVuY3Rpb24obSkge1xyXG4gICAgICBjb25zdCB4PW0ubVswXVswXSp0aGlzLngrbS5tWzFdWzBdKnRoaXMueSttLm1bMl1bMF0qdGhpcy56LFxyXG4gICAgICAgICAgICB5PW0ubVswXVsxXSp0aGlzLngrbS5tWzFdWzFdKnRoaXMueSttLm1bMl1bMV0qdGhpcy56LFxyXG4gICAgICAgICAgICB6PW0ubVswXVsyXSp0aGlzLngrbS5tWzBdWzJdKnRoaXMueSttLm1bMl1bMF0qdGhpcy56O1xyXG4gICAgICB0aGlzLng9eDtcclxuICAgICAgdGhpcy55PXk7XHJcbiAgICAgIHRoaXMuej16O1xyXG4gICAgICByZXR1cm4gdGhpcztcclxuICAgIH19O1xyXG4gICAgdGhpcy5tID0ge206IFtbMSwwLDBdLFswLDEsMF0sWzAsMCwxXV0sIHNldDogZnVuY3Rpb24obTAwLG0wMSxtMDIsbTEwLG0xMSxtMTIsbTIwLG0yMSxtMjIpIHtcclxuICAgICAgdGhpcy5tPVtbbTAwLG0wMSxtMDJdLFttMTAsbTExLG0xMl0sW20yMCxtMjEsbTIyXV07XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfX07XHJcblxyXG4gICAgdGhpcy5zdGFydFJlbmRlciA9ICgpPT4ge1xyXG4gICAgICB0aGlzLnBkZi5nZXRIYW5kbGVyKHRoaXMucmVuZGVyLmJpbmQodGhpcykpO1xyXG4gICAgfTtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLlxyXG4gICAgICB0aGVuKCgpPT4gdGhpcy5wZGYuZ2V0SGFuZGxlcih0aGlzLmluaXQuYmluZCh0aGlzKSkpO1xyXG4gIH1cclxuXHJcbiAgc2V0UXVlcnkocXVlcnkpIHtcclxuICAgIHRoaXMucXVlcnkgPSBxdWVyeS50cmltKCk7XHJcbiAgICBpZih0aGlzLnRleHRDb250ZW50KSB7XHJcbiAgICAgIHRoaXMuc2V0SGl0cyh0aGlzLnRleHRDb250ZW50KTtcclxuICAgICAgLy8gdGhpcy5maW5pc2hMb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWN0U2l6ZShyKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogclsyXS1yWzBdLFxyXG4gICAgICBoZWlnaHQ6IHJbM10tclsxXVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVBvbHkobSwgcCwgcykge1xyXG4gICAgY29uc3QgcG9seSA9IFtdLCB2ID0gdGhpcy52O1xyXG4gICAgdi5zZXQocC54LCBwLnksIDEpLnRyYW5zZm9ybShtKTtcclxuICAgIHBvbHkucHVzaCh7eDogdi54LCB5OiB2Lnl9KTtcclxuICAgIHYuc2V0KHAueCwgcC55K3MuaGVpZ2h0LCAxKS50cmFuc2Zvcm0obSk7XHJcbiAgICBwb2x5LnB1c2goe3g6IHYueCwgeTogdi55fSk7XHJcbiAgICB2LnNldChwLngrcy53aWR0aCwgcC55K3MuaGVpZ2h0LCAxKS50cmFuc2Zvcm0obSk7XHJcbiAgICBwb2x5LnB1c2goe3g6IHYueCwgeTogdi55fSk7XHJcbiAgICB2LnNldChwLngrcy53aWR0aCwgcC55LCAxKS50cmFuc2Zvcm0obSk7XHJcbiAgICBwb2x5LnB1c2goe3g6IHYueCwgeTogdi55fSk7XHJcbiAgICByZXR1cm4gcG9seTtcclxuICB9XHJcblxyXG4gIGdldFNpbXVsYXRlZERvYygpIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2U7XHJcbiAgfVxyXG5cclxuICBzaW11bGF0ZShlLCBkb2MsIHgsIHkpIHtcclxuICAgIGlmKHRoaXMuZXZlbnRDb252ZXJ0ZXIpIHtcclxuICAgICAgdGhpcy5ldmVudENvbnZlcnRlci5jb252ZXJ0KGUsIHtkb2MsIHgsIHl9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEFubm90YXRpb25zKGFubm9zKSB7XHJcbiAgICBjb25zdCB0ID0gdGhpcy52aWV3cG9ydC50cmFuc2Zvcm0sXHJcbiAgICAgIHRhcmdldHMgPSBbXTtcclxuICAgIHRoaXMubS5zZXQoXHJcbiAgICAgIHRbMF0sdFsxXSwwLFxyXG4gICAgICB0WzJdLHRbM10sMCxcclxuICAgICAgdFs0XSx0WzVdLDEpO1xyXG5cclxuICAgIGZvcihsZXQgYW5ubyBvZiBhbm5vcykge1xyXG4gICAgICBpZiAoYW5uby5zdWJ0eXBlPT09J0xpbmsnKSB7XHJcbiAgICAgICAgY29uc3QgcmVjdCA9IGFubm8ucmVjdCxcclxuICAgICAgICAgIGFQb3MgPSB7XHJcbiAgICAgICAgICAgIHg6IHJlY3RbMF0sXHJcbiAgICAgICAgICAgIHk6IHJlY3RbMV1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBhU3ogPSB0aGlzLnJlY3RTaXplKHJlY3QpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG5ldyBQb2x5VGFyZ2V0KHRoaXMuY3JlYXRlUG9seSh0aGlzLm0sIGFQb3MsIGFTeikubWFwKChwKT0+ICh7eDogcC54L3RoaXMudmlld3BvcnQud2lkdGgsIHk6IDEtcC55L3RoaXMudmlld3BvcnQuaGVpZ2h0fSkpKTtcclxuICAgICAgICB0YXJnZXQuYW5ubyA9IGFubm87XHJcbiAgICAgICAgdGFyZ2V0LmNhbGxiYWNrID0gdGhpcy5hbm5vQ2xiLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGFyZ2V0cy5wdXNoKHRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKHRhcmdldHMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZXZlbnRDb252ZXJ0ZXIgPSBuZXcgQ3VzdG9tRXZlbnRDb252ZXJ0ZXIodGhpcy53bmQsIHRoaXMuZG9jLCBQb2x5VGFyZ2V0LnRlc3QsIHRoaXMucGFnZSk7XHJcbiAgICAgIGZvcihsZXQgdGFyZ2V0IG9mIHRhcmdldHMpIHtcclxuICAgICAgICB0aGlzLmV2ZW50Q29udmVydGVyLmFkZEN1c3RvbSh0YXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRIaXRzKHRleHRDb250ZW50KSB7XHJcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XHJcbiAgICBpZih0aGlzLnF1ZXJ5IT09JycpIHtcclxuICAgICAgdGhpcy5maW5kZXIgPSBuZXcgRmluZGVyKHRleHRDb250ZW50Lml0ZW1zLm1hcCgoaXRlbSk9PiBpdGVtLnN0ciksIHRoaXMucXVlcnksIHtjb250ZXh0czogZmFsc2V9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbmRlckhpdHMoKSB7XHJcbiAgICBpZih0aGlzLmZpbmRlcikge1xyXG4gICAgICBjb25zdCB2aWV3ID0gdGhpcy5wYWdlLnZpZXcsXHJcbiAgICAgICAgdGVzdFN6ID0gJCgnPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgdmlzaWJpbGl0eTogaGlkZGVuO1wiPjwvZGl2PicpLmFwcGVuZFRvKCdib2R5JyksIHRleHREaXYgPSB0ZXN0U3pbMF0sXHJcbiAgICAgICAgYmFzZU9mZnNldCA9IHRlc3RTei5vZmZzZXQoKS5sZWZ0O1xyXG4gICAgICBmb3IobGV0IGhpdCBvZiB0aGlzLmZpbmRlci5nZXRIaXRzKCkpIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnRleHRDb250ZW50Lml0ZW1zW2hpdC5pbmRleF0sXHJcbiAgICAgICAgICAgICAgICB0ID0gUERGSlMuVXRpbC50cmFuc2Zvcm0odGhpcy52aWV3cG9ydC50cmFuc2Zvcm0sIGl0ZW0udHJhbnNmb3JtKSxcclxuICAgICAgICAgICAgICAgIHN0eWxlID0gdGhpcy50ZXh0Q29udGVudC5zdHlsZXNbaXRlbS5mb250TmFtZV0sXHJcbiAgICAgICAgICAgICAgICBhbmdsZSA9IE1hdGguYXRhbjIodFsxXSwgdFswXSkrKHN0eWxlLnZlcnRpY2FsPyBNYXRoLlBJIC8gMjogMCksXHJcbiAgICAgICAgICAgICAgICBmb250SGVpZ2h0ID0gTWF0aC5zcXJ0KCh0WzJdICogdFsyXSkgKyAodFszXSAqIHRbM10pKSxcclxuICAgICAgICAgICAgICAgIGZvbnRBc2NlbnQgPSBzdHlsZS5hc2NlbnQ/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmFzY2VudCAqIGZvbnRIZWlnaHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHlsZS5kZXNjZW50PyAoMSArIHN0eWxlLmRlc2NlbnQpICogZm9udEhlaWdodDogZm9udEhlaWdodCk7XHJcbiAgICAgICAgICB0ZXN0U3ouaHRtbChpdGVtLnN0ci5zdWJzdHIoMCwgaGl0Lm9mZnNldCkrJzxzcGFuPicraXRlbS5zdHIuc3Vic3RyKGhpdC5vZmZzZXQsIGhpdC5sZW5ndGgpKyc8L3NwYW4+JytpdGVtLnN0ci5zdWJzdHIoaGl0Lm9mZnNldCtoaXQubGVuZ3RoKSk7XHJcblxyXG4gICAgICAgICAgdGV4dERpdi5zdHlsZS5mb250U2l6ZSA9IGZvbnRIZWlnaHQrJ3B4JztcclxuICAgICAgICAgIHRleHREaXYuc3R5bGUuZm9udEZhbWlseSA9IHN0eWxlLmZvbnRGYW1pbHk7XHJcblxyXG4gICAgICAgICAgY29uc3QgdGVzdFNwYW4gPSB0ZXN0U3ouZmluZCgnc3BhbicpLFxyXG4gICAgICAgICAgICAgIGl3aWR0aCA9IHN0eWxlLnZlcnRpY2FsPyBpdGVtLmhlaWdodCp0aGlzLnZpZXdwb3J0LnNjYWxlOiBpdGVtLndpZHRoKnRoaXMudmlld3BvcnQuc2NhbGUsXHJcbiAgICAgICAgICAgICAgd2lkdGggPSB0ZXN0U3oud2lkdGgoKSxcclxuICAgICAgICAgICAgICByZWxhdGl2ZU9mZnNldCA9ICh0ZXN0U3Bhbi5vZmZzZXQoKS5sZWZ0LWJhc2VPZmZzZXQpL3dpZHRoO1xyXG4gICAgICAgICAgdGhpcy5tLnNldChcclxuICAgICAgICAgICAgMSwwLDAsXHJcbiAgICAgICAgICAgIDAsMSwwLFxyXG4gICAgICAgICAgICB0WzRdK2ZvbnRBc2NlbnQqTWF0aC5zaW4oYW5nbGUpLHRbNV0tZm9udEFzY2VudCpNYXRoLmNvcyhhbmdsZSksMSk7XHJcbiAgICAgICAgICBsZXQgcG9seSA9IHRoaXMuY3JlYXRlUG9seSh0aGlzLm0sIHt4OiByZWxhdGl2ZU9mZnNldCppd2lkdGgsIHk6IDB9LCB7d2lkdGg6IGl3aWR0aCp0ZXN0U3Bhbi53aWR0aCgpL3dpZHRoLCBoZWlnaHQ6IHRlc3RTcGFuLmhlaWdodCgpfSk7XHJcbiAgICAgICAgICBwb2x5ID0gcG9seS5tYXAoKHApPT4gKHt4OiBwLngvdGhpcy52aWV3cG9ydC53aWR0aCwgeTogMS1wLnkvdGhpcy52aWV3cG9ydC5oZWlnaHR9KSk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlckhpdChwb2x5KTtcclxuICAgICAgfVxyXG4gICAgICB0ZXN0U3oucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhbm5vQ2xiKGUsIGRhdGEpIHtcclxuICAgIGlmKHRoaXMuY29udGV4dC5kaXNwYXRjaEV2ZW50KSB7XHJcbiAgICAgIHRoaXMuY29udGV4dC5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgICB0eXBlOiAncGRmQW5ub3RhdGlvbicsXHJcbiAgICAgICAgZXZlbnQ6IGUsXHJcbiAgICAgICAgYW5ub3RhdGlvbjogZGF0YS50YXJnZXQuYW5ub1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGNWaWV3cG9ydCgpIHtcclxuICAgIGNvbnN0IHNjYWxlID0gQmFzZU1hdGhVdGlscy5jYWxjU2NhbGUodGhpcy5zaXplLndpZHRoLCB0aGlzLnNpemUuaGVpZ2h0LCB0aGlzLnJlc1csIHRoaXMucmVzSCk7XHJcbiAgICBpZighdGhpcy52aWV3cG9ydCB8fCBNYXRoLmFicyh0aGlzLnZpZXdwb3J0LnNjYWxlLXNjYWxlKT4xZS00KSB7XHJcbiAgICAgIHRoaXMudmlld3BvcnQgPSB0aGlzLnBhZ2UuZ2V0Vmlld3BvcnQoc2NhbGUpO1xyXG4gICAgICBpZih0aGlzLnR5cGUhPT0nZnVsbCcpIHtcclxuICAgICAgICBpZih0aGlzLnR5cGU9PT0ncmlnaHQnKSB7XHJcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0Lm9mZnNldFggKz0gMC41KnRoaXMudmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0LnRyYW5zZm9ybVs0XSAtPSAwLjUqdGhpcy52aWV3cG9ydC53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3cG9ydC53aWR0aCAvPSAyO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVzVyA9IHRoaXMud2lkdGggPSB0aGlzLnZpZXdwb3J0LndpZHRoO1xyXG4gICAgICB0aGlzLnJlc0ggPSB0aGlzLmhlaWdodCA9IHRoaXMudmlld3BvcnQuaGVpZ2h0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdCgpIHtcclxuICAgIHRoaXMudHlwZSA9IHRoaXMucGRmLmdldFBhZ2VUeXBlKHRoaXMubik7XHJcbiAgICB0aGlzLnBkZi5nZXRQYWdlKHRoaXMubikuXHJcbiAgICAgIHRoZW4oKHBhZ2UpPT4ge1xyXG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgdGhpcy5zaXplID0gUGRmLmdldFBhZ2VTaXplKHBhZ2UpO1xyXG4gICAgICAgIGlmKHRoaXMudHlwZSE9PSdmdWxsJykge1xyXG4gICAgICAgICAgdGhpcy5zaXplLndpZHRoIC89IDI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBhZ2UuZ2V0QW5ub3RhdGlvbnMoKS5cclxuICAgICAgICAgIHRoZW4odGhpcy5zZXRBbm5vdGF0aW9ucy5iaW5kKHRoaXMpKTtcclxuICAgICAgICBwYWdlLmdldFRleHRDb250ZW50KCkuXHJcbiAgICAgICAgICB0aGVuKHRoaXMuc2V0SGl0cy5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLmNhbGNWaWV3cG9ydCgpO1xyXG4gICAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgICB9KS5cclxuICAgICAgY2F0Y2goKGUpPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBsb2FkIFBERiBwYWdlOiAnKyh0aGlzLm4rMSkpO1xyXG4gICAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFJlc29sdXRpb24ocmVzKSB7XHJcbiAgICBzdXBlci5zZXRSZXNvbHV0aW9uKHJlcyk7XHJcbiAgICBpZih0aGlzLnBhZ2UpIHtcclxuICAgICAgdGhpcy5jYWxjVmlld3BvcnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbmRlcihoYW5kbGVyKSB7XHJcbiAgICBpZih0aGlzLnBhZ2UpIHtcclxuICAgICAgdGhpcy5wYWdlLnJlbmRlcih7XHJcbiAgICAgICAgY2FudmFzQ29udGV4dDogdGhpcy5wdXNoQ3R4KCksXHJcbiAgICAgICAgdmlld3BvcnQ6IHRoaXMudmlld3BvcnRcclxuICAgICAgfSkuXHJcbiAgICAgIHRoZW4oKCk9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJIaXRzKCk7XHJcbiAgICAgICAgdGhpcy5wb3BDdHgoKTtcclxuICAgICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbmRlckJsYW5rUGFnZSgpO1xyXG4gICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvUGRmSW1hZ2UuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9QZGZJbWFnZS5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2gge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIHBhZ2VzKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMucGFnZXMgPSBwYWdlcztcclxuICAgIHRoaXMucHJldlJlc3VsdHMgPSBbXTtcclxuICAgIGNvbnRhaW5lci5odG1sKGBcclxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJxdWVyeVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wUXVlcnlcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjMwXCIgdmFsdWU9XCJcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRzXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICBgKTtcclxuICAgIHRoaXMucXVlcnkgPSBjb250YWluZXIuZmluZCgnLnF1ZXJ5IGlucHV0Jyk7XHJcbiAgICB0aGlzLnJlc3VsdHMgPSBjb250YWluZXIuZmluZCgnLnJlc3VsdHMnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gY29udGFpbmVyLmZpbmQoJy5zdGF0dXMnKTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBuYXZpZ2F0ZTogdGhpcy5uYXZpZ2F0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBkb1F1ZXJ5OiB0aGlzLmRvUXVlcnkuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5Lm9uKCdrZXlkb3duJywgdGhpcy5iaW5kcy5kb1F1ZXJ5KTtcclxuICAgIHRoaXMucmVzdWx0cy5vbignY2xpY2snLCB0aGlzLmJpbmRzLm5hdmlnYXRlKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnJlc3VsdHMub2ZmKCdjbGljaycsIHRoaXMuYmluZHMubmF2aWdhdGUpO1xyXG4gICAgdGhpcy5xdWVyeS5vZmYoJ2tleWRvd24nLCB0aGlzLmJpbmRzLmRvUXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGUoZSkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYodGhpcy5vbk5hdmlnYXRlIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCB0YXJnZXQgPSAkKGUudGFyZ2V0KTtcclxuICAgICAgaWYoIXRhcmdldC5oYXNDbGFzcygncmVzdWx0JykpIHtcclxuICAgICAgICBjb25zdCB0ID0gdGFyZ2V0LmZpbmQoJy5yZXN1bHQnKTtcclxuICAgICAgICBpZih0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGFyZ2V0ID0gdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aGlsZSh0YXJnZXQubGVuZ3RoICYmICF0YXJnZXQuaGFzQ2xhc3MoJ3Jlc3VsdCcpKSB7XHJcbiAgICAgICAgICAgIHRhcmdldCA9ICQodGFyZ2V0WzBdLnBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYWdlID0gdGFyZ2V0LmF0dHIoJ2RhdGEnKTtcclxuICAgICAgaWYocGFnZSE9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMub25OYXZpZ2F0ZShwYXJzZUludChwYWdlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvUXVlcnkoKSB7XHJcbiAgICBpZih0aGlzLm9uUXVlcnkpIHtcclxuICAgICAgY29uc3QgcXVlcnlTdGFtcCA9IHRoaXMucXVlcnlTdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgaWYocXVlcnlTdGFtcCA9PT0gdGhpcy5xdWVyeVN0YW1wKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUXVlcnkodGhpcy5xdWVyeVswXS52YWx1ZS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZXN1bHRzKHJlc3VsdHMsIGxhc3RQYWdlKSB7XHJcbiAgICBpZih0aGlzLnByZXZSZXN1bHRzLmxlbmd0aCAmJiByZXN1bHRzWzBdIT09dGhpcy5wcmV2UmVzdWx0c1swXSkge1xyXG4gICAgICB0aGlzLnByZXZSZXN1bHRzID0gW107XHJcbiAgICAgIHRoaXMucmVzdWx0cy5odG1sKCcnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGh0bWxzID0gW107XHJcbiAgICBmb3IobGV0IGk9dGhpcy5wcmV2UmVzdWx0cy5sZW5ndGg7IGk8cmVzdWx0cy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2ldO1xyXG4gICAgICBodG1scy5wdXNoKCc8ZGl2IGNsYXNzPVwicmVzdWx0XCIgZGF0YT1cIicrcmVzdWx0LnBhZ2UrJ1wiPicpO1xyXG4gICAgICAgIGh0bWxzLnB1c2goJzxhIGhyZWY9XCIjXCI+Jyk7XHJcbiAgICAgICAgICBodG1scy5wdXNoKCc8ZGl2PicrcmVzdWx0LmNvbnRleHRzLmpvaW4oJzwvZGl2PjxkaXY+JykrJzwvZGl2PicpO1xyXG4gICAgICAgIGh0bWxzLnB1c2goJzwvYT4nKTtcclxuICAgICAgaHRtbHMucHVzaCgnPC9kaXY+Jyk7XHJcbiAgICB9XHJcbiAgICAkKGh0bWxzLmpvaW4oJycpKS5hcHBlbmRUbyh0aGlzLnJlc3VsdHMpO1xyXG4gICAgdGhpcy5wcmV2UmVzdWx0cyA9IFsuLi5yZXN1bHRzXTtcclxuICAgIGlmKGxhc3RQYWdlPT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmh0bWwoJycpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmh0bWwobGFzdFBhZ2UrJyBvZiAnK3RoaXMucGFnZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvU2VhcmNoLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvU2VhcmNoLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEltYWdlQmFzZSBmcm9tICcuL0ltYWdlQmFzZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY0ltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIHNyYykge1xyXG4gICAgc3VwZXIoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpO1xyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7fVxyXG4gICAgdGhpcy5pbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgdGhpcy5pbWFnZS5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xyXG4gICAgdGhpcy5iaW5kcy5pbWFnZUxvYWQgPSAoKT0+IHtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XHJcbiAgICAgIHRoaXMuc3RhcnRSZW5kZXIgPSAoKT0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckltYWdlKHRoaXMuaW1hZ2UpO1xyXG4gICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuYmluZHMuaW1hZ2VFcnJvciA9ICgpPT4ge1xyXG4gICAgICB0aGlzLnN0YXJ0UmVuZGVyID0gKCk9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJOb3RGb3VuZFBhZ2UoKTtcclxuICAgICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmZpbmlzaExvYWQoKTtcclxuICAgIH07XHJcbiAgICAkKHRoaXMuaW1hZ2UpLm9uKCdsb2FkJywgdGhpcy5iaW5kcy5pbWFnZUxvYWQpLm9uKCdlcnJvcicsIHRoaXMuYmluZHMuaW1hZ2VFcnJvcik7XHJcbiAgICB0aGlzLmltYWdlLnNyYyA9IFV0aWxzLm5vcm1hbGl6ZVVybChzcmMpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgICQodGhpcy5pbWFnZSkub2ZmKCdsb2FkJywgdGhpcy5iaW5kcy5pbWFnZUxvYWQpLm9mZignZXJyb3InLCB0aGlzLmJpbmRzLmltYWdlRXJyb3IpO1xyXG4gICAgdGhpcy5pbWFnZS5zcmMgPSAnJztcclxuICAgIGRlbGV0ZSB0aGlzLmltYWdlO1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvU3RhdGljSW1hZ2UuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9TdGF0aWNJbWFnZS5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0dXJlQW5pbWF0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKGltZywgdGlsZXNIb3JpeiwgdGlsZXNWZXJ0LCBudW1UaWxlcywgdGlsZURpc3BEdXJhdGlvbikge1xyXG5cclxuICAgIGNvbnN0IHRleHR1cmUgPSBuZXcgVEhSRUUuVGV4dHVyZSgpO1xyXG4gICAgdGV4dHVyZS5taW5GaWx0ZXIgPSBUSFJFRS5MaW5lYXJGaWx0ZXI7XHJcbiAgICB0ZXh0dXJlLmltYWdlID0gaW1nO1xyXG4gICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcblxyXG4gIFx0Ly8gbm90ZTogdGV4dHVyZSBwYXNzZWQgYnkgcmVmZXJlbmNlLCB3aWxsIGJlIHVwZGF0ZWQgYnkgdGhlIHVwZGF0ZSBmdW5jdGlvbi5cclxuICAgIHRoaXMudGV4dHVyZSA9IHRleHR1cmU7XHJcbiAgXHR0aGlzLnRpbGVzSG9yaXpvbnRhbCA9IHRpbGVzSG9yaXo7XHJcbiAgXHR0aGlzLnRpbGVzVmVydGljYWwgPSB0aWxlc1ZlcnQ7XHJcbiAgXHQvLyBob3cgbWFueSBpbWFnZXMgZG9lcyB0aGlzIHNwcml0ZXNoZWV0IGNvbnRhaW4/XHJcbiAgXHQvLyAgdXN1YWxseSBlcXVhbHMgdGlsZXNIb3JpeiAqIHRpbGVzVmVydCwgYnV0IG5vdCBuZWNlc3NhcmlseSxcclxuICBcdC8vICBpZiB0aGVyZSBhdCBibGFuayB0aWxlcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBzcHJpdGVzaGVldC5cclxuICBcdHRoaXMubnVtYmVyT2ZUaWxlcyA9IG51bVRpbGVzO1xyXG4gIFx0dGV4dHVyZS5yZXBlYXQuc2V0KDEvdGhpcy50aWxlc0hvcml6b250YWwsIDEvdGhpcy50aWxlc1ZlcnRpY2FsKTtcclxuXHJcbiAgXHQvLyBob3cgbG9uZyBzaG91bGQgZWFjaCBpbWFnZSBiZSBkaXNwbGF5ZWQ/XHJcbiAgXHR0aGlzLnRpbGVEaXNwbGF5RHVyYXRpb24gPSB0aWxlRGlzcER1cmF0aW9uO1xyXG5cclxuICBcdC8vIGhvdyBsb25nIGhhcyB0aGUgY3VycmVudCBpbWFnZSBiZWVuIGRpc3BsYXllZD9cclxuICBcdHRoaXMuY3VycmVudERpc3BsYXlUaW1lID0gMDtcclxuXHJcbiAgXHQvLyB3aGljaCBpbWFnZSBpcyBjdXJyZW50bHkgYmVpbmcgZGlzcGxheWVkP1xyXG4gIFx0dGhpcy5jdXJyZW50VGlsZSA9IDA7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUobWlsbGlTZWMpIHtcclxuICAgIHRoaXMuY3VycmVudERpc3BsYXlUaW1lICs9IG1pbGxpU2VjO1xyXG4gICAgd2hpbGUodGhpcy5jdXJyZW50RGlzcGxheVRpbWUgPiB0aGlzLnRpbGVEaXNwbGF5RHVyYXRpb24pIHtcclxuICAgICAgdGhpcy5jdXJyZW50RGlzcGxheVRpbWUgLT0gdGhpcy50aWxlRGlzcGxheUR1cmF0aW9uO1xyXG4gICAgICArK3RoaXMuY3VycmVudFRpbGU7XHJcbiAgICAgIGlmKHRoaXMuY3VycmVudFRpbGUgPT0gdGhpcy5udW1iZXJPZlRpbGVzKVxyXG4gICAgICAgIHRoaXMuY3VycmVudFRpbGUgPSAwO1xyXG4gICAgICB2YXIgY3VycmVudENvbHVtbiA9IHRoaXMuY3VycmVudFRpbGUldGhpcy50aWxlc0hvcml6b250YWw7XHJcbiAgICAgIHRoaXMudGV4dHVyZS5vZmZzZXQueCA9IGN1cnJlbnRDb2x1bW4vdGhpcy50aWxlc0hvcml6b250YWw7XHJcbiAgICAgIHZhciBjdXJyZW50Um93ID0gTWF0aC5mbG9vcih0aGlzLmN1cnJlbnRUaWxlL3RoaXMudGlsZXNIb3Jpem9udGFsKTtcclxuICAgICAgdGhpcy50ZXh0dXJlLm9mZnNldC55ID0gY3VycmVudFJvdy90aGlzLnRpbGVzVmVydGljYWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgY29uc3QgaW1nID0gdGhpcy50ZXh0dXJlLmltYWdlO1xyXG4gICAgaW1nLmhlaWdodCA9IGltZy53aWR0aCA9IDA7XHJcbiAgICB0aGlzLnRleHR1cmUuZGlzcG9zZSgpO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9UZXh0dXJlQW5pbWF0b3IuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9UZXh0dXJlQW5pbWF0b3IuanMiLCJpbXBvcnQge1RIUkVFLCAkfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xyXG5pbXBvcnQgTW91c2VFdmVudENvbnZlcnRlciBmcm9tICcuL01vdXNlRXZlbnRDb252ZXJ0ZXInO1xyXG5pbXBvcnQgVGhyZWVFdmVudENvbnZlcnRlciBmcm9tICcuL1RocmVlRXZlbnRDb252ZXJ0ZXInO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRocmVlTW91c2VFdmVudENvbnZlcnRlciBleHRlbmRzIE1vdXNlRXZlbnRDb252ZXJ0ZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYywgdmlzdWFsV29ybGQsIHRlc3QpIHtcclxuICAgIHN1cGVyKHduZCwgZG9jLCB2aXN1YWxXb3JsZC5lbGVtZW50KTtcclxuICAgIFV0aWxzLmV4dGVuZHModGhpcywgbmV3IFRocmVlRXZlbnRDb252ZXJ0ZXIodmlzdWFsV29ybGQsIHRlc3QpKTtcclxuICB9XHJcblxyXG4gIGdldENhbGxiYWNrKG9iamVjdCkge1xyXG4gICAgcmV0dXJuIG9iamVjdC5vYmplY3QudXNlckRhdGEubW91c2VDYWxsYmFjaztcclxuICB9XHJcblxyXG4gIHNldENvb3Jkc0Zyb21FdmVudChlKSB7XHJcbiAgICBjb25zdCBqRWxlbWVudCA9ICQodGhpcy5lbGVtZW50KTtcclxuICAgIGNvbnN0IG9mZnNldCA9IGpFbGVtZW50Lm9mZnNldCgpO1xyXG4gICAgdGhpcy5jb29yZHMueCA9ICgoZS5wYWdlWC1vZmZzZXQubGVmdCkvakVsZW1lbnQud2lkdGgoKSkqMi0xO1xyXG4gICAgdGhpcy5jb29yZHMueSA9IC0oKGUucGFnZVktb2Zmc2V0LnRvcCkvakVsZW1lbnQuaGVpZ2h0KCkpKjIrMTtcclxuICAgIHJldHVybiB0aGlzLmNvb3JkcztcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVNb3VzZUV2ZW50Q29udmVydGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvVGhyZWVNb3VzZUV2ZW50Q29udmVydGVyLmpzIiwiaW1wb3J0IHtUSFJFRSwgJH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuaW1wb3J0IFRvdWNoRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9Ub3VjaEV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IFRocmVlRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9UaHJlZUV2ZW50Q29udmVydGVyJztcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaHJlZVRvdWNoRXZlbnRDb252ZXJ0ZXIgZXh0ZW5kcyBUb3VjaEV2ZW50Q29udmVydGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIHZpc3VhbFdvcmxkLCB0ZXN0KSB7XHJcbiAgICBzdXBlcih3bmQsIGRvYywgdmlzdWFsV29ybGQuZWxlbWVudCk7XHJcbiAgICBVdGlscy5leHRlbmRzKHRoaXMsIG5ldyBUaHJlZUV2ZW50Q29udmVydGVyKHZpc3VhbFdvcmxkLCB0ZXN0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYWxsYmFjayhvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3Qub2JqZWN0LnVzZXJEYXRhLnRvdWNoQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICBzZXRDb29yZHNGcm9tRXZlbnQoZSkge1xyXG4gICAgY29uc3QgakVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudCksIG9mZnNldCA9IGpFbGVtZW50Lm9mZnNldCgpLFxyXG4gICAgICB0b3VjaGVzID0gZS50b3VjaGVzIHx8IGUub3JpZ2luYWxFdmVudC50b3VjaGVzLCB0b3VjaCA9IHRvdWNoZXMubGVuZ3RoPyB0b3VjaGVzWzBdOiAodGhpcy5sYXN0VG91Y2hlcyB8fCBbe3BhZ2VYOiAwLCBwYWdlWTogMH1dKVswXSxcclxuICAgICAgcGFnZVggPSB0b3VjaC5wYWdlWCwgcGFnZVkgPSB0b3VjaC5wYWdlWTtcclxuICAgIHRoaXMubGFzdFRvdWNoZXMgPSB0b3VjaGVzLmxlbmd0aD8gdG91Y2hlczogdGhpcy5sYXN0VG91Y2hlcztcclxuICAgIHRoaXMuY29vcmRzLnggPSAoKHBhZ2VYLW9mZnNldC5sZWZ0KS9qRWxlbWVudC53aWR0aCgpKSoyLTE7XHJcbiAgICB0aGlzLmNvb3Jkcy55ID0gLSgocGFnZVktb2Zmc2V0LnRvcCkvakVsZW1lbnQuaGVpZ2h0KCkpKjIrMTtcclxuICAgIHJldHVybiB0aGlzLmNvb3JkcztcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEltYWdlRmFjdG9yeSBmcm9tICcuL0ltYWdlRmFjdG9yeSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaHVtYm5haWxzIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgY29udGFpbmVyLCB0aHVtYm5haWxzQ2xiLCBzaXplLCBwcm9wcz17a1d0b0g6IDIxMC8yOTd9KSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMucCA9IHByb3BzO1xyXG4gICAgdGhpcy50aHVtYm5haWxzQ2xiID0gdGh1bWJuYWlsc0NsYjtcclxuICAgIHRoaXMuc2l6ZSA9IHNpemU7XHJcbiAgICB0aGlzLmNhbnZhcyA9ICQoJzxjYW52YXM+JylbMF07XHJcbiAgICB0aGlzLmltYWdlRmFjdG9yeSA9IG5ldyBJbWFnZUZhY3Rvcnkoe1xyXG4gICAgICAuLi5jb250ZXh0LFxyXG4gICAgICByZW5kZXJDYW52YXM6IHRoaXMuY2FudmFzLFxyXG4gICAgICByZW5kZXJDYW52YXNDdHg6IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJylcclxuICAgIH0pO1xyXG4gICAgdGhpcy50aHVtYm5haWxzID0gW107XHJcbiAgICBmb3IobGV0IGk9MDsgaTxzaXplOyArK2kpIHtcclxuICAgICAgY29uc3QgaW5mbyA9IHRoaXMudGh1bWJuYWlsc0NsYihpKTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzLnB1c2goe1xyXG4gICAgICAgIC4uLmluZm8sXHJcbiAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgbG9hZGVkOiBpbmZvLnR5cGU9PT0ndGh1bWJuYWlsLWltYWdlJyxcclxuICAgICAgICBoZWFkaW5nOiBudWxsLFxyXG4gICAgICAgIHRodW1ibmFpbDogbnVsbCxcclxuICAgICAgICB0aXRsZTogaW5mby50aXRsZSB8fCBpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIHVwZGF0ZTogdGhpcy51cGRhdGUuYmluZCh0aGlzKSxcclxuICAgICAgbmF2aWdhdGU6IChlKT0+IHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYodGhpcy5vbk5hdmlnYXRlKSB7XHJcbiAgICAgICAgICBsZXQgbm9kZSA9IGUudGFyZ2V0O1xyXG4gICAgICAgICAgd2hpbGUobm9kZSAmJiAhbm9kZS5kYXRhVGh1bWJuYWlsKSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9uTmF2aWdhdGUobm9kZS5kYXRhVGh1bWJuYWlsLmluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLmNvbnRhaW5lci5vbignc2Nyb2xsJywgdGhpcy5iaW5kcy51cGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNpemU7XHJcbiAgfVxyXG5cclxuICBzZXRFbmFibGUoZW5hYmxlKSB7XHJcbiAgICB0aGlzLmVuYWJsZSA9IGVuYWJsZTtcclxuICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5jb250YWluZXIuZmluZCgnYScpLm9mZignY2xpY2snLCB0aGlzLmJpbmRzLm5hdmlnYXRlKTtcclxuICAgIHRoaXMuY29udGFpbmVyLm9mZignc2Nyb2xsJywgdGhpcy5iaW5kcy51cGRhdGUpO1xyXG4gICAgdGhpcy5jb250YWluZXIuaHRtbCgnJyk7XHJcbiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSB0aGlzLmNhbnZhcy53aWR0aCA9IDA7XHJcbiAgICBkZWxldGUgdGhpcy5jYW52YXM7XHJcbiAgfVxyXG5cclxuICBsb2FkKHRodW1ibmFpbCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmltYWdlRmFjdG9yeS5idWlsZCh0aHVtYm5haWwsIHRodW1ibmFpbC5udW1iZXI9PT11bmRlZmluZWQ/IHRodW1ibmFpbC5pbmRleDogdGh1bWJuYWlsLm51bWJlciwgdGhpcy5wLmtXdG9IKjMwMCwgMzAwKTtcclxuICAgIHdyYXBwZXIub25DaGFuZ2UgPSAoY2FudmFzKT0+IHtcclxuICAgICAgdGhpcy5zZXRJbWFnZSh0aHVtYm5haWwsIGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpKTtcclxuICAgICAgdGh1bWJuYWlsLmxvYWRlZCA9IHRydWU7XHJcbiAgICAgIHdyYXBwZXIuZGlzcG9zZSgpO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+IHRoaXMudXBkYXRlKCkpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5jb250YWluZXIuc2Nyb2xsVG9wKCksIGxhc3QgPSBmaXJzdCArIHRoaXMuY29udGFpbmVyLmhlaWdodCgpLCByZXMgPSBbXTtcclxuICAgIGZvcihsZXQgdGh1bWJuYWlsIG9mIHRoaXMudGh1bWJuYWlscykge1xyXG4gICAgICBpZihNYXRoLm1heCh0aHVtYm5haWwuZmlyc3QsIGZpcnN0KTxNYXRoLm1pbih0aHVtYm5haWwubGFzdCwgbGFzdCkpIHtcclxuICAgICAgICByZXMucHVzaCh0aHVtYm5haWwpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgaWYoIXRoaXMubG9hZGluZyAmJiB0aGlzLmNhbnZhcyAmJiB0aGlzLmVuYWJsZSkge1xyXG4gICAgICBpZighdGhpcy5idWlsdCkge1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTtcclxuICAgICAgZm9yKGxldCB0aHVtYm5haWwgb2YgYWN0aXZlKSB7XHJcbiAgICAgICAgaWYoIXRodW1ibmFpbC5sb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMubG9hZCh0aHVtYm5haWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRJbWFnZSh0aHVtYm5haWwsIGltZykge1xyXG4gICAgdGh1bWJuYWlsLmltZyA9IGltZztcclxuICAgIHRodW1ibmFpbC50aHVtYm5haWwuY3NzKCdiYWNrZ3JvdW5kLWltYWdlJywgWyd1cmwoXFwnJywgaW1nLCdcXCcpJ10uam9pbignJykpO1xyXG4gICAgdGh1bWJuYWlsLnRodW1ibmFpbC5yZW1vdmVDbGFzcygnbG9hZGluZycpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgY29uc3QgZWxlbWVudHMgPSBbJzxkaXYgY2xhc3M9XCJ0aHVtYm5haWxzXCI+J11cclxuICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuc2l6ZTsgKytpKSB7XHJcbiAgICAgIGVsZW1lbnRzLnB1c2goWyc8ZGl2IGNsYXNzPVwiaXRlbVwiPjxhIGhyZWY9XCIjXCI+PGRpdiBjbGFzcz1cInRodW1ibmFpbCBsb2FkaW5nXCI+PC9kaXY+PC9hPjxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+PGEgaHJlZj1cIiNcIiB0aXRsZT1cIicsIGkrMSwnXCI+JywgaSsxLCAnPC9hPjwvZGl2PjwvZGl2PiddLmpvaW4oJycpKTtcclxuICAgIH1cclxuICAgIGVsZW1lbnRzLnB1c2goJzwvZGl2PicpO1xyXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kKGVsZW1lbnRzLmpvaW4oJycpKTtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5jb250YWluZXIuZmluZCgnLml0ZW0nKSwgYmFzZSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy50aHVtYm5haWxzJykub2Zmc2V0KCkudG9wO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8aXRlbXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgY29uc3QgaXRlbSA9ICQoaXRlbXNbaV0pO1xyXG4gICAgICB0aGlzLnRodW1ibmFpbHNbaV0uaGVhZGluZyA9IGl0ZW0uZmluZCgnLmhlYWRpbmcnKTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzW2ldLnRodW1ibmFpbCA9IGl0ZW0uZmluZCgnLnRodW1ibmFpbCcpO1xyXG4gICAgICB0aGlzLnRodW1ibmFpbHNbaV0uZmlyc3QgPSBpdGVtLm9mZnNldCgpLnRvcC1iYXNlO1xyXG4gICAgICB0aGlzLnRodW1ibmFpbHNbaV0ubGFzdCA9IHRoaXMudGh1bWJuYWlsc1tpXS5maXJzdCtpdGVtLmhlaWdodCgpO1xyXG4gICAgICBpZih0aGlzLnRodW1ibmFpbHNbaV0ubG9hZGVkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRJbWFnZSh0aGlzLnRodW1ibmFpbHNbaV0sIHRoaXMudGh1bWJuYWlsc1tpXS5zcmMpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFzID0gaXRlbS5maW5kKCdhJyk7XHJcbiAgICAgIGZvcihsZXQgaj0wOyBqPGFzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgY29uc3QgYSA9IGFzW2pdO1xyXG4gICAgICAgIGEuZGF0YVRodW1ibmFpbCA9IHRoaXMudGh1bWJuYWlsc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250YWluZXIuZmluZCgnYScpLm9uKCdjbGljaycsIHRoaXMuYmluZHMubmF2aWdhdGUpO1xyXG4gICAgdGhpcy5idWlsdCA9IHRydWU7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9UaHVtYm5haWxzLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvVGh1bWJuYWlscy5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBFdmVudENvbnZlcnRlciBmcm9tICcuL0V2ZW50Q29udmVydGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvdWNoQ29udmVydGVyIGV4dGVuZHMgRXZlbnRDb252ZXJ0ZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYywgZWxlbWVudCkge1xyXG4gICAgc3VwZXIod25kLCBkb2MpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBjb252ZXJ0OiB0aGlzLmNvbnZlcnQuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgICQodGhpcy5lbGVtZW50KS5vbigndG91Y2hzdGFydCB0b3VjaG1vdmUnLCB0aGlzLmJpbmRzLmNvbnZlcnQpO1xyXG4gICAgJCh0aGlzLmRvYykub24oJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub2ZmKCd0b3VjaHN0YXJ0IHRvdWNobW92ZScsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVG91Y2hFdmVudENvbnZlcnRlci5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1RvdWNoRXZlbnRDb252ZXJ0ZXIuanMiLCJpbXBvcnQgeyQsIHRyfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpZXcge1xyXG5cclxuICBzdGF0aWMgbGlua1N0YXRlSGFuZGxlcnMgPSB7XHJcbiAgICB2aXNpYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdoaWRkZW4nLCAhdmFsdWUpLFxyXG4gICAgYWN0aXZlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdhY3RpdmUnLCB2YWx1ZSksXHJcbiAgICBlbmFibGU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmNsYXNzUHJvcGVydHkoY3RybCwgJ2Rpc2FibGVkJywgIXZhbHVlKVxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyB3aWRnZXRTdGF0ZUhhbmRsZXJzID0ge1xyXG4gICAgdmlzaWJsZTogKGN0cmwsIHZhbHVlKT0+IFZpZXcuY2xhc3NQcm9wZXJ0eShjdHJsLCAnaGlkZGVuJywgIXZhbHVlKSxcclxuICAgIGFjdGl2ZTogKGN0cmwsIHZhbHVlKT0+IFZpZXcuY2xhc3NQcm9wZXJ0eShjdHJsLCAnYWN0aXZlJywgdmFsdWUpLFxyXG4gICAgZW5hYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdkaXNhYmxlZCcsICF2YWx1ZSlcclxuICB9O1xyXG5cclxuICBzdGF0aWMgaW5wdXRTdGF0ZUhhbmRsZXJzID0ge1xyXG4gICAgdmlzaWJsZTogKGN0cmwsIHZhbHVlKT0+IFZpZXcuY2xhc3NQcm9wZXJ0eShjdHJsLCAnaGlkZGVuJywgIXZhbHVlKSxcclxuICAgIHZhbHVlOiAoY3RybCwgdmFsdWUpPT4gY3RybFswXS52YWx1ZSA9IHZhbHVlLFxyXG4gICAgZW5hYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5hdHRyaWJ1dGVQcm9wZXJ0eShjdHJsLCAnZGlzYWJsZWQnLCAhdmFsdWUpXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIHRleHRTdGF0ZUhhbmRsZXJzID0ge1xyXG4gICAgdmlzaWJsZTogKGN0cmwsIHZhbHVlKT0+IFZpZXcuY2xhc3NQcm9wZXJ0eShjdHJsLCAnaGlkZGVuJywgIXZhbHVlKSxcclxuICAgIHZhbHVlOiAoY3RybCwgdmFsdWUpPT4gY3RybC50ZXh0KHZhbHVlKVxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBjbGFzc1Byb3BlcnR5KGN0cmwsIGNsYXNzTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmKHZhbHVlKSB7XHJcbiAgICAgIGN0cmwuYWRkQ2xhc3MoY2xhc3NOYW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjdHJsLnJlbW92ZUNsYXNzKGNsYXNzTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXR0cmlidXRlUHJvcGVydHkoY3RybCwgYXR0cmlidXRlTmFtZSwgdmFsdWUpIHtcclxuICAgIGlmKHZhbHVlKSB7XHJcbiAgICAgIGN0cmwuYXR0cihhdHRyaWJ1dGVOYW1lLCB2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY3RybC5yZW1vdmVBdHRyKGF0dHJpYnV0ZU5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNhbGxIYW5kbGVycyhoYW5kbGVycywgaWQsIGUsIGRhdGEpIHtcclxuICAgIGZvcihsZXQgaGFuZGxlciBvZiBoYW5kbGVycykge1xyXG4gICAgICBpZihoYW5kbGVyW2lkXSkge1xyXG4gICAgICAgIGhhbmRsZXJbaWRdKGUsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYoaGFuZGxlci5oYW5kbGVEZWZhdWx0KSB7XHJcbiAgICAgICAgaGFuZGxlci5oYW5kbGVEZWZhdWx0KGlkLCBlLCBkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGhhbmRsZUV2ZW50KGlkLCBnZXRIYW5kbGVycywgZSwgZGF0YSkge1xyXG4gICAgVmlldy5jYWxsSGFuZGxlcnMoZ2V0SGFuZGxlcnMoaWQpLCBpZCwgZSwgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaGFuZGxlTGlua0V2ZW50KGUpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmKCF0aGlzLmN0cmwuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpIHtcclxuICAgICAgVmlldy5oYW5kbGVFdmVudCh0aGlzLmlkLCB0aGlzLmdldEhhbmRsZXJzLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBoYW5kbGVJbnB1dEV2ZW50KGUpIHtcclxuICAgIFZpZXcuaGFuZGxlRXZlbnQodGhpcy5pZCwgdGhpcy5nZXRIYW5kbGVycywgZSwgZS50YXJnZXQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGhhbmRsZUZvcm1FdmVudChlKSB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBWaWV3LmhhbmRsZUV2ZW50KHRoaXMuaWQsIHRoaXMuZ2V0SGFuZGxlcnMsIGUpO1xyXG4gIH1cclxuXHJcbiAgLy8gdmlydHVhbCBmdW5jdGlvbnMge1xyXG4gIGdldExpbmtzKCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRXaWRnZXRzKCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRJbnB1dHMoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFRleHRzKCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIGdldEhhbmRsZXJzKGlkKSB7XHJcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycztcclxuICB9XHJcbiAgLy8gfVxyXG5cclxuICBjYWxsTGF0ZXIoaGFuZGxlcnMsIGlkLCBlLCBkYXRhLCBtcykge1xyXG4gICAgdGhpcy5wZW5kaW5nc1tpZF0gPSB7XHJcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS5nZXRUaW1lKClcclxuICAgIH07XHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICBjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSwgcGVuZGluZyA9IHRoaXMucGVuZGluZ3NbaWRdO1xyXG4gICAgICBpZihwZW5kaW5nICYmIHRpbWVzdGFtcC1wZW5kaW5nLnRpbWVzdGFtcD49bXMpIHtcclxuICAgICAgICBWaWV3LmNhbGxIYW5kbGVycyhoYW5kbGVycywgaWQsIGUsIGRhdGEpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdzW2lkXTtcclxuICAgICAgfVxyXG4gICAgfSwgbXMpO1xyXG4gIH1cclxuXHJcbiAgLy8gbG9hZEZpbGVzKHVybHMsIHJlYWR5LCBmYWlsdXJlKSB7XHJcbiAgLy8gICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIC8vICAgZm9yKGxldCB1cmwgb2YgdXJscykge1xyXG4gIC8vICAgICBkb25lID0gZG9uZS50aGVuKCgpPT4ge1xyXG4gIC8vICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+IHtcclxuICAvLyAgICAgICAgICQuZ2V0KHVybCwgKHJlcyk9PiB7XHJcbiAgLy8gICAgICAgICAgIHJlYWR5KHJlcywgdXJsKTtcclxuICAvLyAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gIC8vICAgICAgICAgfSkuZmFpbCgocmVzKT0+IHtcclxuICAvLyAgICAgICAgICAgaWYoZmFpbHVyZSAmJiBmYWlsdXJlKHJlcywgdXJsKSkge1xyXG4gIC8vICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgICBlbHNlIHtcclxuICAvLyAgICAgICAgICAgICByZWplY3QocmVzKTtcclxuICAvLyAgICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgfSk7XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgcmV0dXJuIGRvbmU7XHJcbiAgLy8gfVxyXG5cclxuICBsb2FkRmlsZXModXJscywgZmlsZXMpIHtcclxuICAgIGNvbnN0IHRhc2tzID0gW107XHJcbiAgICBmb3IobGV0IG5hbWUgb2YgT2JqZWN0LmtleXModXJscykpIHtcclxuICAgICAgZmlsZXNbbmFtZV0gPSBbXTtcclxuICAgICAgZm9yKGxldCB1cmwgb2YgdXJsc1tuYW1lXSkge1xyXG4gICAgICAgIHRhc2tzLnB1c2goXHJcbiAgICAgICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+IHtcclxuICAgICAgICAgICAgJC5nZXQodXJsLCAoZGF0YSk9PiB7XHJcbiAgICAgICAgICAgICAgZmlsZXNbbmFtZV0ucHVzaCh7dXJsLCBkYXRhfSk7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9KS5mYWlsKChyZXMpPT4ge1xyXG4gICAgICAgICAgICAgIHJlamVjdChyZXMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRhc2tzKTtcclxuICB9XHJcblxyXG4gIHVybFJlc29sdmVyKGJhc2VVcmwsIHVybCkge1xyXG4gICAgdXJsID0gdXJsLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxuICAgIGlmKHVybC5jaGFyQXQoMCkhPT0nLycpIHtcclxuICAgICAgYmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG4gICAgICBjb25zdCBwID0gYmFzZVVybC5sYXN0SW5kZXhPZignLycpO1xyXG4gICAgICB1cmwgPSAofnA/IGJhc2VVcmwuc3Vic3RyKDAsIHArMSk6ICcnKSt1cmw7XHJcblxyXG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpO1xyXG4gICAgICB1cmwgPSBbXTtcclxuICAgICAgZm9yKGxldCBwYXJ0IG9mIHBhcnRzKSB7XHJcbiAgICAgICAgaWYocGFydD09PScuJykge1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHBhcnQ9PT0nLi4nKSB7XHJcbiAgICAgICAgICBpZih1cmwubGVuZ3RoICYmICEodXJsLmxlbmd0aD09PTEgJiYgdXJsWzBdPT09JycpKSB7XHJcbiAgICAgICAgICAgIHVybC5wb3AoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB1cmwucHVzaChwYXJ0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdXJsID0gdXJsLmpvaW4oJy8nKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgb2JqVG9BdHRyc1N0cihvKSB7XHJcbiAgICBjb25zdCByZXMgPSBbXTtcclxuICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyhvKSkge1xyXG4gICAgICByZXMucHVzaChbbmFtZSwgJz1cIicsIG9bbmFtZV0sICdcIiddLmpvaW4oJycpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXMuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJZnJhbWVTaXplKCkge1xyXG4gICAgaWYodGhpcy5mcmFtZSkge1xyXG4gICAgICBpZihNYXRoLmFicyh0aGlzLmZyYW1lLndpZHRoLXRoaXMucGFyZW50Q29udGFpbmVyLndpZHRoKCkpPjEgfHwgTWF0aC5hYnModGhpcy5mcmFtZS5oZWlnaHQtdGhpcy5wYXJlbnRDb250YWluZXIuaGVpZ2h0KCkpPjEpIHtcclxuICAgICAgICB0aGlzLm9uUmVzaXplKCk7XHJcbiAgICAgIH1cclxuICAgICAgc2V0VGltZW91dCh0aGlzLmNoZWNrSWZyYW1lU2l6ZS5iaW5kKHRoaXMpLCAyNTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICB0aGlzLmZyYW1lLndpZHRoID0gdGhpcy5wYXJlbnRDb250YWluZXIud2lkdGgoKTtcclxuICAgIHRoaXMuZnJhbWUuaGVpZ2h0ID0gdGhpcy5wYXJlbnRDb250YWluZXIuaGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGUoaHRtbCkge1xyXG4gICAgcmV0dXJuIGh0bWwucmVwbGFjZSgvPFxcJHRyPiguKik8XFwvXFwkdHI+L2dpLCAoczAsczEpPT4gdHIoczEpKTtcclxuICB9XHJcblxyXG4gIGZpcmVMaW5rc09uTG9hZEV2ZW50KCkge1xyXG4gICAgaWYodGhpcy50ZW1wbGF0ZU9iamVjdCAmJiB0aGlzLnRlbXBsYXRlT2JqZWN0LmxpbmtMb2FkZWQpIHtcclxuICAgICAgbGV0IGxvYWRlZCA9IHRydWU7XHJcbiAgICAgIGZvcihsZXQgakxpbmsgb2YgdGhpcy5qTGlua3MpIHtcclxuICAgICAgICBjb25zdCBsaW5rID0gakxpbmtbMF07XHJcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgICAgaW1nLm9uZXJyb3IgPSAoKT0+IHRoaXMudGVtcGxhdGVPYmplY3QubGlua0xvYWRlZChsaW5rKTtcclxuICAgICAgICBpbWcuc3JjID0gbGluay5ocmVmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihwYXJlbnRDb250YWluZXIsIG9uTG9hZCwgdGVtcGxhdGU9e30pIHtcclxuICAgIHRoaXMucGVuZGluZ3MgPSB7fTtcclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIG9uUmVzaXplOiB0aGlzLm9uUmVzaXplLmJpbmQodGhpcylcclxuICAgIH07XHJcbiAgICB0aGlzLnBhcmVudENvbnRhaW5lciA9ICQocGFyZW50Q29udGFpbmVyKTtcclxuICAgIHRoaXMuaXNJT1MgPSAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhd2luZG93Lk1TU3RyZWFtO1xyXG4gICAgdGhpcy5wYXJlbnRDb250YWluZXIuaHRtbCgnPGlmcmFtZSBzdHlsZT1cImJvcmRlcjogMDsnKyh0aGlzLmlzSU9TPyAnJzogJyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlJykrJ1wiIHNjcm9sbGluZz1cIm5vXCI+PC9pZnJhbWU+Jyk7XHJcblxyXG4gICAgdGhpcy5mcmFtZSA9IHRoaXMucGFyZW50Q29udGFpbmVyLmZpbmQoJ2lmcmFtZScpWzBdO1xyXG4gICAgaWYodGhpcy5mcmFtZS5jb250ZW50V2luZG93LnN0b3ApIHtcclxuICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93LnN0b3AoKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuaXNJT1MpIHtcclxuICAgICAgJCh0aGlzLnBhcmVudENvbnRhaW5lclswXS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KS5vbigncmVzaXplJywgdGhpcy5iaW5kcy5vblJlc2l6ZSk7XHJcbiAgICAgIHRoaXMub25SZXNpemUoKTtcclxuICAgICAgc2V0VGltZW91dCh0aGlzLmNoZWNrSWZyYW1lU2l6ZS5iaW5kKHRoaXMpLCAyNTApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29udGFpbmVyID0gJCh0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5KTtcclxuICAgIHRoaXMuY29udGFpbmVyLmNzcygnbWFyZ2luJywgJzAnKTtcclxuICAgIHRoaXMuaGVhZCA9ICQodGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQuaGVhZCk7XHJcbiAgICB0aGlzLm9uTG9hZCA9IG9uTG9hZDtcclxuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcclxuXHJcbiAgICBjb25zdCBzY3JpcHQgPSB0ZW1wbGF0ZS5odG1sPyB0ZW1wbGF0ZS5zY3JpcHQ6IHRoaXMuZ2V0VGVtcGxhdGUoKS5zY3JpcHQ7XHJcbiAgICBjb25zdCB1cmxzID0ge1xyXG4gICAgICBzdHlsZXM6IHRlbXBsYXRlLnN0eWxlcyB8fCB0aGlzLmdldFRlbXBsYXRlKCkuc3R5bGVzLFxyXG4gICAgICBodG1sOiBbdGVtcGxhdGUuaHRtbCB8fCB0aGlzLmdldFRlbXBsYXRlKCkuaHRtbF0sXHJcbiAgICAgIHNjcmlwdDogc2NyaXB0PyBbc2NyaXB0XTogW11cclxuICAgIH0sIGZpbGVzID0ge30sIGxpbmtzID0gdGVtcGxhdGUubGlua3MgfHwgdGhpcy5nZXRUZW1wbGF0ZSgpLmxpbmtzO1xyXG5cclxuICAgIHRoaXMubG9hZEZpbGVzKHVybHMsIGZpbGVzKS50aGVuKCgpPT4ge1xyXG4gICAgICBmb3IobGV0IHN0eWxlIG9mIGZpbGVzLnN0eWxlcykge1xyXG4gICAgICAgIGxldCB0ZXh0Q3NzID0gc3R5bGUuZGF0YSwgdXJsID0gc3R5bGUudXJsO1xyXG4gICAgICAgIHRleHRDc3MgPSB0ZXh0Q3NzLnJlcGxhY2UoL3VybFxcKFsnXCJdKC4qPylbXCInXVxcKS9nLCAociwgcjEpPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIFsndXJsKCcsIHRoaXMudXJsUmVzb2x2ZXIodXJsLCByMSksICcpJ10uam9pbignJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPiR7dGV4dENzc308L3N0eWxlPmApLmFwcGVuZFRvKHRoaXMuaGVhZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY29udGFpbmVyLmh0bWwodGhpcy50cmFuc2xhdGUoZmlsZXMuaHRtbFswXS5kYXRhKSk7XHJcblxyXG4gICAgICB0aGlzLmpMaW5rcyA9IFtdO1xyXG4gICAgICBmb3IobGV0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICB0aGlzLmpMaW5rcy5wdXNoKCQoWyc8bGluayAnLCB0aGlzLm9ialRvQXR0cnNTdHIobGluayksICc+J10uam9pbignJykpLmFwcGVuZFRvKHRoaXMuaGVhZCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihmaWxlcy5zY3JpcHRbMF0pIHtcclxuICAgICAgICBjb25zdCBpbml0ID0gZXZhbChmaWxlcy5zY3JpcHRbMF0uZGF0YSk7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZU9iamVjdCA9IGluaXQodGhpcy5jb250YWluZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVPYmplY3QgPSB7fTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5saW5rQ29udHJvbHMgPSB7fTtcclxuICAgICAgZm9yKGxldCBpZCBvZiB0aGlzLmdldExpbmtzKCkpIHtcclxuICAgICAgICB0aGlzLmxpbmtDb250cm9sc1tpZF0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcuJytpZCk7XHJcbiAgICAgICAgdGhpcy5iaW5kc1tpZF0gPSBWaWV3LmhhbmRsZUxpbmtFdmVudC5iaW5kKHtnZXRIYW5kbGVyczogdGhpcy5nZXRIYW5kbGVycy5iaW5kKHRoaXMpLCBpZCwgY3RybDogdGhpcy5saW5rQ29udHJvbHNbaWRdfSk7XHJcbiAgICAgICAgdGhpcy5saW5rQ29udHJvbHNbaWRdLm9uKCdjbGljaycsIHRoaXMuYmluZHNbaWRdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy53aWRnZXRDb250cm9scyA9IHt9O1xyXG4gICAgICBmb3IobGV0IGlkIG9mIHRoaXMuZ2V0V2lkZ2V0cygpKSB7XHJcbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sc1tpZF0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcuJytpZCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9scyA9IHt9O1xyXG4gICAgICBmb3IobGV0IGlkIG9mIHRoaXMuZ2V0SW5wdXRzKCkpIHtcclxuICAgICAgICB0aGlzLmlucHV0Q29udHJvbHNbaWRdID0gdGhpcy5jb250YWluZXIuZmluZCgnLicraWQpO1xyXG4gICAgICAgIHRoaXMuYmluZHNbaWRdID0gVmlldy5oYW5kbGVJbnB1dEV2ZW50LmJpbmQoe2dldEhhbmRsZXJzOiB0aGlzLmdldEhhbmRsZXJzLmJpbmQodGhpcyksIGlkLCBjdHJsOiB0aGlzLmlucHV0Q29udHJvbHNbaWRdfSk7XHJcbiAgICAgICAgdGhpcy5pbnB1dENvbnRyb2xzW2lkXS5vbigna2V5dXAnLCB0aGlzLmJpbmRzW2lkXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2xzID0ge307XHJcbiAgICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRGb3JtcygpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbaWRdID0gdGhpcy5jb250YWluZXIuZmluZCgnLicraWQpO1xyXG4gICAgICAgIHRoaXMuYmluZHNbaWRdID0gVmlldy5oYW5kbGVGb3JtRXZlbnQuYmluZCh7Z2V0SGFuZGxlcnM6IHRoaXMuZ2V0SGFuZGxlcnMuYmluZCh0aGlzKSwgaWQsIGN0cmw6IHRoaXMuZm9ybUNvbnRyb2xzW2lkXX0pO1xyXG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2xzW2lkXS5vbignc3VibWl0JywgdGhpcy5iaW5kc1tpZF0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRleHRDb250cm9scyA9IHt9O1xyXG4gICAgICBmb3IobGV0IGlkIG9mIHRoaXMuZ2V0VGV4dHMoKSkge1xyXG4gICAgICAgIHRoaXMudGV4dENvbnRyb2xzW2lkXSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy4nK2lkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdGF0ZVNldHRlcnMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWFwOiB0aGlzLmxpbmtDb250cm9scyxcclxuICAgICAgICAgIHNldHRlcjogdGhpcy5zZXRMaW5rQ29udHJvbFN0YXRlLmJpbmQodGhpcylcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG1hcDogdGhpcy53aWRnZXRDb250cm9scyxcclxuICAgICAgICAgIHNldHRlcjogdGhpcy5zZXRXaWRnZXRDb250cm9sU3RhdGUuYmluZCh0aGlzKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWFwOiB0aGlzLmlucHV0Q29udHJvbHMsXHJcbiAgICAgICAgICBzZXR0ZXI6IHRoaXMuc2V0SW5wdXRDb250cm9sU3RhdGUuYmluZCh0aGlzKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWFwOiB0aGlzLnRleHRDb250cm9scyxcclxuICAgICAgICAgIHNldHRlcjogdGhpcy5zZXRUZXh0Q29udHJvbFN0YXRlLmJpbmQodGhpcylcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcblxyXG4gICAgICB0aGlzLmluaXRWaWV3KCk7XHJcblxyXG4gICAgICBpZih0aGlzLm9uTG9hZCkge1xyXG4gICAgICAgIHRoaXMub25Mb2FkKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZmlyZUxpbmtzT25Mb2FkRXZlbnQoKTtcclxuICAgIH0pLlxyXG4gICAgY2F0Y2goKHJlcyk9PiBjb25zb2xlLmVycm9yKHJlcykpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGRlbGV0ZSB0aGlzLnRleHRDb250cm9scztcclxuICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRMaW5rcygpKSB7XHJcbiAgICAgIHRoaXMubGlua0NvbnRyb2xzW2lkXS5vZmYoJ2NsaWNrJywgdGhpcy5iaW5kc1tpZF0pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMubGlua0NvbnRyb2xzO1xyXG4gICAgZGVsZXRlIHRoaXMud2lkZ2V0Q29udHJvbHM7XHJcbiAgICBmb3IobGV0IGlkIG9mIHRoaXMuZ2V0SW5wdXRzKCkpIHtcclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2xzW2lkXS5vZmYoJ2tleXVwJywgdGhpcy5iaW5kc1tpZF0pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMuaW5wdXRDb250cm9scztcclxuICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRGb3JtcygpKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2xzW2lkXS5vZmYoJ3N1Ym1pdCcsIHRoaXMuYmluZHNbaWRdKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLmZvcm1Db250cm9scztcclxuXHJcbiAgICAhdGhpcy50ZW1wbGF0ZU9iamVjdC5kaXNwb3NlIHx8IHRoaXMudGVtcGxhdGVPYmplY3QuZGlzcG9zZSgpO1xyXG4gICAgZGVsZXRlIHRoaXMudGVtcGxhdGVPYmplY3Q7XHJcblxyXG4gICAgaWYodGhpcy5pc0lPUykge1xyXG4gICAgICAkKHRoaXMucGFyZW50Q29udGFpbmVyWzBdLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpLm9mZigncmVzaXplJywgdGhpcy5iaW5kcy5vblJlc2l6ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhcmVudENvbnRhaW5lci5odG1sKCcnKTtcclxuICAgIGRlbGV0ZSB0aGlzLmZyYW1lO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGFpbmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyWzBdO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50Q29udGFpbmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50Q29udGFpbmVyWzBdO1xyXG4gIH1cclxuXHJcbiAgYWRkSGFuZGxlcihoYW5kbGVyKSB7XHJcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICBpbml0VmlldygpIHtcclxuXHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc2V0Q29udHJvbFN0YXRlKGN0cmwsIGRlZmF1bHRzLCBzdGF0ZSwgc3RhdGVIYW5kbGVycykge1xyXG4gICAgaWYoY3RybCkge1xyXG4gICAgICBjb25zdCBzdCA9IHtcclxuICAgICAgICAuLi5kZWZhdWx0cyxcclxuICAgICAgICAuLi5zdGF0ZVxyXG4gICAgICB9O1xyXG4gICAgICBmb3IobGV0IG5hbWUgaW4gc3QpIHtcclxuICAgICAgICBpZihzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBzdGF0ZUhhbmRsZXJzW25hbWVdKSB7XHJcbiAgICAgICAgICBzdGF0ZUhhbmRsZXJzW25hbWVdKGN0cmwsIHN0W25hbWVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldExpbmtDb250cm9sU3RhdGUoaWQsIHN0YXRlKSB7XHJcbiAgICBWaWV3LnNldENvbnRyb2xTdGF0ZShcclxuICAgICAgdGhpcy5saW5rQ29udHJvbHNbaWRdLFxyXG4gICAgICB7XHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgVmlldy5saW5rU3RhdGVIYW5kbGVyc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldFdpZGdldENvbnRyb2xTdGF0ZShpZCwgc3RhdGUpIHtcclxuICAgIFZpZXcuc2V0Q29udHJvbFN0YXRlKFxyXG4gICAgICB0aGlzLndpZGdldENvbnRyb2xzW2lkXSxcclxuICAgICAge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBlbmFibGU6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgc3RhdGUsXHJcbiAgICAgIFZpZXcud2lkZ2V0U3RhdGVIYW5kbGVyc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldElucHV0Q29udHJvbFN0YXRlKGlkLCBzdGF0ZSkge1xyXG4gICAgVmlldy5zZXRDb250cm9sU3RhdGUoXHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sc1tpZF0sXHJcbiAgICAgIHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2YWx1ZTogJydcclxuICAgICAgfSxcclxuICAgICAgc3RhdGUsXHJcbiAgICAgIFZpZXcuaW5wdXRTdGF0ZUhhbmRsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0VGV4dENvbnRyb2xTdGF0ZShpZCwgc3RhdGUpIHtcclxuICAgIFZpZXcuc2V0Q29udHJvbFN0YXRlKFxyXG4gICAgICB0aGlzLnRleHRDb250cm9sc1tpZF0sXHJcbiAgICAgIHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgVmlldy50ZXh0U3RhdGVIYW5kbGVyc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9uSXRlbVN0YXRlQ2hhbmdlZCgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRTdGF0ZShpZCwgc3RhdGUpIHtcclxuICAgIGZvcihsZXQgaXRlbSBvZiB0aGlzLnN0YXRlU2V0dGVycykge1xyXG4gICAgICBpZihpdGVtLm1hcFtpZF0pIHtcclxuICAgICAgICBpdGVtLnNldHRlcihpZCwgc3RhdGUpO1xyXG4gICAgICAgIHRoaXMub25JdGVtU3RhdGVDaGFuZ2VkKGlkLCBzdGF0ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1ZpZXcuanNcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9jb21tb24vY2xhc3Nlcy9WaWV3LmpzIiwiaW1wb3J0IHskLCBUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBPcmJpdCBmcm9tICcuL09yYml0JztcclxuaW1wb3J0IFRocmVlTW91c2VFdmVudENvbnZlcnRlciBmcm9tICcuL1RocmVlTW91c2VFdmVudENvbnZlcnRlcic7XHJcbmltcG9ydCBUaHJlZVRvdWNoRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9UaHJlZVRvdWNoRXZlbnRDb252ZXJ0ZXInO1xyXG5pbXBvcnQgRHJhZyBmcm9tICcuL0RyYWcnO1xyXG5pbXBvcnQgQ1NTM0RSZW5kZXJlciBmcm9tICcuL0NTUzNEUmVuZGVyZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlzdWFsV29ybGQgZXh0ZW5kcyBUSFJFRS5FdmVudERpc3BhdGNoZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYywgY29udGFpbmVyLCB1c2VIZWxwZXJzPWZhbHNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy53bmQgPSB3bmQ7XHJcbiAgICB0aGlzLmRvYyA9IGRvYztcclxuICAgIHRoaXMuakNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMucmVuZGVyQ2FsbGJhY2tzID0gW107XHJcblxyXG4gICAgdGhpcy5jbG9jayA9IG5ldyBUSFJFRS5DbG9jaygpO1xyXG5cclxuICAgIHRoaXMucmF5Y2FzdGVyID0gbmV3IFRIUkVFLlJheWNhc3RlcigpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUgPSBuZXcgVEhSRUUuU2NlbmUoKTtcclxuICAgIHRoaXMuY3NzU2NlbmUgPSBuZXcgVEhSRUUuU2NlbmUoKTtcclxuXHJcbiAgICB0aGlzLmNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSgzMCwgdGhpcy53aWR0aCgpL3RoaXMuaGVpZ2h0KCksIDAuMiwgMjAwMCk7XHJcbiAgICBjb25zdCBzY2FsZSA9IDE7XHJcblxyXG4gICAgdGhpcy5jYW1lcmEucG9zaXRpb24ueCA9IDA7XHJcbiAgICB0aGlzLmNhbWVyYS5wb3NpdGlvbi55ID0gNS41KnNjYWxlO1xyXG4gICAgdGhpcy5jYW1lcmEucG9zaXRpb24ueiA9IDA7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlciA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHthbHBoYTogdHJ1ZSwgYW50aWFsaWFzOiB0cnVlfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldENsZWFyQ29sb3IoMHgwMDAwMDAsIDApO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRQaXhlbFJhdGlvKHRoaXMud25kLmRldmljZVBpeGVsUmF0aW8pO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTaXplKHRoaXMud2lkdGgoKSwgdGhpcy5oZWlnaHQoKSk7XHJcblxyXG4gICAgdGhpcy5qQ29udGFpbmVyLmFwcGVuZCh0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuY3NzUmVuZGVyZXJcdD0gbmV3IENTUzNEUmVuZGVyZXIoKTtcclxuICAgIHRoaXMuY3NzUmVuZGVyZXIuc2V0U2l6ZSh0aGlzLndpZHRoKCksIHRoaXMuaGVpZ2h0KCkpO1xyXG4gICAgJCh0aGlzLmNzc1JlbmRlcmVyLmRvbUVsZW1lbnQpLmNzcyh7XHJcbiAgXHRcdHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gIFx0XHR0b3A6IDAsXHJcbiAgXHRcdG1hcmdpbjogMCxcclxuICBcdFx0cGFkZGluZzogMFxyXG5cdCAgfSk7XHJcbiAgICB0aGlzLmpDb250YWluZXIuYXBwZW5kKHRoaXMuY3NzUmVuZGVyZXIuZG9tRWxlbWVudCk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy5jc3NSZW5kZXJlci5kb21FbGVtZW50O1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5jb250cm9scyA9IG5ldyBPcmJpdCh0aGlzLmNhbWVyYSwgdGhpcy5lbGVtZW50KTtcclxuICAgIHRoaXMuY29udHJvbHMudGFyZ2V0LnkgPSAwLjU7XHJcblxyXG4gICAgY29uc3QgY3NzU2NlbmUgPSAkKHRoaXMuY3NzUmVuZGVyZXIuZG9tRWxlbWVudCkuZmluZCgnZGl2JyksIHRtcFZlY3RvciA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpPT4ge1xyXG4gICAgICB0aGlzLmNhbWVyYS5nZXRXb3JsZERpcmVjdGlvbih0bXBWZWN0b3IpO1xyXG4gICAgICBjc3NTY2VuZS5jc3MoJ2Rpc3BsYXknLCB0bXBWZWN0b3IueS10aGlzLmNhbWVyYS5wb3NpdGlvbi55PjA/ICdub25lJzogJ2Jsb2NrJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRleHR1cmVMb2FkZXIgPSBuZXcgVEhSRUUuVGV4dHVyZUxvYWRlcigpO1xyXG5cclxuICAgIHRoaXMuc2NlbmUuYWRkKG5ldyBUSFJFRS5BbWJpZW50TGlnaHQoMHhEMEQwRDApKTsvLzB4QzBDMEMwXHJcblxyXG4gICAgdGhpcy5saWdodCA9IG5ldyBUSFJFRS5EaXJlY3Rpb25hbExpZ2h0KDB4NDA0MDQwLCAxKTtcclxuICAgIHRoaXMubGlnaHQucG9zaXRpb24uc2V0KDAsIDYqc2NhbGUsIDApO1xyXG4gICAgdGhpcy5saWdodC5jYXN0U2hhZG93ID0gZmFsc2U7XHJcbiAgICAvLyBjb25zdCBkID0gMjAqc2NhbGU7XHJcbiAgICAvLyB0aGlzLmxpZ2h0LnNoYWRvdy5jYW1lcmEubGVmdCA9IC1kO1xyXG4gICAgLy8gdGhpcy5saWdodC5zaGFkb3cuY2FtZXJhLnJpZ2h0ID0gZDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS50b3AgPSBkO1xyXG4gICAgLy8gdGhpcy5saWdodC5zaGFkb3cuY2FtZXJhLmJvdHRvbSA9IC1kO1xyXG4gICAgLy8gdGhpcy5saWdodC5zaGFkb3cuY2FtZXJhLm5lYXIgPSAxKnNjYWxlO1xyXG4gICAgLy8gdGhpcy5saWdodC5zaGFkb3cuY2FtZXJhLmZhciA9IDI1KnNjYWxlO1xyXG4gICAgLy8gdGhpcy5saWdodC5zaGFkb3cubWFwU2l6ZS54ID0gMTAyNDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93Lm1hcFNpemUueSA9IDEwMjQ7XHJcbiAgICB0aGlzLnNjZW5lLmFkZCh0aGlzLmxpZ2h0KTtcclxuXHJcbiAgICBpZih1c2VIZWxwZXJzKSB7XHJcbiAgICAgIHRoaXMuc2NlbmUuYWRkKG5ldyBUSFJFRS5BeGlzSGVscGVyKDUpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBvbldpbmRvd1Jlc2l6ZTogdGhpcy5vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBhbmltYXRlOiB0aGlzLmFuaW1hdGUuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuXHJcbiAgICAkKHRoaXMud25kKS5vbigncmVzaXplJywgdGhpcy5iaW5kcy5vbldpbmRvd1Jlc2l6ZSk7XHJcblxyXG4gICAgdGhpcy5tb3VzZUV2ZW50cyA9IG5ldyBUaHJlZU1vdXNlRXZlbnRDb252ZXJ0ZXIodGhpcy53bmQsIHRoaXMuZG9jLCB0aGlzKTtcclxuICAgIHRoaXMudG91Y2hFdmVudHMgPSBuZXcgVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyKHRoaXMud25kLCB0aGlzLmRvYywgdGhpcyk7XHJcbiAgICBjb25zdCBmaWx0ZXJEYXRhID0ge3R5cGU6ICdtb3VzZW1vdmUnfTtcclxuICAgIHRoaXMubW91c2VFdmVudHMuZmlsdGVyID0gKGVsZW1lbnQsIGUpPT4ge1xyXG4gICAgICBjb25zdCB0eXBlcyA9IFsnbW91c2VlbnRlcicsICdtb3VzZW92ZXInLCAnbW91c2VsZWF2ZScsICdtb3VzZW91dCddLCBjb250YWlucyA9IChwLCBjKT0+IHA9PT1jIHx8ICQuY29udGFpbnMocCwgYyk7XHJcbiAgICAgIGlmKGUudHlwZT09PSdtb3VzZW1vdmUnKSB7XHJcbiAgICAgICAgZmlsdGVyRGF0YS5wYWdlWCA9IGUucGFnZVg7XHJcbiAgICAgICAgZmlsdGVyRGF0YS5wYWdlWSA9IGUucGFnZVk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGUucmVsYXRlZFRhcmdldCAmJiB+dHlwZXMuaW5kZXhPZihlLnR5cGUpICYmIGNvbnRhaW5zKGVsZW1lbnQsIGUudGFyZ2V0KSAmJiBjb250YWlucyhlbGVtZW50LCBlLnJlbGF0ZWRUYXJnZXQpPyB7Li4uZSwgLi4uZmlsdGVyRGF0YX06IGU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5kcmFnID0gbmV3IERyYWcodGhpcy53bmQsIHRoaXMuZG9jLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLmFuaW1hdGUoKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBkZWxldGUgdGhpcy5iaW5kcy5hbmltYXRlO1xyXG4gICAgJCh0aGlzLnduZCkub2ZmKCdyZXNpemUnLCB0aGlzLmJpbmRzLm9uV2luZG93UmVzaXplKTtcclxuICAgIHRoaXMubW91c2VFdmVudHMuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy50b3VjaEV2ZW50cy5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLmRyYWcuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5jb250cm9scy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICB3aWR0aCgpIHtcclxuICAgIHJldHVybiB0aGlzLmpDb250YWluZXIud2lkdGgoKTtcclxuICB9XHJcblxyXG4gIGhlaWdodCgpIHtcclxuICAgIHJldHVybiB0aGlzLmpDb250YWluZXIuaGVpZ2h0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRFeHRyYUxpZ2h0aW5nKHYpIHtcclxuICAgIHRoaXMubGlnaHQuaW50ZW5zaXR5ID0gdjtcclxuICB9XHJcblxyXG4gIGdldE9yYml0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHM7XHJcbiAgfVxyXG5cclxuICBzZXRDb250cm9sc1N0YXRlKHN0YXRlKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xzLmVuYWJsZWQgPSBzdGF0ZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRyb2xzU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgb25XaW5kb3dSZXNpemUoKSB7XHJcbiAgICBjb25zdCB1cGRhdGVDYW1lcmEgPSAoY2FtZXJhKT0+IHtcclxuICAgICAgY2FtZXJhLmFzcGVjdCA9IHRoaXMud2lkdGgoKS90aGlzLmhlaWdodCgpO1xyXG4gICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgfSxcclxuICAgIHVwZGF0ZVJlbmRlcmVyID0gKHJlbmRlcmVyKT0+IHtcclxuICAgICAgcmVuZGVyZXIuc2V0U2l6ZSh0aGlzLndpZHRoKCksIHRoaXMuaGVpZ2h0KCkpO1xyXG4gICAgfTtcclxuXHJcbiAgICB1cGRhdGVDYW1lcmEodGhpcy5jYW1lcmEpO1xyXG4gICAgdXBkYXRlUmVuZGVyZXIodGhpcy5yZW5kZXJlcik7XHJcbiAgICB1cGRhdGVSZW5kZXJlcih0aGlzLmNzc1JlbmRlcmVyKTtcclxuXHJcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoe3R5cGU6ICdyZXNpemUnfSk7XHJcbiAgfVxyXG5cclxuICBhZGRPYmplY3Qob2JqZWN0KSB7XHJcbiAgICB0aGlzLnNjZW5lLmFkZChvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ3NzT2JqZWN0KG9iamVjdCkge1xyXG4gICAgdGhpcy5jc3NTY2VuZS5hZGQob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNzc09iamVjdChvYmplY3QpIHtcclxuICAgIHRoaXMuY3NzU2NlbmUucmVtb3ZlKG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVPYmplY3Qob2JqZWN0KSB7XHJcbiAgICB0aGlzLnNjZW5lLnJlbW92ZShvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZSgpIHtcclxuICAgIGlmKHRoaXMuYmluZHMuYW5pbWF0ZSkge1xyXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5iaW5kcy5hbmltYXRlKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgfVxyXG5cclxuICBhZGRSZW5kZXJDYWxsYmFjayhjbGIpIHtcclxuICAgIHRoaXMucmVuZGVyQ2FsbGJhY2tzLnB1c2goY2xiKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVJlbmRlckNhbGxiYWNrKGNsYikge1xyXG4gICAgY29uc3QgaSA9IHRoaXMucmVuZGVyQ2FsbGJhY2tzLmluZGV4T2YoY2xiKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQ2FsbGJhY2tzLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IGRlbHRhVGltZSA9IHRoaXMuY2xvY2suZ2V0RGVsdGEoKTtcclxuICAgIHRoaXMuY29udHJvbHMudXBkYXRlKGRlbHRhVGltZSk7XHJcbiAgICBmb3IobGV0IGNsYiBvZiB0aGlzLnJlbmRlckNhbGxiYWNrcykge1xyXG4gICAgICBjbGIoZGVsdGFUaW1lKTtcclxuICAgIH1cclxuICAgIHRoaXMuY3NzUmVuZGVyZXIucmVuZGVyKHRoaXMuY3NzU2NlbmUsIHRoaXMuY2FtZXJhKTtcclxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuY2FtZXJhKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NHZW9tZXRyeShidWZHZW9tZXRyeSwgbWVzaCkge1xyXG4gICAgbWVzaC5nZW9tZXRyeSA9IGJ1Zkdlb21ldHJ5O1xyXG4gICAgLy8gT2J0YWluIGEgR2VvbWV0cnlcclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLkdlb21ldHJ5KCkuZnJvbUJ1ZmZlckdlb21ldHJ5KGJ1Zkdlb21ldHJ5KTtcclxuICAgIC8vIE1lcmdlIHRoZSB2ZXJ0aWNlcyBzbyB0aGUgdHJpYW5nbGUgc291cCBpcyBjb252ZXJ0ZWQgdG8gaW5kZXhlZCB0cmlhbmdsZXNcclxuICAgIGdlb21ldHJ5Lm1lcmdlVmVydGljZXMoKTtcclxuICAgIC8vIENvbnZlcnQgYWdhaW4gdG8gQnVmZmVyR2VvbWV0cnksIGluZGV4ZWRcclxuICAgIGNvbnN0IGluZGV4ZWRCdWZmZXJHZW9tID0gdGhpcy5jcmVhdGVJbmRleGVkQnVmZmVyR2VvbWV0cnlGcm9tR2VvbWV0cnkoZ2VvbWV0cnkpO1xyXG4gICAgLy8gQ3JlYXRlIGluZGV4IGFycmF5cyBtYXBwaW5nIHRoZSBpbmRleGVkIHZlcnRpY2VzIHRvIGJ1Zkdlb21ldHJ5IHZlcnRpY2VzXHJcbiAgICByZXR1cm4gdGhpcy5tYXBJbmRpY2VzKGJ1Zkdlb21ldHJ5LCBpbmRleGVkQnVmZmVyR2VvbSk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVJbmRleGVkQnVmZmVyR2VvbWV0cnlGcm9tR2VvbWV0cnkoZ2VvbWV0cnkpIHtcclxuICAgIGNvbnN0IG51bVZlcnRpY2VzID0gZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoO1xyXG4gICAgY29uc3QgbnVtRmFjZXMgPSBnZW9tZXRyeS5mYWNlcy5sZW5ndGg7XHJcblxyXG4gICAgY29uc3QgYnVmZmVyR2VvbSA9IG5ldyBUSFJFRS5CdWZmZXJHZW9tZXRyeSgpO1xyXG4gICAgY29uc3QgdmVydGljZXMgPSBuZXcgRmxvYXQzMkFycmF5KG51bVZlcnRpY2VzICogMyk7XHJcbiAgICBjb25zdCBpbmRpY2VzID0gbmV3IChudW1GYWNlcyAqIDMgPiA2NTUzNSA/IFVpbnQzMkFycmF5IDogVWludDE2QXJyYXkpKG51bUZhY2VzICogMyk7XHJcblxyXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IG51bVZlcnRpY2VzOyBpKyspIHtcclxuICAgICAgY29uc3QgcCA9IGdlb21ldHJ5LnZlcnRpY2VzW2ldO1xyXG4gICAgICBjb25zdCBpMyA9IGkgKiAzO1xyXG4gICAgICB2ZXJ0aWNlc1tpM10gPSBwLng7XHJcbiAgICAgIHZlcnRpY2VzW2kzICsgMV0gPSBwLnk7XHJcbiAgICAgIHZlcnRpY2VzW2kzICsgMl0gPSBwLno7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IG51bUZhY2VzOyBpKyspIHtcclxuICAgICAgY29uc3QgZiA9IGdlb21ldHJ5LmZhY2VzW2ldO1xyXG4gICAgICBjb25zdCBpMyA9IGkgKiAzO1xyXG4gICAgICBpbmRpY2VzW2kzXSA9IGYuYTtcclxuICAgICAgaW5kaWNlc1tpMyArIDFdID0gZi5iO1xyXG4gICAgICBpbmRpY2VzW2kzICsgMl0gPSBmLmM7XHJcbiAgICB9XHJcblxyXG4gICAgYnVmZmVyR2VvbS5zZXRJbmRleChuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKGluZGljZXMsIDEpKTtcclxuICAgIGJ1ZmZlckdlb20uYWRkQXR0cmlidXRlKCdwb3NpdGlvbicsIG5ldyBUSFJFRS5CdWZmZXJBdHRyaWJ1dGUodmVydGljZXMsIDMpKTtcclxuXHJcbiAgICByZXR1cm4gYnVmZmVyR2VvbTtcclxuICB9XHJcblxyXG4gIGlzRXF1YWwoeDEsIHkxLCB6MSwgeDIsIHkyLCB6Mikge1xyXG4gICAgY29uc3QgZGVsdGEgPSAwLjAwMDAwMTtcclxuICAgIHJldHVybiBNYXRoLmFicyh4MiAtIHgxKSA8IGRlbHRhICYmXHJcbiAgICBNYXRoLmFicyh5MiAtIHkxKSA8IGRlbHRhICYmXHJcbiAgICBNYXRoLmFicyh6MiAtIHoxKSA8IGRlbHRhO1xyXG4gIH1cclxuXHJcbiAgbWFwSW5kaWNlcyhidWZHZW9tZXRyeSwgaW5kZXhlZEJ1ZmZlckdlb20pIHtcclxuICAgIC8vIENyZWF0ZXMgbWFwcGVkVmVydGljZXMsIG1hcHBlZEluZGljZXMgYW5kIG1hcHBlZEFzc29jaWF0aW9uIGluIGJ1Zkdlb21ldHJ5XHJcbiAgICBjb25zdCB2ZXJ0aWNlcyA9IGJ1Zkdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XHJcbiAgICBjb25zdCBpZHhWZXJ0aWNlcyA9IGluZGV4ZWRCdWZmZXJHZW9tLmF0dHJpYnV0ZXMucG9zaXRpb24uYXJyYXk7XHJcbiAgICBjb25zdCBpbmRpY2VzID0gaW5kZXhlZEJ1ZmZlckdlb20uaW5kZXguYXJyYXk7XHJcblxyXG4gICAgY29uc3QgbnVtSWR4VmVydGljZXMgPSBpZHhWZXJ0aWNlcy5sZW5ndGggLyAzO1xyXG4gICAgY29uc3QgbnVtVmVydGljZXMgPSB2ZXJ0aWNlcy5sZW5ndGggLyAzO1xyXG5cclxuICAgIGJ1Zkdlb21ldHJ5Lm1hcHBlZFZlcnRpY2VzID0gaWR4VmVydGljZXM7XHJcbiAgICBidWZHZW9tZXRyeS5tYXBwZWRJbmRpY2VzID0gaW5kaWNlcztcclxuICAgIGJ1Zkdlb21ldHJ5Lm1hcHBlZEFzc29jaWF0aW9uID0gW107XHJcblxyXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IG51bUlkeFZlcnRpY2VzOyBpKyspIHtcclxuICAgICAgY29uc3QgYXNzb2NpYXRpb24gPSBbXTtcclxuICAgICAgYnVmR2VvbWV0cnkubWFwcGVkQXNzb2NpYXRpb24ucHVzaChhc3NvY2lhdGlvbik7XHJcbiAgICAgIGNvbnN0IGkzID0gaSAqIDM7XHJcbiAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1WZXJ0aWNlczsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgajMgPSBqICogMztcclxuICAgICAgICBpZiAodGhpcy5pc0VxdWFsKGlkeFZlcnRpY2VzW2kzXSwgaWR4VmVydGljZXNbaTMgKyAxXSwgaWR4VmVydGljZXNbaTMgKyAyXSxcclxuICAgICAgICB2ZXJ0aWNlc1tqM10sIHZlcnRpY2VzW2ozICsgMV0sIHZlcnRpY2VzW2ozICsgMl0pKSB7XHJcbiAgICAgICAgICBhc3NvY2lhdGlvbi5wdXNoKGozKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7dmVydGljZXM6IGJ1Zkdlb21ldHJ5Lm1hcHBlZFZlcnRpY2VzLCBpbmRpY2VzOiBidWZHZW9tZXRyeS5tYXBwZWRJbmRpY2VzfTtcclxuICB9XHJcblxyXG4gIG9uZU5vZGVQb3NpdGlvbkNhbGxiYWNrKHAsIHEpIHtcclxuICAgIHRoaXMucG9zaXRpb24uc2V0KHAueCwgcC55LCBwLnopO1xyXG4gICAgdGhpcy5xdWF0ZXJuaW9uLnNldChxLngsIHEueSwgcS56LCBxLncpO1xyXG4gIH1cclxuXHJcbiAgbXVsdHlOb2RlUG9zaXRpb25DYWxsYmFjayhub2RlLCBwLCBuKSB7XHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICBjb25zdCB2b2x1bWVQb3NpdGlvbnMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xyXG4gICAgY29uc3Qgdm9sdW1lTm9ybWFscyA9IGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLmFycmF5O1xyXG4gICAgY29uc3QgYXNzb2NWZXJ0ZXggPSBnZW9tZXRyeS5tYXBwZWRBc3NvY2lhdGlvbltub2RlXTtcclxuXHJcbiAgICBmb3IobGV0IGsgPSAwOyBrIDwgYXNzb2NWZXJ0ZXgubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBsZXQgaW5kZXhWZXJ0ZXggPSBhc3NvY1ZlcnRleFtrXTtcclxuICAgICAgICB2b2x1bWVQb3NpdGlvbnNbaW5kZXhWZXJ0ZXhdID0gcC54O1xyXG4gICAgICAgIHZvbHVtZU5vcm1hbHNbaW5kZXhWZXJ0ZXhdID0gbi54O1xyXG4gICAgICAgICsraW5kZXhWZXJ0ZXg7XHJcbiAgICAgICAgdm9sdW1lUG9zaXRpb25zW2luZGV4VmVydGV4XSA9IHAueTtcclxuICAgICAgICB2b2x1bWVOb3JtYWxzW2luZGV4VmVydGV4XSA9IG4ueTtcclxuICAgICAgICArK2luZGV4VmVydGV4O1xyXG4gICAgICAgIHZvbHVtZVBvc2l0aW9uc1tpbmRleFZlcnRleF0gPSBwLno7XHJcbiAgICAgICAgdm9sdW1lTm9ybWFsc1tpbmRleFZlcnRleF0gPSBuLno7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtdWx0eU5vZGVQb3NpdGlvblBvc3RDYWxsYmFjaygpIHtcclxuICAgIGNvbnN0IGdlb21ldHJ5ID0gdGhpcy5nZW9tZXRyeTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcGF0aFBvc2l0aW9uQ2FsbGJhY2sobm9kZSwgcCkge1xyXG4gICAgY29uc3QgcG9zaXRpb25zID0gdGhpcy5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xyXG5cdFx0bGV0IGkgPSAzICogbm9kZTtcclxuXHRcdHBvc2l0aW9uc1tpKytdID0gcC54O1xyXG5cdFx0cG9zaXRpb25zW2krK10gPSBwLnk7XHJcblx0XHRwb3NpdGlvbnNbaV0gPSBwLno7XHJcbiAgfVxyXG5cclxuICBwYXRoUG9zaXRpb25Qb3N0Q2FsbGJhY2soKSB7XHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICBnZW9tZXRyeS5jb21wdXRlVmVydGV4Tm9ybWFscygpO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9WaXN1YWxXb3JsZC5qc1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL2NvbW1vbi9jbGFzc2VzL1Zpc3VhbFdvcmxkLmpzIiwiaW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnLi9Db250cm9sbGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdpZGdldENvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iodmlldykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMudmlldyA9IHZpZXc7XHJcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvZ2xlKCkge1xyXG4gICAgdGhpcy52aXNpYmxlID0gIXRoaXMudmlzaWJsZTtcclxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBmaXJlQ2hhbmdlKCkge1xyXG4gICAgaWYodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZXcoKSB7XHJcbiAgICBpZih0aGlzLnZpZXcpIHtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCd3aWRGbG9hdFduZCcsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy52aXNpYmxlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9XaWRnZXRDb250cm9sbGVyLmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvV2lkZ2V0Q29udHJvbGxlci5qcyIsImltcG9ydCBUYXJnZXQgZnJvbSAnLi9UYXJnZXQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2lyY2xlVGFyZ2V0IGV4dGVuZHMgVGFyZ2V0IHtcclxuXHJcbiAgY29uc3RydWN0b3IoeCwgeSwgcikge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMucCA9IHtcclxuICAgICAgeCxcclxuICAgICAgeSxcclxuICAgICAgclxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHRlc3RJbnRlcnNlY3Rpb24oZSwgZGF0YSkge1xyXG4gICAgbGV0IHJlcztcclxuICAgIGNvbnN0IHt4LCB5fSA9IGRhdGEsIHAgPSB0aGlzLnA7XHJcbiAgICBpZigoeC1wLngpKih4LXAueCkrKHktcC55KSooeS1wLnkpPD1wLnIqcC5yKSB7XHJcbiAgICAgIHJlcyA9IHtcclxuICAgICAgICB0YXJnZXQ6IHRoaXMsXHJcbiAgICAgICAgZGF0YVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL3RhcmdldHMvQ2lyY2xlVGFyZ2V0LmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvdGFyZ2V0cy9DaXJjbGVUYXJnZXQuanMiLCJpbXBvcnQgVGFyZ2V0IGZyb20gJy4vVGFyZ2V0JztcclxuaW1wb3J0IEJhc2VNYXRoVXRpbHMgZnJvbSAnLi4vQmFzZU1hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb2x5VGFyZ2V0IGV4dGVuZHMgVGFyZ2V0IHtcclxuXHJcbiAgY29uc3RydWN0b3IocG9seSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMucG9seSA9IHBvbHk7XHJcbiAgfVxyXG5cclxuICB0ZXN0SW50ZXJzZWN0aW9uKGUsIHApIHtcclxuICAgIHJldHVybiBCYXNlTWF0aFV0aWxzLmlzSW5zaWRlUG9seSh0aGlzLnBvbHksIHApPyB7XHJcbiAgICAgIHRhcmdldDogdGhpcyxcclxuICAgICAgZGF0YTogcFxyXG4gICAgfTogdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvdGFyZ2V0cy9Qb2x5VGFyZ2V0LmpzXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2s6Ly8vY29tbW9uL2NsYXNzZXMvdGFyZ2V0cy9Qb2x5VGFyZ2V0LmpzIiwiLy8gc3RhdHMuanMgLSBodHRwOi8vZ2l0aHViLmNvbS9tcmRvb2Ivc3RhdHMuanNcbihmdW5jdGlvbihmLGUpe1wib2JqZWN0XCI9PT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOmYuU3RhdHM9ZSgpfSkodGhpcyxmdW5jdGlvbigpe3ZhciBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShhKXtjLmFwcGVuZENoaWxkKGEuZG9tKTtyZXR1cm4gYX1mdW5jdGlvbiB1KGEpe2Zvcih2YXIgZD0wO2Q8Yy5jaGlsZHJlbi5sZW5ndGg7ZCsrKWMuY2hpbGRyZW5bZF0uc3R5bGUuZGlzcGxheT1kPT09YT9cImJsb2NrXCI6XCJub25lXCI7bD1hfXZhciBsPTAsYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Muc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5OjAuOTt6LWluZGV4OjEwMDAwXCI7Yy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCk7XG51KCsrbCVjLmNoaWxkcmVuLmxlbmd0aCl9LCExKTt2YXIgaz0ocGVyZm9ybWFuY2V8fERhdGUpLm5vdygpLGc9ayxhPTAscj1lKG5ldyBmLlBhbmVsKFwiRlBTXCIsXCIjMGZmXCIsXCIjMDAyXCIpKSxoPWUobmV3IGYuUGFuZWwoXCJNU1wiLFwiIzBmMFwiLFwiIzAyMFwiKSk7aWYoc2VsZi5wZXJmb3JtYW5jZSYmc2VsZi5wZXJmb3JtYW5jZS5tZW1vcnkpdmFyIHQ9ZShuZXcgZi5QYW5lbChcIk1CXCIsXCIjZjA4XCIsXCIjMjAxXCIpKTt1KDApO3JldHVybntSRVZJU0lPTjoxNixkb206YyxhZGRQYW5lbDplLHNob3dQYW5lbDp1LGJlZ2luOmZ1bmN0aW9uKCl7az0ocGVyZm9ybWFuY2V8fERhdGUpLm5vdygpfSxlbmQ6ZnVuY3Rpb24oKXthKys7dmFyIGM9KHBlcmZvcm1hbmNlfHxEYXRlKS5ub3coKTtoLnVwZGF0ZShjLWssMjAwKTtpZihjPmcrMUUzJiYoci51cGRhdGUoMUUzKmEvKGMtZyksMTAwKSxnPWMsYT0wLHQpKXt2YXIgZD1wZXJmb3JtYW5jZS5tZW1vcnk7dC51cGRhdGUoZC51c2VkSlNIZWFwU2l6ZS9cbjEwNDg1NzYsZC5qc0hlYXBTaXplTGltaXQvMTA0ODU3Nil9cmV0dXJuIGN9LHVwZGF0ZTpmdW5jdGlvbigpe2s9dGhpcy5lbmQoKX0sZG9tRWxlbWVudDpjLHNldE1vZGU6dX19O2YuUGFuZWw9ZnVuY3Rpb24oZSxmLGwpe3ZhciBjPUluZmluaXR5LGs9MCxnPU1hdGgucm91bmQsYT1nKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKSxyPTgwKmEsaD00OCphLHQ9MyphLHY9MiphLGQ9MyphLG09MTUqYSxuPTc0KmEscD0zMCphLHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtxLndpZHRoPXI7cS5oZWlnaHQ9aDtxLnN0eWxlLmNzc1RleHQ9XCJ3aWR0aDo4MHB4O2hlaWdodDo0OHB4XCI7dmFyIGI9cS5nZXRDb250ZXh0KFwiMmRcIik7Yi5mb250PVwiYm9sZCBcIis5KmErXCJweCBIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZlwiO2IudGV4dEJhc2VsaW5lPVwidG9wXCI7Yi5maWxsU3R5bGU9bDtiLmZpbGxSZWN0KDAsMCxyLGgpO2IuZmlsbFN0eWxlPWY7Yi5maWxsVGV4dChlLHQsdik7XG5iLmZpbGxSZWN0KGQsbSxuLHApO2IuZmlsbFN0eWxlPWw7Yi5nbG9iYWxBbHBoYT0uOTtiLmZpbGxSZWN0KGQsbSxuLHApO3JldHVybntkb206cSx1cGRhdGU6ZnVuY3Rpb24oaCx3KXtjPU1hdGgubWluKGMsaCk7az1NYXRoLm1heChrLGgpO2IuZmlsbFN0eWxlPWw7Yi5nbG9iYWxBbHBoYT0xO2IuZmlsbFJlY3QoMCwwLHIsbSk7Yi5maWxsU3R5bGU9ZjtiLmZpbGxUZXh0KGcoaCkrXCIgXCIrZStcIiAoXCIrZyhjKStcIi1cIitnKGspK1wiKVwiLHQsdik7Yi5kcmF3SW1hZ2UocSxkK2EsbSxuLWEscCxkLG0sbi1hLHApO2IuZmlsbFJlY3QoZCtuLWEsbSxhLHApO2IuZmlsbFN0eWxlPWw7Yi5nbG9iYWxBbHBoYT0uOTtiLmZpbGxSZWN0KGQrbi1hLG0sYSxnKCgxLWgvdykqcCkpfX19O3JldHVybiBmfSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vc3RhdHMuanMvYnVpbGQvc3RhdHMubWluLmpzXG4vLyBtb2R1bGUgaWQgPSA3MFxuLy8gbW9kdWxlIGNodW5rcyA9IDBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjazovLy9+L3N0YXRzLmpzL2J1aWxkL3N0YXRzLm1pbi5qcyIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyohXG4gKiBqUXVlcnkgTW91c2V3aGVlbCAzLjEuMTNcbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIE5vZGUvQ29tbW9uSlMgc3R5bGUgZm9yIEJyb3dzZXJpZnlcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xuICAgICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgfVxufShmdW5jdGlvbiAoJCkge1xuXG4gICAgdmFyIHRvRml4ICA9IFsnd2hlZWwnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdNb3pNb3VzZVBpeGVsU2Nyb2xsJ10sXG4gICAgICAgIHRvQmluZCA9ICggJ29ud2hlZWwnIGluIGRvY3VtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+PSA5ICkgP1xuICAgICAgICAgICAgICAgICAgICBbJ3doZWVsJ10gOiBbJ21vdXNld2hlZWwnLCAnRG9tTW91c2VTY3JvbGwnLCAnTW96TW91c2VQaXhlbFNjcm9sbCddLFxuICAgICAgICBzbGljZSAgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgICAgIG51bGxMb3dlc3REZWx0YVRpbWVvdXQsIGxvd2VzdERlbHRhO1xuXG4gICAgaWYgKCAkLmV2ZW50LmZpeEhvb2tzICkge1xuICAgICAgICBmb3IgKCB2YXIgaSA9IHRvRml4Lmxlbmd0aDsgaTsgKSB7XG4gICAgICAgICAgICAkLmV2ZW50LmZpeEhvb2tzWyB0b0ZpeFstLWldIF0gPSAkLmV2ZW50Lm1vdXNlSG9va3M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3BlY2lhbCA9ICQuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsID0ge1xuICAgICAgICB2ZXJzaW9uOiAnMy4xLjEyJyxcblxuICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoIHRoaXMuYWRkRXZlbnRMaXN0ZW5lciApIHtcbiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IHRvQmluZC5sZW5ndGg7IGk7ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIHRvQmluZFstLWldLCBoYW5kbGVyLCBmYWxzZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbm1vdXNld2hlZWwgPSBoYW5kbGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGxpbmUgaGVpZ2h0IGFuZCBwYWdlIGhlaWdodCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnRcbiAgICAgICAgICAgICQuZGF0YSh0aGlzLCAnbW91c2V3aGVlbC1saW5lLWhlaWdodCcsIHNwZWNpYWwuZ2V0TGluZUhlaWdodCh0aGlzKSk7XG4gICAgICAgICAgICAkLmRhdGEodGhpcywgJ21vdXNld2hlZWwtcGFnZS1oZWlnaHQnLCBzcGVjaWFsLmdldFBhZ2VIZWlnaHQodGhpcykpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gdG9CaW5kLmxlbmd0aDsgaTsgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggdG9CaW5kWy0taV0sIGhhbmRsZXIsIGZhbHNlICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ubW91c2V3aGVlbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZGF0YSB3ZSBhZGRlZCB0byB0aGUgZWxlbWVudFxuICAgICAgICAgICAgJC5yZW1vdmVEYXRhKHRoaXMsICdtb3VzZXdoZWVsLWxpbmUtaGVpZ2h0Jyk7XG4gICAgICAgICAgICAkLnJlbW92ZURhdGEodGhpcywgJ21vdXNld2hlZWwtcGFnZS1oZWlnaHQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRMaW5lSGVpZ2h0OiBmdW5jdGlvbihlbGVtKSB7XG4gICAgICAgICAgICB2YXIgJGVsZW0gPSAkKGVsZW0pLFxuICAgICAgICAgICAgICAgICRwYXJlbnQgPSAkZWxlbVsnb2Zmc2V0UGFyZW50JyBpbiAkLmZuID8gJ29mZnNldFBhcmVudCcgOiAncGFyZW50J10oKTtcbiAgICAgICAgICAgIGlmICghJHBhcmVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAkcGFyZW50ID0gJCgnYm9keScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KCRwYXJlbnQuY3NzKCdmb250U2l6ZScpLCAxMCkgfHwgcGFyc2VJbnQoJGVsZW0uY3NzKCdmb250U2l6ZScpLCAxMCkgfHwgMTY7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0UGFnZUhlaWdodDogZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuICQoZWxlbSkuaGVpZ2h0KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGFkanVzdE9sZERlbHRhczogdHJ1ZSwgLy8gc2VlIHNob3VsZEFkanVzdE9sZERlbHRhcygpIGJlbG93XG4gICAgICAgICAgICBub3JtYWxpemVPZmZzZXQ6IHRydWUgIC8vIGNhbGxzIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmb3IgZWFjaCBldmVudFxuICAgICAgICB9XG4gICAgfTtcblxuICAgICQuZm4uZXh0ZW5kKHtcbiAgICAgICAgbW91c2V3aGVlbDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgIHJldHVybiBmbiA/IHRoaXMuYmluZCgnbW91c2V3aGVlbCcsIGZuKSA6IHRoaXMudHJpZ2dlcignbW91c2V3aGVlbCcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVubW91c2V3aGVlbDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuYmluZCgnbW91c2V3aGVlbCcsIGZuKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHZhciBvcmdFdmVudCAgID0gZXZlbnQgfHwgd2luZG93LmV2ZW50LFxuICAgICAgICAgICAgYXJncyAgICAgICA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgICAgIGRlbHRhICAgICAgPSAwLFxuICAgICAgICAgICAgZGVsdGFYICAgICA9IDAsXG4gICAgICAgICAgICBkZWx0YVkgICAgID0gMCxcbiAgICAgICAgICAgIGFic0RlbHRhICAgPSAwLFxuICAgICAgICAgICAgb2Zmc2V0WCAgICA9IDAsXG4gICAgICAgICAgICBvZmZzZXRZICAgID0gMDtcbiAgICAgICAgZXZlbnQgPSAkLmV2ZW50LmZpeChvcmdFdmVudCk7XG4gICAgICAgIGV2ZW50LnR5cGUgPSAnbW91c2V3aGVlbCc7XG5cbiAgICAgICAgLy8gT2xkIHNjaG9vbCBzY3JvbGx3aGVlbCBkZWx0YVxuICAgICAgICBpZiAoICdkZXRhaWwnICAgICAgaW4gb3JnRXZlbnQgKSB7IGRlbHRhWSA9IG9yZ0V2ZW50LmRldGFpbCAqIC0xOyAgICAgIH1cbiAgICAgICAgaWYgKCAnd2hlZWxEZWx0YScgIGluIG9yZ0V2ZW50ICkgeyBkZWx0YVkgPSBvcmdFdmVudC53aGVlbERlbHRhOyAgICAgICB9XG4gICAgICAgIGlmICggJ3doZWVsRGVsdGFZJyBpbiBvcmdFdmVudCApIHsgZGVsdGFZID0gb3JnRXZlbnQud2hlZWxEZWx0YVk7ICAgICAgfVxuICAgICAgICBpZiAoICd3aGVlbERlbHRhWCcgaW4gb3JnRXZlbnQgKSB7IGRlbHRhWCA9IG9yZ0V2ZW50LndoZWVsRGVsdGFYICogLTE7IH1cblxuICAgICAgICAvLyBGaXJlZm94IDwgMTcgaG9yaXpvbnRhbCBzY3JvbGxpbmcgcmVsYXRlZCB0byBET01Nb3VzZVNjcm9sbCBldmVudFxuICAgICAgICBpZiAoICdheGlzJyBpbiBvcmdFdmVudCAmJiBvcmdFdmVudC5heGlzID09PSBvcmdFdmVudC5IT1JJWk9OVEFMX0FYSVMgKSB7XG4gICAgICAgICAgICBkZWx0YVggPSBkZWx0YVkgKiAtMTtcbiAgICAgICAgICAgIGRlbHRhWSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgZGVsdGEgdG8gYmUgZGVsdGFZIG9yIGRlbHRhWCBpZiBkZWx0YVkgaXMgMCBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdGl5XG4gICAgICAgIGRlbHRhID0gZGVsdGFZID09PSAwID8gZGVsdGFYIDogZGVsdGFZO1xuXG4gICAgICAgIC8vIE5ldyBzY2hvb2wgd2hlZWwgZGVsdGEgKHdoZWVsIGV2ZW50KVxuICAgICAgICBpZiAoICdkZWx0YVknIGluIG9yZ0V2ZW50ICkge1xuICAgICAgICAgICAgZGVsdGFZID0gb3JnRXZlbnQuZGVsdGFZICogLTE7XG4gICAgICAgICAgICBkZWx0YSAgPSBkZWx0YVk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAnZGVsdGFYJyBpbiBvcmdFdmVudCApIHtcbiAgICAgICAgICAgIGRlbHRhWCA9IG9yZ0V2ZW50LmRlbHRhWDtcbiAgICAgICAgICAgIGlmICggZGVsdGFZID09PSAwICkgeyBkZWx0YSAgPSBkZWx0YVggKiAtMTsgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gY2hhbmdlIGFjdHVhbGx5IGhhcHBlbmVkLCBubyByZWFzb24gdG8gZ28gYW55IGZ1cnRoZXJcbiAgICAgICAgaWYgKCBkZWx0YVkgPT09IDAgJiYgZGVsdGFYID09PSAwICkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBOZWVkIHRvIGNvbnZlcnQgbGluZXMgYW5kIHBhZ2VzIHRvIHBpeGVscyBpZiB3ZSBhcmVuJ3QgYWxyZWFkeSBpbiBwaXhlbHNcbiAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVlIGRlbHRhIG1vZGVzOlxuICAgICAgICAvLyAgICogZGVsdGFNb2RlIDAgaXMgYnkgcGl4ZWxzLCBub3RoaW5nIHRvIGRvXG4gICAgICAgIC8vICAgKiBkZWx0YU1vZGUgMSBpcyBieSBsaW5lc1xuICAgICAgICAvLyAgICogZGVsdGFNb2RlIDIgaXMgYnkgcGFnZXNcbiAgICAgICAgaWYgKCBvcmdFdmVudC5kZWx0YU1vZGUgPT09IDEgKSB7XG4gICAgICAgICAgICB2YXIgbGluZUhlaWdodCA9ICQuZGF0YSh0aGlzLCAnbW91c2V3aGVlbC1saW5lLWhlaWdodCcpO1xuICAgICAgICAgICAgZGVsdGEgICo9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBkZWx0YVkgKj0gbGluZUhlaWdodDtcbiAgICAgICAgICAgIGRlbHRhWCAqPSBsaW5lSGVpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKCBvcmdFdmVudC5kZWx0YU1vZGUgPT09IDIgKSB7XG4gICAgICAgICAgICB2YXIgcGFnZUhlaWdodCA9ICQuZGF0YSh0aGlzLCAnbW91c2V3aGVlbC1wYWdlLWhlaWdodCcpO1xuICAgICAgICAgICAgZGVsdGEgICo9IHBhZ2VIZWlnaHQ7XG4gICAgICAgICAgICBkZWx0YVkgKj0gcGFnZUhlaWdodDtcbiAgICAgICAgICAgIGRlbHRhWCAqPSBwYWdlSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcmUgbG93ZXN0IGFic29sdXRlIGRlbHRhIHRvIG5vcm1hbGl6ZSB0aGUgZGVsdGEgdmFsdWVzXG4gICAgICAgIGFic0RlbHRhID0gTWF0aC5tYXgoIE1hdGguYWJzKGRlbHRhWSksIE1hdGguYWJzKGRlbHRhWCkgKTtcblxuICAgICAgICBpZiAoICFsb3dlc3REZWx0YSB8fCBhYnNEZWx0YSA8IGxvd2VzdERlbHRhICkge1xuICAgICAgICAgICAgbG93ZXN0RGVsdGEgPSBhYnNEZWx0YTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IG9sZGVyIGRlbHRhcyBpZiBuZWNlc3NhcnlcbiAgICAgICAgICAgIGlmICggc2hvdWxkQWRqdXN0T2xkRGVsdGFzKG9yZ0V2ZW50LCBhYnNEZWx0YSkgKSB7XG4gICAgICAgICAgICAgICAgbG93ZXN0RGVsdGEgLz0gNDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGp1c3Qgb2xkZXIgZGVsdGFzIGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAoIHNob3VsZEFkanVzdE9sZERlbHRhcyhvcmdFdmVudCwgYWJzRGVsdGEpICkge1xuICAgICAgICAgICAgLy8gRGl2aWRlIGFsbCB0aGUgdGhpbmdzIGJ5IDQwIVxuICAgICAgICAgICAgZGVsdGEgIC89IDQwO1xuICAgICAgICAgICAgZGVsdGFYIC89IDQwO1xuICAgICAgICAgICAgZGVsdGFZIC89IDQwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGEgd2hvbGUsIG5vcm1hbGl6ZWQgdmFsdWUgZm9yIHRoZSBkZWx0YXNcbiAgICAgICAgZGVsdGEgID0gTWF0aFsgZGVsdGEgID49IDEgPyAnZmxvb3InIDogJ2NlaWwnIF0oZGVsdGEgIC8gbG93ZXN0RGVsdGEpO1xuICAgICAgICBkZWx0YVggPSBNYXRoWyBkZWx0YVggPj0gMSA/ICdmbG9vcicgOiAnY2VpbCcgXShkZWx0YVggLyBsb3dlc3REZWx0YSk7XG4gICAgICAgIGRlbHRhWSA9IE1hdGhbIGRlbHRhWSA+PSAxID8gJ2Zsb29yJyA6ICdjZWlsJyBdKGRlbHRhWSAvIGxvd2VzdERlbHRhKTtcblxuICAgICAgICAvLyBOb3JtYWxpc2Ugb2Zmc2V0WCBhbmQgb2Zmc2V0WSBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICggc3BlY2lhbC5zZXR0aW5ncy5ub3JtYWxpemVPZmZzZXQgJiYgdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QgKSB7XG4gICAgICAgICAgICB2YXIgYm91bmRpbmdSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIG9mZnNldFggPSBldmVudC5jbGllbnRYIC0gYm91bmRpbmdSZWN0LmxlZnQ7XG4gICAgICAgICAgICBvZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIGJvdW5kaW5nUmVjdC50b3A7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgaW5mb3JtYXRpb24gdG8gdGhlIGV2ZW50IG9iamVjdFxuICAgICAgICBldmVudC5kZWx0YVggPSBkZWx0YVg7XG4gICAgICAgIGV2ZW50LmRlbHRhWSA9IGRlbHRhWTtcbiAgICAgICAgZXZlbnQuZGVsdGFGYWN0b3IgPSBsb3dlc3REZWx0YTtcbiAgICAgICAgZXZlbnQub2Zmc2V0WCA9IG9mZnNldFg7XG4gICAgICAgIGV2ZW50Lm9mZnNldFkgPSBvZmZzZXRZO1xuICAgICAgICAvLyBHbyBhaGVhZCBhbmQgc2V0IGRlbHRhTW9kZSB0byAwIHNpbmNlIHdlIGNvbnZlcnRlZCB0byBwaXhlbHNcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBhIGxpdHRsZSBvZGQgc2luY2Ugd2Ugb3ZlcndyaXRlIHRoZSBkZWx0YVgvWVxuICAgICAgICAvLyBwcm9wZXJ0aWVzIHdpdGggbm9ybWFsaXplZCBkZWx0YXMuXG4gICAgICAgIGV2ZW50LmRlbHRhTW9kZSA9IDA7XG5cbiAgICAgICAgLy8gQWRkIGV2ZW50IGFuZCBkZWx0YSB0byB0aGUgZnJvbnQgb2YgdGhlIGFyZ3VtZW50c1xuICAgICAgICBhcmdzLnVuc2hpZnQoZXZlbnQsIGRlbHRhLCBkZWx0YVgsIGRlbHRhWSk7XG5cbiAgICAgICAgLy8gQ2xlYXJvdXQgbG93ZXN0RGVsdGEgYWZ0ZXIgc29tZXRpbWUgdG8gYmV0dGVyXG4gICAgICAgIC8vIGhhbmRsZSBtdWx0aXBsZSBkZXZpY2UgdHlwZXMgdGhhdCBnaXZlIGRpZmZlcmVudFxuICAgICAgICAvLyBhIGRpZmZlcmVudCBsb3dlc3REZWx0YVxuICAgICAgICAvLyBFeDogdHJhY2twYWQgPSAzIGFuZCBtb3VzZSB3aGVlbCA9IDEyMFxuICAgICAgICBpZiAobnVsbExvd2VzdERlbHRhVGltZW91dCkgeyBjbGVhclRpbWVvdXQobnVsbExvd2VzdERlbHRhVGltZW91dCk7IH1cbiAgICAgICAgbnVsbExvd2VzdERlbHRhVGltZW91dCA9IHNldFRpbWVvdXQobnVsbExvd2VzdERlbHRhLCAyMDApO1xuXG4gICAgICAgIHJldHVybiAoJC5ldmVudC5kaXNwYXRjaCB8fCAkLmV2ZW50LmhhbmRsZSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbnVsbExvd2VzdERlbHRhKCkge1xuICAgICAgICBsb3dlc3REZWx0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkQWRqdXN0T2xkRGVsdGFzKG9yZ0V2ZW50LCBhYnNEZWx0YSkge1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIG9sZGVyIGV2ZW50IGFuZCB0aGUgZGVsdGEgaXMgZGl2aXNhYmxlIGJ5IDEyMCxcbiAgICAgICAgLy8gdGhlbiB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgYnJvd3NlciBpcyB0cmVhdGluZyB0aGlzIGFzIGFuXG4gICAgICAgIC8vIG9sZGVyIG1vdXNlIHdoZWVsIGV2ZW50IGFuZCB0aGF0IHdlIHNob3VsZCBkaXZpZGUgdGhlIGRlbHRhc1xuICAgICAgICAvLyBieSA0MCB0byB0cnkgYW5kIGdldCBhIG1vcmUgdXNhYmxlIGRlbHRhRmFjdG9yLlxuICAgICAgICAvLyBTaWRlIG5vdGUsIHRoaXMgYWN0dWFsbHkgaW1wYWN0cyB0aGUgcmVwb3J0ZWQgc2Nyb2xsIGRpc3RhbmNlXG4gICAgICAgIC8vIGluIG9sZGVyIGJyb3dzZXJzIGFuZCBjYW4gY2F1c2Ugc2Nyb2xsaW5nIHRvIGJlIHNsb3dlciB0aGFuIG5hdGl2ZS5cbiAgICAgICAgLy8gVHVybiB0aGlzIG9mZiBieSBzZXR0aW5nICQuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsLnNldHRpbmdzLmFkanVzdE9sZERlbHRhcyB0byBmYWxzZS5cbiAgICAgICAgcmV0dXJuIHNwZWNpYWwuc2V0dGluZ3MuYWRqdXN0T2xkRGVsdGFzICYmIG9yZ0V2ZW50LnR5cGUgPT09ICdtb3VzZXdoZWVsJyAmJiBhYnNEZWx0YSAlIDEyMCA9PT0gMDtcbiAgICB9XG5cbn0pKTtcblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vY29tbW9uL34vaW1wb3J0cy1sb2FkZXI/ZGVmaW5lPT5mYWxzZSEuL34vanF1ZXJ5LW1vdXNld2hlZWwvanF1ZXJ5Lm1vdXNld2hlZWwuanNcbi8vIG1vZHVsZSBpZCA9IDcxXG4vLyBtb2R1bGUgY2h1bmtzID0gMFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrOi8vL34vanF1ZXJ5LW1vdXNld2hlZWwvanF1ZXJ5Lm1vdXNld2hlZWwuanMiLCJjb25zdCBfJCA9IEdMT0JBTF9MSUJTLmpRdWVyeT8gd2luZG93LmpRdWVyeTogcmVxdWlyZSgnanF1ZXJ5JyksXHJcbiAgICAgIF9odG1sMmNhbnZhcyA9IEdMT0JBTF9MSUJTLmh0bWwyY2FudmFzPyB3aW5kb3cuaHRtbDJjYW52YXM6IHJlcXVpcmUoJ2h0bWwyY2FudmFzJyksXHJcbiAgICAgIF9USFJFRSA9IEdMT0JBTF9MSUJTLlRIUkVFPyB3aW5kb3cuVEhSRUU6IHJlcXVpcmUoJ3RocmVlJyksXHJcbiAgICAgIF9QREZKUyA9IEdMT0JBTF9MSUJTLlBERkpTPyB3aW5kb3cuUERGSlM6IHJlcXVpcmUoJ3BkZmpzJyk7XHJcblxyXG5leHBvcnQge1xyXG4gIF8kIGFzICQsXHJcbiAgX2h0bWwyY2FudmFzIGFzIGh0bWwyY2FudmFzLFxyXG4gIF9USFJFRSBhcyBUSFJFRSxcclxuICBfUERGSlMgYXMgUERGSlNcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2xpYnMuanMiXSwic291cmNlUm9vdCI6IiJ9\n"
  },
  {
    "path": "index.js",
    "content": "import {$, html2canvas, THREE, PDFJS} from './src/libs';\nrequire('./src/'+(ENVIROMENT.debug? '3dflipbook.js': '3dflipbook.min.js'));\n\nexport default $;\n"
  },
  {
    "path": "js/default-book-view.js",
    "content": "function init(container) {\n  var instance;\n  if(window.jQuery) {\n    var $ = window.jQuery;\n    instance = {\n      floatWnd: container.find('.float-wnd'),\n      binds: {\n        showDropMenu: function(e) {\n          e.preventDefault();\n          var el = $(e.target);\n          while(!el.hasClass('toggle')) {\n            el = $(el[0].parentNode);\n          }\n          var menu = el.find('.menu');\n          if(menu.hasClass('hidden')) {\n            container.find('.ctrl .fnavbar .menu').addClass('hidden');\n            menu.removeClass('hidden');\n            e.stopPropagation();\n          }\n        },\n        hideDropMenu: function() {\n          container.find('.ctrl .fnavbar .menu').addClass('hidden');\n        },\n        pickFloatWnd: function(e) {\n          if(instance.pos) {\n            instance.binds.dropFloatWnd();\n          }\n          else {\n            instance.pos = {\n              x: e.pageX,\n              y: e.pageY\n            };\n          }\n        },\n        moveFloatWnd: function(e) {\n          if(instance.pos) {\n            var dv = {\n              x: e.pageX-instance.pos.x,\n              y: e.pageY-instance.pos.y\n            }, old = {\n              x: parseInt(instance.floatWnd.css('left')),\n              y: parseInt(instance.floatWnd.css('top'))\n            };\n            instance.floatWnd.css('left', old.x+dv.x+'px').css('top', old.y+dv.y+'px');\n            instance.pos = {\n              x: e.pageX,\n              y: e.pageY\n            };\n          }\n        },\n        dropFloatWnd: function() {\n          delete instance.pos;\n        },\n        jsCenter: function() {\n          var ns = container.find('.js-center');\n          for(var i=0; i<ns.length; ++i) {\n            var n = $(ns[i]), parentWidth = $(ns[i].parentNode).width(), width = n.width();\n            n.css('left', 0.5*(parentWidth-width)+'px');\n          }\n        }\n      },\n      appLoaded: function() {\n        instance.binds.jsCenter();\n      },\n      linkLoaded: function(link) {\n        instance.binds.jsCenter();\n      },\n      dispose: function() {\n        container.find('.ctrl .fnavbar .fnav .toggle').off('click', instance.binds.showDropMenu);\n        $(container[0].ownerDocument).off('click', instance.binds.hideDropMenu);\n\n        $(container[0].ownerDocument).off('mousemove', instance.binds.moveFloatWnd);\n        $(container[0].ownerDocument).off('mouseup', instance.binds.dropFloatWnd);\n        instance.floatWnd.find('.header').off('mousedown', instance.binds.pickFloatWnd);\n\n        $(container[0].ownerDocument.defaultView).off('resize', instance.binds.jsCenter);\n      }\n    };\n    container.find('.ctrl .fnavbar .fnav .toggle').on('click', instance.binds.showDropMenu);\n    $(container[0].ownerDocument).on('click', instance.binds.hideDropMenu);\n\n    $(container[0].ownerDocument).on('mousemove', instance.binds.moveFloatWnd);\n    $(container[0].ownerDocument).on('mouseup', instance.binds.dropFloatWnd);\n    instance.floatWnd.find('.header').on('mousedown', instance.binds.pickFloatWnd);\n\n    $(container[0].ownerDocument.defaultView).on('resize', instance.binds.jsCenter);\n    instance.binds.jsCenter();\n  }\n  else {\n    instance = {\n      dispose: function() {\n      }\n    };\n    console.error('jQuery is not found');\n  }\n  return instance;\n} init\n"
  },
  {
    "path": "js/pdf.worker.js",
    "content": "(function(e,t){\"use strict\";if(typeof define===\"function\"&&define.amd){define(\"pdfjs-dist/build/pdf.worker\",[\"exports\"],t)}else if(typeof exports!==\"undefined\"){t(exports)}else{t(e[\"pdfjsDistBuildPdfWorker\"]={})}})(this,function(e){\"use strict\";var t=\"1.7.225\";var r=\"17d135f\";var a=typeof document!==\"undefined\"&&document.currentScript?document.currentScript.src:null;var i={};(function e(){(function(e,t){t(e.pdfjsCoreArithmeticDecoder={})})(this,function(e){var t=function e(){var t=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];function r(e,t,r){this.data=e;this.bp=t;this.dataEnd=r;this.chigh=e[t];this.clow=0;this.byteIn();this.chigh=this.chigh<<7&65535|this.clow>>9&127;this.clow=this.clow<<7&65535;this.ct-=7;this.a=32768}r.prototype={byteIn:function e(){var t=this.data;var r=this.bp;if(t[r]===255){var a=t[r+1];if(a>143){this.clow+=65280;this.ct=8}else{r++;this.clow+=t[r]<<9;this.ct=7;this.bp=r}}else{r++;this.clow+=r<this.dataEnd?t[r]<<8:65280;this.ct=8;this.bp=r}if(this.clow>65535){this.chigh+=this.clow>>16;this.clow&=65535}},readBit:function e(r,a){var i=r[a]>>1,n=r[a]&1;var s=t[i];var o=s.qe;var l;var c=this.a-o;if(this.chigh<o){if(c<o){c=o;l=n;i=s.nmps}else{c=o;l=1^n;if(s.switchFlag===1){n=l}i=s.nlps}}else{this.chigh-=o;if((c&32768)!==0){this.a=c;return n}if(c<o){l=1^n;if(s.switchFlag===1){n=l}i=s.nlps}else{l=n;i=s.nmps}}do{if(this.ct===0){this.byteIn()}c<<=1;this.chigh=this.chigh<<1&65535|this.clow>>15&1;this.clow=this.clow<<1&65535;this.ct--}while((c&32768)===0);this.a=c;r[a]=i<<1|n;return l}};return r}();e.ArithmeticDecoder=t});(function(e,t){t(e.pdfjsCoreCharsets={})})(this,function(e){var t=[\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quoteright\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"quoteleft\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\"exclamdown\",\"cent\",\"sterling\",\"fraction\",\"yen\",\"florin\",\"section\",\"currency\",\"quotesingle\",\"quotedblleft\",\"guillemotleft\",\"guilsinglleft\",\"guilsinglright\",\"fi\",\"fl\",\"endash\",\"dagger\",\"daggerdbl\",\"periodcentered\",\"paragraph\",\"bullet\",\"quotesinglbase\",\"quotedblbase\",\"quotedblright\",\"guillemotright\",\"ellipsis\",\"perthousand\",\"questiondown\",\"grave\",\"acute\",\"circumflex\",\"tilde\",\"macron\",\"breve\",\"dotaccent\",\"dieresis\",\"ring\",\"cedilla\",\"hungarumlaut\",\"ogonek\",\"caron\",\"emdash\",\"AE\",\"ordfeminine\",\"Lslash\",\"Oslash\",\"OE\",\"ordmasculine\",\"ae\",\"dotlessi\",\"lslash\",\"oslash\",\"oe\",\"germandbls\",\"onesuperior\",\"logicalnot\",\"mu\",\"trademark\",\"Eth\",\"onehalf\",\"plusminus\",\"Thorn\",\"onequarter\",\"divide\",\"brokenbar\",\"degree\",\"thorn\",\"threequarters\",\"twosuperior\",\"registered\",\"minus\",\"eth\",\"multiply\",\"threesuperior\",\"copyright\",\"Aacute\",\"Acircumflex\",\"Adieresis\",\"Agrave\",\"Aring\",\"Atilde\",\"Ccedilla\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Egrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Igrave\",\"Ntilde\",\"Oacute\",\"Ocircumflex\",\"Odieresis\",\"Ograve\",\"Otilde\",\"Scaron\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Ugrave\",\"Yacute\",\"Ydieresis\",\"Zcaron\",\"aacute\",\"acircumflex\",\"adieresis\",\"agrave\",\"aring\",\"atilde\",\"ccedilla\",\"eacute\",\"ecircumflex\",\"edieresis\",\"egrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"igrave\",\"ntilde\",\"oacute\",\"ocircumflex\",\"odieresis\",\"ograve\",\"otilde\",\"scaron\",\"uacute\",\"ucircumflex\",\"udieresis\",\"ugrave\",\"yacute\",\"ydieresis\",\"zcaron\"];var r=[\".notdef\",\"space\",\"exclamsmall\",\"Hungarumlautsmall\",\"dollaroldstyle\",\"dollarsuperior\",\"ampersandsmall\",\"Acutesmall\",\"parenleftsuperior\",\"parenrightsuperior\",\"twodotenleader\",\"onedotenleader\",\"comma\",\"hyphen\",\"period\",\"fraction\",\"zerooldstyle\",\"oneoldstyle\",\"twooldstyle\",\"threeoldstyle\",\"fouroldstyle\",\"fiveoldstyle\",\"sixoldstyle\",\"sevenoldstyle\",\"eightoldstyle\",\"nineoldstyle\",\"colon\",\"semicolon\",\"commasuperior\",\"threequartersemdash\",\"periodsuperior\",\"questionsmall\",\"asuperior\",\"bsuperior\",\"centsuperior\",\"dsuperior\",\"esuperior\",\"isuperior\",\"lsuperior\",\"msuperior\",\"nsuperior\",\"osuperior\",\"rsuperior\",\"ssuperior\",\"tsuperior\",\"ff\",\"fi\",\"fl\",\"ffi\",\"ffl\",\"parenleftinferior\",\"parenrightinferior\",\"Circumflexsmall\",\"hyphensuperior\",\"Gravesmall\",\"Asmall\",\"Bsmall\",\"Csmall\",\"Dsmall\",\"Esmall\",\"Fsmall\",\"Gsmall\",\"Hsmall\",\"Ismall\",\"Jsmall\",\"Ksmall\",\"Lsmall\",\"Msmall\",\"Nsmall\",\"Osmall\",\"Psmall\",\"Qsmall\",\"Rsmall\",\"Ssmall\",\"Tsmall\",\"Usmall\",\"Vsmall\",\"Wsmall\",\"Xsmall\",\"Ysmall\",\"Zsmall\",\"colonmonetary\",\"onefitted\",\"rupiah\",\"Tildesmall\",\"exclamdownsmall\",\"centoldstyle\",\"Lslashsmall\",\"Scaronsmall\",\"Zcaronsmall\",\"Dieresissmall\",\"Brevesmall\",\"Caronsmall\",\"Dotaccentsmall\",\"Macronsmall\",\"figuredash\",\"hypheninferior\",\"Ogoneksmall\",\"Ringsmall\",\"Cedillasmall\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondownsmall\",\"oneeighth\",\"threeeighths\",\"fiveeighths\",\"seveneighths\",\"onethird\",\"twothirds\",\"zerosuperior\",\"onesuperior\",\"twosuperior\",\"threesuperior\",\"foursuperior\",\"fivesuperior\",\"sixsuperior\",\"sevensuperior\",\"eightsuperior\",\"ninesuperior\",\"zeroinferior\",\"oneinferior\",\"twoinferior\",\"threeinferior\",\"fourinferior\",\"fiveinferior\",\"sixinferior\",\"seveninferior\",\"eightinferior\",\"nineinferior\",\"centinferior\",\"dollarinferior\",\"periodinferior\",\"commainferior\",\"Agravesmall\",\"Aacutesmall\",\"Acircumflexsmall\",\"Atildesmall\",\"Adieresissmall\",\"Aringsmall\",\"AEsmall\",\"Ccedillasmall\",\"Egravesmall\",\"Eacutesmall\",\"Ecircumflexsmall\",\"Edieresissmall\",\"Igravesmall\",\"Iacutesmall\",\"Icircumflexsmall\",\"Idieresissmall\",\"Ethsmall\",\"Ntildesmall\",\"Ogravesmall\",\"Oacutesmall\",\"Ocircumflexsmall\",\"Otildesmall\",\"Odieresissmall\",\"OEsmall\",\"Oslashsmall\",\"Ugravesmall\",\"Uacutesmall\",\"Ucircumflexsmall\",\"Udieresissmall\",\"Yacutesmall\",\"Thornsmall\",\"Ydieresissmall\"];var a=[\".notdef\",\"space\",\"dollaroldstyle\",\"dollarsuperior\",\"parenleftsuperior\",\"parenrightsuperior\",\"twodotenleader\",\"onedotenleader\",\"comma\",\"hyphen\",\"period\",\"fraction\",\"zerooldstyle\",\"oneoldstyle\",\"twooldstyle\",\"threeoldstyle\",\"fouroldstyle\",\"fiveoldstyle\",\"sixoldstyle\",\"sevenoldstyle\",\"eightoldstyle\",\"nineoldstyle\",\"colon\",\"semicolon\",\"commasuperior\",\"threequartersemdash\",\"periodsuperior\",\"asuperior\",\"bsuperior\",\"centsuperior\",\"dsuperior\",\"esuperior\",\"isuperior\",\"lsuperior\",\"msuperior\",\"nsuperior\",\"osuperior\",\"rsuperior\",\"ssuperior\",\"tsuperior\",\"ff\",\"fi\",\"fl\",\"ffi\",\"ffl\",\"parenleftinferior\",\"parenrightinferior\",\"hyphensuperior\",\"colonmonetary\",\"onefitted\",\"rupiah\",\"centoldstyle\",\"figuredash\",\"hypheninferior\",\"onequarter\",\"onehalf\",\"threequarters\",\"oneeighth\",\"threeeighths\",\"fiveeighths\",\"seveneighths\",\"onethird\",\"twothirds\",\"zerosuperior\",\"onesuperior\",\"twosuperior\",\"threesuperior\",\"foursuperior\",\"fivesuperior\",\"sixsuperior\",\"sevensuperior\",\"eightsuperior\",\"ninesuperior\",\"zeroinferior\",\"oneinferior\",\"twoinferior\",\"threeinferior\",\"fourinferior\",\"fiveinferior\",\"sixinferior\",\"seveninferior\",\"eightinferior\",\"nineinferior\",\"centinferior\",\"dollarinferior\",\"periodinferior\",\"commainferior\"];e.ISOAdobeCharset=t;e.ExpertCharset=r;e.ExpertSubsetCharset=a});(function(e,t){t(e.pdfjsCoreEncodings={})})(this,function(e){var t=[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"space\",\"exclamsmall\",\"Hungarumlautsmall\",\"\",\"dollaroldstyle\",\"dollarsuperior\",\"ampersandsmall\",\"Acutesmall\",\"parenleftsuperior\",\"parenrightsuperior\",\"twodotenleader\",\"onedotenleader\",\"comma\",\"hyphen\",\"period\",\"fraction\",\"zerooldstyle\",\"oneoldstyle\",\"twooldstyle\",\"threeoldstyle\",\"fouroldstyle\",\"fiveoldstyle\",\"sixoldstyle\",\"sevenoldstyle\",\"eightoldstyle\",\"nineoldstyle\",\"colon\",\"semicolon\",\"commasuperior\",\"threequartersemdash\",\"periodsuperior\",\"questionsmall\",\"\",\"asuperior\",\"bsuperior\",\"centsuperior\",\"dsuperior\",\"esuperior\",\"\",\"\",\"isuperior\",\"\",\"\",\"lsuperior\",\"msuperior\",\"nsuperior\",\"osuperior\",\"\",\"\",\"rsuperior\",\"ssuperior\",\"tsuperior\",\"\",\"ff\",\"fi\",\"fl\",\"ffi\",\"ffl\",\"parenleftinferior\",\"\",\"parenrightinferior\",\"Circumflexsmall\",\"hyphensuperior\",\"Gravesmall\",\"Asmall\",\"Bsmall\",\"Csmall\",\"Dsmall\",\"Esmall\",\"Fsmall\",\"Gsmall\",\"Hsmall\",\"Ismall\",\"Jsmall\",\"Ksmall\",\"Lsmall\",\"Msmall\",\"Nsmall\",\"Osmall\",\"Psmall\",\"Qsmall\",\"Rsmall\",\"Ssmall\",\"Tsmall\",\"Usmall\",\"Vsmall\",\"Wsmall\",\"Xsmall\",\"Ysmall\",\"Zsmall\",\"colonmonetary\",\"onefitted\",\"rupiah\",\"Tildesmall\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"exclamdownsmall\",\"centoldstyle\",\"Lslashsmall\",\"\",\"\",\"Scaronsmall\",\"Zcaronsmall\",\"Dieresissmall\",\"Brevesmall\",\"Caronsmall\",\"\",\"Dotaccentsmall\",\"\",\"\",\"Macronsmall\",\"\",\"\",\"figuredash\",\"hypheninferior\",\"\",\"\",\"Ogoneksmall\",\"Ringsmall\",\"Cedillasmall\",\"\",\"\",\"\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondownsmall\",\"oneeighth\",\"threeeighths\",\"fiveeighths\",\"seveneighths\",\"onethird\",\"twothirds\",\"\",\"\",\"zerosuperior\",\"onesuperior\",\"twosuperior\",\"threesuperior\",\"foursuperior\",\"fivesuperior\",\"sixsuperior\",\"sevensuperior\",\"eightsuperior\",\"ninesuperior\",\"zeroinferior\",\"oneinferior\",\"twoinferior\",\"threeinferior\",\"fourinferior\",\"fiveinferior\",\"sixinferior\",\"seveninferior\",\"eightinferior\",\"nineinferior\",\"centinferior\",\"dollarinferior\",\"periodinferior\",\"commainferior\",\"Agravesmall\",\"Aacutesmall\",\"Acircumflexsmall\",\"Atildesmall\",\"Adieresissmall\",\"Aringsmall\",\"AEsmall\",\"Ccedillasmall\",\"Egravesmall\",\"Eacutesmall\",\"Ecircumflexsmall\",\"Edieresissmall\",\"Igravesmall\",\"Iacutesmall\",\"Icircumflexsmall\",\"Idieresissmall\",\"Ethsmall\",\"Ntildesmall\",\"Ogravesmall\",\"Oacutesmall\",\"Ocircumflexsmall\",\"Otildesmall\",\"Odieresissmall\",\"OEsmall\",\"Oslashsmall\",\"Ugravesmall\",\"Uacutesmall\",\"Ucircumflexsmall\",\"Udieresissmall\",\"Yacutesmall\",\"Thornsmall\",\"Ydieresissmall\"];var r=[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"space\",\"exclamsmall\",\"Hungarumlautsmall\",\"centoldstyle\",\"dollaroldstyle\",\"dollarsuperior\",\"ampersandsmall\",\"Acutesmall\",\"parenleftsuperior\",\"parenrightsuperior\",\"twodotenleader\",\"onedotenleader\",\"comma\",\"hyphen\",\"period\",\"fraction\",\"zerooldstyle\",\"oneoldstyle\",\"twooldstyle\",\"threeoldstyle\",\"fouroldstyle\",\"fiveoldstyle\",\"sixoldstyle\",\"sevenoldstyle\",\"eightoldstyle\",\"nineoldstyle\",\"colon\",\"semicolon\",\"\",\"threequartersemdash\",\"\",\"questionsmall\",\"\",\"\",\"\",\"\",\"Ethsmall\",\"\",\"\",\"onequarter\",\"onehalf\",\"threequarters\",\"oneeighth\",\"threeeighths\",\"fiveeighths\",\"seveneighths\",\"onethird\",\"twothirds\",\"\",\"\",\"\",\"\",\"\",\"\",\"ff\",\"fi\",\"fl\",\"ffi\",\"ffl\",\"parenleftinferior\",\"\",\"parenrightinferior\",\"Circumflexsmall\",\"hypheninferior\",\"Gravesmall\",\"Asmall\",\"Bsmall\",\"Csmall\",\"Dsmall\",\"Esmall\",\"Fsmall\",\"Gsmall\",\"Hsmall\",\"Ismall\",\"Jsmall\",\"Ksmall\",\"Lsmall\",\"Msmall\",\"Nsmall\",\"Osmall\",\"Psmall\",\"Qsmall\",\"Rsmall\",\"Ssmall\",\"Tsmall\",\"Usmall\",\"Vsmall\",\"Wsmall\",\"Xsmall\",\"Ysmall\",\"Zsmall\",\"colonmonetary\",\"onefitted\",\"rupiah\",\"Tildesmall\",\"\",\"\",\"asuperior\",\"centsuperior\",\"\",\"\",\"\",\"\",\"Aacutesmall\",\"Agravesmall\",\"Acircumflexsmall\",\"Adieresissmall\",\"Atildesmall\",\"Aringsmall\",\"Ccedillasmall\",\"Eacutesmall\",\"Egravesmall\",\"Ecircumflexsmall\",\"Edieresissmall\",\"Iacutesmall\",\"Igravesmall\",\"Icircumflexsmall\",\"Idieresissmall\",\"Ntildesmall\",\"Oacutesmall\",\"Ogravesmall\",\"Ocircumflexsmall\",\"Odieresissmall\",\"Otildesmall\",\"Uacutesmall\",\"Ugravesmall\",\"Ucircumflexsmall\",\"Udieresissmall\",\"\",\"eightsuperior\",\"fourinferior\",\"threeinferior\",\"sixinferior\",\"eightinferior\",\"seveninferior\",\"Scaronsmall\",\"\",\"centinferior\",\"twoinferior\",\"\",\"Dieresissmall\",\"\",\"Caronsmall\",\"osuperior\",\"fiveinferior\",\"\",\"commainferior\",\"periodinferior\",\"Yacutesmall\",\"\",\"dollarinferior\",\"\",\"Thornsmall\",\"\",\"nineinferior\",\"zeroinferior\",\"Zcaronsmall\",\"AEsmall\",\"Oslashsmall\",\"questiondownsmall\",\"oneinferior\",\"Lslashsmall\",\"\",\"\",\"\",\"\",\"\",\"\",\"Cedillasmall\",\"\",\"\",\"\",\"\",\"\",\"OEsmall\",\"figuredash\",\"hyphensuperior\",\"\",\"\",\"\",\"\",\"exclamdownsmall\",\"\",\"Ydieresissmall\",\"\",\"onesuperior\",\"twosuperior\",\"threesuperior\",\"foursuperior\",\"fivesuperior\",\"sixsuperior\",\"sevensuperior\",\"ninesuperior\",\"zerosuperior\",\"\",\"esuperior\",\"rsuperior\",\"tsuperior\",\"\",\"\",\"isuperior\",\"ssuperior\",\"dsuperior\",\"\",\"\",\"\",\"\",\"\",\"lsuperior\",\"Ogoneksmall\",\"Brevesmall\",\"Macronsmall\",\"bsuperior\",\"nsuperior\",\"msuperior\",\"commasuperior\",\"periodsuperior\",\"Dotaccentsmall\",\"Ringsmall\"];var a=[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\"\",\"Adieresis\",\"Aring\",\"Ccedilla\",\"Eacute\",\"Ntilde\",\"Odieresis\",\"Udieresis\",\"aacute\",\"agrave\",\"acircumflex\",\"adieresis\",\"atilde\",\"aring\",\"ccedilla\",\"eacute\",\"egrave\",\"ecircumflex\",\"edieresis\",\"iacute\",\"igrave\",\"icircumflex\",\"idieresis\",\"ntilde\",\"oacute\",\"ograve\",\"ocircumflex\",\"odieresis\",\"otilde\",\"uacute\",\"ugrave\",\"ucircumflex\",\"udieresis\",\"dagger\",\"degree\",\"cent\",\"sterling\",\"section\",\"bullet\",\"paragraph\",\"germandbls\",\"registered\",\"copyright\",\"trademark\",\"acute\",\"dieresis\",\"notequal\",\"AE\",\"Oslash\",\"infinity\",\"plusminus\",\"lessequal\",\"greaterequal\",\"yen\",\"mu\",\"partialdiff\",\"summation\",\"product\",\"pi\",\"integral\",\"ordfeminine\",\"ordmasculine\",\"Omega\",\"ae\",\"oslash\",\"questiondown\",\"exclamdown\",\"logicalnot\",\"radical\",\"florin\",\"approxequal\",\"Delta\",\"guillemotleft\",\"guillemotright\",\"ellipsis\",\"space\",\"Agrave\",\"Atilde\",\"Otilde\",\"OE\",\"oe\",\"endash\",\"emdash\",\"quotedblleft\",\"quotedblright\",\"quoteleft\",\"quoteright\",\"divide\",\"lozenge\",\"ydieresis\",\"Ydieresis\",\"fraction\",\"currency\",\"guilsinglleft\",\"guilsinglright\",\"fi\",\"fl\",\"daggerdbl\",\"periodcentered\",\"quotesinglbase\",\"quotedblbase\",\"perthousand\",\"Acircumflex\",\"Ecircumflex\",\"Aacute\",\"Edieresis\",\"Egrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Igrave\",\"Oacute\",\"Ocircumflex\",\"apple\",\"Ograve\",\"Uacute\",\"Ucircumflex\",\"Ugrave\",\"dotlessi\",\"circumflex\",\"tilde\",\"macron\",\"breve\",\"dotaccent\",\"ring\",\"cedilla\",\"hungarumlaut\",\"ogonek\",\"caron\"];var i=[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quoteright\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"quoteleft\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"exclamdown\",\"cent\",\"sterling\",\"fraction\",\"yen\",\"florin\",\"section\",\"currency\",\"quotesingle\",\"quotedblleft\",\"guillemotleft\",\"guilsinglleft\",\"guilsinglright\",\"fi\",\"fl\",\"\",\"endash\",\"dagger\",\"daggerdbl\",\"periodcentered\",\"\",\"paragraph\",\"bullet\",\"quotesinglbase\",\"quotedblbase\",\"quotedblright\",\"guillemotright\",\"ellipsis\",\"perthousand\",\"\",\"questiondown\",\"\",\"grave\",\"acute\",\"circumflex\",\"tilde\",\"macron\",\"breve\",\"dotaccent\",\"dieresis\",\"\",\"ring\",\"cedilla\",\"\",\"hungarumlaut\",\"ogonek\",\"caron\",\"emdash\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"AE\",\"\",\"ordfeminine\",\"\",\"\",\"\",\"\",\"Lslash\",\"Oslash\",\"OE\",\"ordmasculine\",\"\",\"\",\"\",\"\",\"\",\"ae\",\"\",\"\",\"\",\"dotlessi\",\"\",\"\",\"lslash\",\"oslash\",\"oe\",\"germandbls\"];var n=[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\"bullet\",\"Euro\",\"bullet\",\"quotesinglbase\",\"florin\",\"quotedblbase\",\"ellipsis\",\"dagger\",\"daggerdbl\",\"circumflex\",\"perthousand\",\"Scaron\",\"guilsinglleft\",\"OE\",\"bullet\",\"Zcaron\",\"bullet\",\"bullet\",\"quoteleft\",\"quoteright\",\"quotedblleft\",\"quotedblright\",\"bullet\",\"endash\",\"emdash\",\"tilde\",\"trademark\",\"scaron\",\"guilsinglright\",\"oe\",\"bullet\",\"zcaron\",\"Ydieresis\",\"space\",\"exclamdown\",\"cent\",\"sterling\",\"currency\",\"yen\",\"brokenbar\",\"section\",\"dieresis\",\"copyright\",\"ordfeminine\",\"guillemotleft\",\"logicalnot\",\"hyphen\",\"registered\",\"macron\",\"degree\",\"plusminus\",\"twosuperior\",\"threesuperior\",\"acute\",\"mu\",\"paragraph\",\"periodcentered\",\"cedilla\",\"onesuperior\",\"ordmasculine\",\"guillemotright\",\"onequarter\",\"onehalf\",\"threequarters\",\"questiondown\",\"Agrave\",\"Aacute\",\"Acircumflex\",\"Atilde\",\"Adieresis\",\"Aring\",\"AE\",\"Ccedilla\",\"Egrave\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Igrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Eth\",\"Ntilde\",\"Ograve\",\"Oacute\",\"Ocircumflex\",\"Otilde\",\"Odieresis\",\"multiply\",\"Oslash\",\"Ugrave\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Yacute\",\"Thorn\",\"germandbls\",\"agrave\",\"aacute\",\"acircumflex\",\"atilde\",\"adieresis\",\"aring\",\"ae\",\"ccedilla\",\"egrave\",\"eacute\",\"ecircumflex\",\"edieresis\",\"igrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"eth\",\"ntilde\",\"ograve\",\"oacute\",\"ocircumflex\",\"otilde\",\"odieresis\",\"divide\",\"oslash\",\"ugrave\",\"uacute\",\"ucircumflex\",\"udieresis\",\"yacute\",\"thorn\",\"ydieresis\"];var s=[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"space\",\"exclam\",\"universal\",\"numbersign\",\"existential\",\"percent\",\"ampersand\",\"suchthat\",\"parenleft\",\"parenright\",\"asteriskmath\",\"plus\",\"comma\",\"minus\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"congruent\",\"Alpha\",\"Beta\",\"Chi\",\"Delta\",\"Epsilon\",\"Phi\",\"Gamma\",\"Eta\",\"Iota\",\"theta1\",\"Kappa\",\"Lambda\",\"Mu\",\"Nu\",\"Omicron\",\"Pi\",\"Theta\",\"Rho\",\"Sigma\",\"Tau\",\"Upsilon\",\"sigma1\",\"Omega\",\"Xi\",\"Psi\",\"Zeta\",\"bracketleft\",\"therefore\",\"bracketright\",\"perpendicular\",\"underscore\",\"radicalex\",\"alpha\",\"beta\",\"chi\",\"delta\",\"epsilon\",\"phi\",\"gamma\",\"eta\",\"iota\",\"phi1\",\"kappa\",\"lambda\",\"mu\",\"nu\",\"omicron\",\"pi\",\"theta\",\"rho\",\"sigma\",\"tau\",\"upsilon\",\"omega1\",\"omega\",\"xi\",\"psi\",\"zeta\",\"braceleft\",\"bar\",\"braceright\",\"similar\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"Euro\",\"Upsilon1\",\"minute\",\"lessequal\",\"fraction\",\"infinity\",\"florin\",\"club\",\"diamond\",\"heart\",\"spade\",\"arrowboth\",\"arrowleft\",\"arrowup\",\"arrowright\",\"arrowdown\",\"degree\",\"plusminus\",\"second\",\"greaterequal\",\"multiply\",\"proportional\",\"partialdiff\",\"bullet\",\"divide\",\"notequal\",\"equivalence\",\"approxequal\",\"ellipsis\",\"arrowvertex\",\"arrowhorizex\",\"carriagereturn\",\"aleph\",\"Ifraktur\",\"Rfraktur\",\"weierstrass\",\"circlemultiply\",\"circleplus\",\"emptyset\",\"intersection\",\"union\",\"propersuperset\",\"reflexsuperset\",\"notsubset\",\"propersubset\",\"reflexsubset\",\"element\",\"notelement\",\"angle\",\"gradient\",\"registerserif\",\"copyrightserif\",\"trademarkserif\",\"product\",\"radical\",\"dotmath\",\"logicalnot\",\"logicaland\",\"logicalor\",\"arrowdblboth\",\"arrowdblleft\",\"arrowdblup\",\"arrowdblright\",\"arrowdbldown\",\"lozenge\",\"angleleft\",\"registersans\",\"copyrightsans\",\"trademarksans\",\"summation\",\"parenlefttp\",\"parenleftex\",\"parenleftbt\",\"bracketlefttp\",\"bracketleftex\",\"bracketleftbt\",\"bracelefttp\",\"braceleftmid\",\"braceleftbt\",\"braceex\",\"\",\"angleright\",\"integral\",\"integraltp\",\"integralex\",\"integralbt\",\"parenrighttp\",\"parenrightex\",\"parenrightbt\",\"bracketrighttp\",\"bracketrightex\",\"bracketrightbt\",\"bracerighttp\",\"bracerightmid\",\"bracerightbt\"];var o=[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"space\",\"a1\",\"a2\",\"a202\",\"a3\",\"a4\",\"a5\",\"a119\",\"a118\",\"a117\",\"a11\",\"a12\",\"a13\",\"a14\",\"a15\",\"a16\",\"a105\",\"a17\",\"a18\",\"a19\",\"a20\",\"a21\",\"a22\",\"a23\",\"a24\",\"a25\",\"a26\",\"a27\",\"a28\",\"a6\",\"a7\",\"a8\",\"a9\",\"a10\",\"a29\",\"a30\",\"a31\",\"a32\",\"a33\",\"a34\",\"a35\",\"a36\",\"a37\",\"a38\",\"a39\",\"a40\",\"a41\",\"a42\",\"a43\",\"a44\",\"a45\",\"a46\",\"a47\",\"a48\",\"a49\",\"a50\",\"a51\",\"a52\",\"a53\",\"a54\",\"a55\",\"a56\",\"a57\",\"a58\",\"a59\",\"a60\",\"a61\",\"a62\",\"a63\",\"a64\",\"a65\",\"a66\",\"a67\",\"a68\",\"a69\",\"a70\",\"a71\",\"a72\",\"a73\",\"a74\",\"a203\",\"a75\",\"a204\",\"a76\",\"a77\",\"a78\",\"a79\",\"a81\",\"a82\",\"a83\",\"a84\",\"a97\",\"a98\",\"a99\",\"a100\",\"\",\"a89\",\"a90\",\"a93\",\"a94\",\"a91\",\"a92\",\"a205\",\"a85\",\"a206\",\"a86\",\"a87\",\"a88\",\"a95\",\"a96\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"a101\",\"a102\",\"a103\",\"a104\",\"a106\",\"a107\",\"a108\",\"a112\",\"a111\",\"a110\",\"a109\",\"a120\",\"a121\",\"a122\",\"a123\",\"a124\",\"a125\",\"a126\",\"a127\",\"a128\",\"a129\",\"a130\",\"a131\",\"a132\",\"a133\",\"a134\",\"a135\",\"a136\",\"a137\",\"a138\",\"a139\",\"a140\",\"a141\",\"a142\",\"a143\",\"a144\",\"a145\",\"a146\",\"a147\",\"a148\",\"a149\",\"a150\",\"a151\",\"a152\",\"a153\",\"a154\",\"a155\",\"a156\",\"a157\",\"a158\",\"a159\",\"a160\",\"a161\",\"a163\",\"a164\",\"a196\",\"a165\",\"a192\",\"a166\",\"a167\",\"a168\",\"a169\",\"a170\",\"a171\",\"a172\",\"a173\",\"a162\",\"a174\",\"a175\",\"a176\",\"a177\",\"a178\",\"a179\",\"a193\",\"a180\",\"a199\",\"a181\",\"a200\",\"a182\",\"\",\"a201\",\"a183\",\"a184\",\"a197\",\"a185\",\"a194\",\"a198\",\"a186\",\"a195\",\"a187\",\"a188\",\"a189\",\"a190\",\"a191\"];function l(e){switch(e){case\"WinAnsiEncoding\":return n;case\"StandardEncoding\":return i;case\"MacRomanEncoding\":return a;case\"SymbolSetEncoding\":return s;case\"ZapfDingbatsEncoding\":return o;case\"ExpertEncoding\":return t;case\"MacExpertEncoding\":return r;default:return null}}e.WinAnsiEncoding=n;e.StandardEncoding=i;e.MacRomanEncoding=a;e.SymbolSetEncoding=s;e.ZapfDingbatsEncoding=o;e.ExpertEncoding=t;e.getEncoding=l});(function(e,t){t(e.pdfjsSharedUtil={})})(this,function(e){var t=typeof window!==\"undefined\"?window:typeof global!==\"undefined\"?global:typeof self!==\"undefined\"?self:this;var r=[.001,0,0,.001,0,0];var a={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4};var i={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3};var n={TEXT:1,LINK:2,FREETEXT:3,LINE:4,SQUARE:5,CIRCLE:6,POLYGON:7,POLYLINE:8,HIGHLIGHT:9,UNDERLINE:10,SQUIGGLY:11,STRIKEOUT:12,STAMP:13,CARET:14,INK:15,POPUP:16,FILEATTACHMENT:17,SOUND:18,MOVIE:19,WIDGET:20,SCREEN:21,PRINTERMARK:22,TRAPNET:23,WATERMARK:24,THREED:25,REDACT:26};var s={INVISIBLE:1,HIDDEN:2,PRINT:4,NOZOOM:8,NOROTATE:16,NOVIEW:32,READONLY:64,LOCKED:128,TOGGLENOVIEW:256,LOCKEDCONTENTS:512};var o={READONLY:1,REQUIRED:2,NOEXPORT:4,MULTILINE:4096,PASSWORD:8192,NOTOGGLETOOFF:16384,RADIO:32768,PUSHBUTTON:65536,COMBO:131072,EDIT:262144,SORT:524288,FILESELECT:1048576,MULTISELECT:2097152,DONOTSPELLCHECK:4194304,DONOTSCROLL:8388608,COMB:16777216,RICHTEXT:33554432,RADIOSINUNISON:33554432,COMMITONSELCHANGE:67108864};var l={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};var c={UNKNOWN:0,FLATE:1,LZW:2,DCT:3,JPX:4,JBIG:5,A85:6,AHX:7,CCF:8,RL:9};var h={UNKNOWN:0,TYPE1:1,TYPE1C:2,CIDFONTTYPE0:3,CIDFONTTYPE0C:4,TRUETYPE:5,CIDFONTTYPE2:6,TYPE3:7,OPENTYPE:8,TYPE0:9,MMTYPE1:10};var u={errors:0,warnings:1,infos:5};var f={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91};var d=u.warnings;function g(e){d=e}function v(){return d}function p(e){if(d>=u.infos){console.log(\"Info: \"+e)}}function m(e){if(d>=u.warnings){console.log(\"Warning: \"+e)}}function b(e){console.log(\"Deprecated API usage: \"+e)}function y(e){if(d>=u.errors){console.log(\"Error: \"+e);console.log(k())}throw new Error(e)}function k(){try{throw new Error}catch(e){return e.stack?e.stack.split(\"\\n\").slice(2).join(\"\\n\"):\"\"}}function w(e,t){if(!e){y(t)}}var C={unknown:\"unknown\",forms:\"forms\",javaScript:\"javaScript\",smask:\"smask\",shadingPattern:\"shadingPattern\",font:\"font\"};function x(e,t){try{var r=new URL(e);if(!r.origin||r.origin===\"null\"){return false}}catch(e){return false}var a=new URL(t,r);return r.origin===a.origin}function S(e){if(!e){return false}switch(e.protocol){case\"http:\":case\"https:\":case\"ftp:\":case\"mailto:\":case\"tel:\":return true;default:return false}}function A(e,t){if(!e){return null}try{var r=t?new URL(e,t):new URL(e);if(S(r)){return r}}catch(e){}return null}function I(e,t,r){Object.defineProperty(e,t,{value:r,enumerable:true,configurable:true,writable:false});return r}function B(e){var t;return function(){if(e){t=Object.create(null);e(t);e=null}return t}}var R={NEED_PASSWORD:1,INCORRECT_PASSWORD:2};var T=function e(){function t(e,t){this.name=\"PasswordException\";this.message=e;this.code=t}t.prototype=new Error;t.constructor=t;return t}();var O=function e(){function t(e,t){this.name=\"UnknownErrorException\";this.message=e;this.details=t}t.prototype=new Error;t.constructor=t;return t}();var P=function e(){function t(e){this.name=\"InvalidPDFException\";this.message=e}t.prototype=new Error;t.constructor=t;return t}();var E=function e(){function t(e){this.name=\"MissingPDFException\";this.message=e}t.prototype=new Error;t.constructor=t;return t}();var M=function e(){function t(e,t){this.name=\"UnexpectedResponseException\";this.message=e;this.status=t}t.prototype=new Error;t.constructor=t;return t}();var L=function e(){function t(e){this.message=e}t.prototype=new Error;t.prototype.name=\"NotImplementedException\";t.constructor=t;return t}();var D=function e(){function t(e,t){this.begin=e;this.end=t;this.message=\"Missing data [\"+e+\", \"+t+\")\"}t.prototype=new Error;t.prototype.name=\"MissingDataException\";t.constructor=t;return t}();var F=function e(){function t(e){this.message=e}t.prototype=new Error;t.prototype.name=\"XRefParseException\";t.constructor=t;return t}();var U=/\\x00/g;function j(e){if(typeof e!==\"string\"){m(\"The argument for removeNullCharacters must be a string.\");return e}return e.replace(U,\"\")}function q(e){w(e!==null&&typeof e===\"object\"&&e.length!==undefined,\"Invalid argument for bytesToString\");var t=e.length;var r=8192;if(t<r){return String.fromCharCode.apply(null,e)}var a=[];for(var i=0;i<t;i+=r){var n=Math.min(i+r,t);var s=e.subarray(i,n);a.push(String.fromCharCode.apply(null,s))}return a.join(\"\")}function N(e){w(typeof e===\"string\",\"Invalid argument for stringToBytes\");var t=e.length;var r=new Uint8Array(t);for(var a=0;a<t;++a){r[a]=e.charCodeAt(a)&255}return r}function _(e){if(e.length!==undefined){return e.length}w(e.byteLength!==undefined);return e.byteLength}function z(e){if(e.length===1&&e[0]instanceof Uint8Array){return e[0]}var t=0;var r,a=e.length;var i,n;for(r=0;r<a;r++){i=e[r];n=_(i);t+=n}var s=0;var o=new Uint8Array(t);for(r=0;r<a;r++){i=e[r];if(!(i instanceof Uint8Array)){if(typeof i===\"string\"){i=N(i)}else{i=new Uint8Array(i)}}n=i.byteLength;o.set(i,s);s+=n}return o}function H(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,e&255)}function G(e){var t=1,r=0;while(e>t){t<<=1;r++}return r}function X(e,t){return e[t]<<24>>24}function W(e,t){return e[t]<<8|e[t+1]}function V(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function K(){var e=new Uint8Array(2);e[0]=1;var t=new Uint16Array(e.buffer);return t[0]===1}function Y(){try{new Function(\"\");return true}catch(e){return false}}var J=function e(){function t(e,t){this.buffer=e;this.byteLength=e.length;this.length=t===undefined?this.byteLength>>2:t;i(this.length)}t.prototype=Object.create(null);var r=0;function a(e){return{get:function(){var t=this.buffer,r=e<<2;return(t[r]|t[r+1]<<8|t[r+2]<<16|t[r+3]<<24)>>>0},set:function(t){var r=this.buffer,a=e<<2;r[a]=t&255;r[a+1]=t>>8&255;r[a+2]=t>>16&255;r[a+3]=t>>>24&255}}}function i(e){while(r<e){Object.defineProperty(t.prototype,r,a(r));r++}}return t}();e.Uint32ArrayView=J;var Z=[1,0,0,1,0,0];var Q=function e(){function t(){}var r=[\"rgb(\",0,\",\",0,\",\",0,\")\"];t.makeCssRgb=function e(t,a,i){r[1]=t;r[3]=a;r[5]=i;return r.join(\"\")};t.transform=function e(t,r){return[t[0]*r[0]+t[2]*r[1],t[1]*r[0]+t[3]*r[1],t[0]*r[2]+t[2]*r[3],t[1]*r[2]+t[3]*r[3],t[0]*r[4]+t[2]*r[5]+t[4],t[1]*r[4]+t[3]*r[5]+t[5]]};t.applyTransform=function e(t,r){var a=t[0]*r[0]+t[1]*r[2]+r[4];var i=t[0]*r[1]+t[1]*r[3]+r[5];return[a,i]};t.applyInverseTransform=function e(t,r){var a=r[0]*r[3]-r[1]*r[2];var i=(t[0]*r[3]-t[1]*r[2]+r[2]*r[5]-r[4]*r[3])/a;var n=(-t[0]*r[1]+t[1]*r[0]+r[4]*r[1]-r[5]*r[0])/a;return[i,n]};t.getAxialAlignedBoundingBox=function e(r,a){var i=t.applyTransform(r,a);var n=t.applyTransform(r.slice(2,4),a);var s=t.applyTransform([r[0],r[3]],a);var o=t.applyTransform([r[2],r[1]],a);return[Math.min(i[0],n[0],s[0],o[0]),Math.min(i[1],n[1],s[1],o[1]),Math.max(i[0],n[0],s[0],o[0]),Math.max(i[1],n[1],s[1],o[1])]};t.inverseTransform=function e(t){var r=t[0]*t[3]-t[1]*t[2];return[t[3]/r,-t[1]/r,-t[2]/r,t[0]/r,(t[2]*t[5]-t[4]*t[3])/r,(t[4]*t[1]-t[5]*t[0])/r]};t.apply3dTransform=function e(t,r){return[t[0]*r[0]+t[1]*r[1]+t[2]*r[2],t[3]*r[0]+t[4]*r[1]+t[5]*r[2],t[6]*r[0]+t[7]*r[1]+t[8]*r[2]]};t.singularValueDecompose2dScale=function e(t){var r=[t[0],t[2],t[1],t[3]];var a=t[0]*r[0]+t[1]*r[2];var i=t[0]*r[1]+t[1]*r[3];var n=t[2]*r[0]+t[3]*r[2];var s=t[2]*r[1]+t[3]*r[3];var o=(a+s)/2;var l=Math.sqrt((a+s)*(a+s)-4*(a*s-n*i))/2;var c=o+l||1;var h=o-l||1;return[Math.sqrt(c),Math.sqrt(h)]};t.normalizeRect=function e(t){var r=t.slice(0);if(t[0]>t[2]){r[0]=t[2];r[2]=t[0]}if(t[1]>t[3]){r[1]=t[3];r[3]=t[1]}return r};t.intersect=function e(r,a){function i(e,t){return e-t}var n=[r[0],r[2],a[0],a[2]].sort(i),s=[r[1],r[3],a[1],a[3]].sort(i),o=[];r=t.normalizeRect(r);a=t.normalizeRect(a);if(n[0]===r[0]&&n[1]===a[0]||n[0]===a[0]&&n[1]===r[0]){o[0]=n[1];o[2]=n[2]}else{return false}if(s[0]===r[1]&&s[1]===a[1]||s[0]===a[1]&&s[1]===r[1]){o[1]=s[1];o[3]=s[2]}else{return false}return o};t.sign=function e(t){return t<0?-1:1};var a=[\"\",\"C\",\"CC\",\"CCC\",\"CD\",\"D\",\"DC\",\"DCC\",\"DCCC\",\"CM\",\"\",\"X\",\"XX\",\"XXX\",\"XL\",\"L\",\"LX\",\"LXX\",\"LXXX\",\"XC\",\"\",\"I\",\"II\",\"III\",\"IV\",\"V\",\"VI\",\"VII\",\"VIII\",\"IX\"];t.toRoman=function e(t,r){w(se(t)&&t>0,\"The number should be a positive integer.\");var i,n=[];while(t>=1e3){t-=1e3;n.push(\"M\")}i=t/100|0;t%=100;n.push(a[i]);i=t/10|0;t%=10;n.push(a[10+i]);n.push(a[20+t]);var s=n.join(\"\");return r?s.toLowerCase():s};t.appendToArray=function e(t,r){Array.prototype.push.apply(t,r)};t.prependToArray=function e(t,r){Array.prototype.unshift.apply(t,r)};t.extendObj=function e(t,r){for(var a in r){t[a]=r[a]}};t.getInheritableProperty=function e(t,r,a){while(t&&!t.has(r)){t=t.get(\"Parent\")}if(!t){return null}return a?t.getArray(r):t.get(r)};t.inherit=function e(t,r,a){t.prototype=Object.create(r.prototype);t.prototype.constructor=t;for(var i in a){t.prototype[i]=a[i]}};t.loadScript=function e(t,r){var a=document.createElement(\"script\");var i=false;a.setAttribute(\"src\",t);if(r){a.onload=function(){if(!i){r()}i=true}}document.getElementsByTagName(\"head\")[0].appendChild(a)};return t}();var $=function e(){function t(e,t,r,a,i,n){this.viewBox=e;this.scale=t;this.rotation=r;this.offsetX=a;this.offsetY=i;var s=(e[2]+e[0])/2;var o=(e[3]+e[1])/2;var l,c,h,u;r=r%360;r=r<0?r+360:r;switch(r){case 180:l=-1;c=0;h=0;u=1;break;case 90:l=0;c=1;h=1;u=0;break;case 270:l=0;c=-1;h=-1;u=0;break;default:l=1;c=0;h=0;u=-1;break}if(n){h=-h;u=-u}var f,d;var g,v;if(l===0){f=Math.abs(o-e[1])*t+a;d=Math.abs(s-e[0])*t+i;g=Math.abs(e[3]-e[1])*t;v=Math.abs(e[2]-e[0])*t}else{f=Math.abs(s-e[0])*t+a;d=Math.abs(o-e[1])*t+i;g=Math.abs(e[2]-e[0])*t;v=Math.abs(e[3]-e[1])*t}this.transform=[l*t,c*t,h*t,u*t,f-l*t*s-h*t*o,d-c*t*s-u*t*o];this.width=g;this.height=v;this.fontScale=t}t.prototype={clone:function e(r){r=r||{};var a=\"scale\"in r?r.scale:this.scale;var i=\"rotation\"in r?r.rotation:this.rotation;return new t(this.viewBox.slice(),a,i,this.offsetX,this.offsetY,r.dontFlip)},convertToViewportPoint:function e(t,r){return Q.applyTransform([t,r],this.transform)},convertToViewportRectangle:function e(t){var r=Q.applyTransform([t[0],t[1]],this.transform);var a=Q.applyTransform([t[2],t[3]],this.transform);return[r[0],r[1],a[0],a[1]]},convertToPdfPoint:function e(t,r){return Q.applyInverseTransform([t,r],this.transform)}};return t}();var ee=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364];function te(e){var t,r=e.length,a=[];if(e[0]===\"þ\"&&e[1]===\"ÿ\"){for(t=2;t<r;t+=2){a.push(String.fromCharCode(e.charCodeAt(t)<<8|e.charCodeAt(t+1)))}}else{for(t=0;t<r;++t){var i=ee[e.charCodeAt(t)];a.push(i?String.fromCharCode(i):e.charAt(t))}}return a.join(\"\")}function re(e){return decodeURIComponent(escape(e))}function ae(e){return unescape(encodeURIComponent(e))}function ie(e){for(var t in e){return false}return true}function ne(e){return typeof e===\"boolean\"}function se(e){return typeof e===\"number\"&&(e|0)===e}function oe(e){return typeof e===\"number\"}function le(e){return typeof e===\"string\"}function ce(e){return e instanceof Array}function he(e){return typeof e===\"object\"&&e!==null&&e.byteLength!==undefined}function ue(e){return e===32||e===9||e===13||e===10}function fe(){var e={};e.promise=new Promise(function(t,r){e.resolve=t;e.reject=r});return e}(function e(){if(t.Promise){if(typeof t.Promise.all!==\"function\"){t.Promise.all=function(e){var r=0,a=[],i,n;var s=new t.Promise(function(e,t){i=e;n=t});e.forEach(function(e,t){r++;e.then(function(e){a[t]=e;r--;if(r===0){i(a)}},n)});if(r===0){i(a)}return s}}if(typeof t.Promise.resolve!==\"function\"){t.Promise.resolve=function(e){return new t.Promise(function(t){t(e)})}}if(typeof t.Promise.reject!==\"function\"){t.Promise.reject=function(e){return new t.Promise(function(t,r){r(e)})}}if(typeof t.Promise.prototype.catch!==\"function\"){t.Promise.prototype.catch=function(e){return t.Promise.prototype.then(undefined,e)}}return}var r=0;var a=1;var i=2;var n=500;var s={handlers:[],running:false,unhandledRejections:[],pendingRejectionCheck:false,scheduleHandlers:function e(t){if(t._status===r){return}this.handlers=this.handlers.concat(t._handlers);t._handlers=[];if(this.running){return}this.running=true;setTimeout(this.runHandlers.bind(this),0)},runHandlers:function e(){var t=1;var r=Date.now()+t;while(this.handlers.length>0){var n=this.handlers.shift();var s=n.thisPromise._status;var o=n.thisPromise._value;try{if(s===a){if(typeof n.onResolve===\"function\"){o=n.onResolve(o)}}else if(typeof n.onReject===\"function\"){o=n.onReject(o);s=a;if(n.thisPromise._unhandledRejection){this.removeUnhandeledRejection(n.thisPromise)}}}catch(e){s=i;o=e}n.nextPromise._updateStatus(s,o);if(Date.now()>=r){break}}if(this.handlers.length>0){setTimeout(this.runHandlers.bind(this),0);return}this.running=false},addUnhandledRejection:function e(t){this.unhandledRejections.push({promise:t,time:Date.now()});this.scheduleRejectionCheck()},removeUnhandeledRejection:function e(t){t._unhandledRejection=false;for(var r=0;r<this.unhandledRejections.length;r++){if(this.unhandledRejections[r].promise===t){this.unhandledRejections.splice(r);r--}}},scheduleRejectionCheck:function e(){if(this.pendingRejectionCheck){return}this.pendingRejectionCheck=true;setTimeout(function e(){this.pendingRejectionCheck=false;var t=Date.now();for(var r=0;r<this.unhandledRejections.length;r++){if(t-this.unhandledRejections[r].time>n){var a=this.unhandledRejections[r].promise._value;var i=\"Unhandled rejection: \"+a;if(a.stack){i+=\"\\n\"+a.stack}m(i);this.unhandledRejections.splice(r);r--}}if(this.unhandledRejections.length){this.scheduleRejectionCheck()}}.bind(this),n)}};var o=function e(t){this._status=r;this._handlers=[];try{t.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(e){this._reject(e)}};o.all=function e(t){var r,a;var n=new o(function(e,t){r=e;a=t});var s=t.length;var l=[];if(s===0){r(l);return n}function c(e){if(n._status===i){return}l=[];a(e)}for(var h=0,u=t.length;h<u;++h){var f=t[h];var d=function(e){return function(t){if(n._status===i){return}l[e]=t;s--;if(s===0){r(l)}}}(h);if(o.isPromise(f)){f.then(d,c)}else{d(f)}}return n};o.isPromise=function e(t){return t&&typeof t.then===\"function\"};o.resolve=function e(t){return new o(function(e){e(t)})};o.reject=function e(t){return new o(function(e,r){r(t)})};o.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function e(t,r){if(this._status===a||this._status===i){return}if(t===a&&o.isPromise(r)){r.then(this._updateStatus.bind(this,a),this._updateStatus.bind(this,i));return}this._status=t;this._value=r;if(t===i&&this._handlers.length===0){this._unhandledRejection=true;s.addUnhandledRejection(this)}s.scheduleHandlers(this)},_resolve:function e(t){this._updateStatus(a,t)},_reject:function e(t){this._updateStatus(i,t)},then:function e(t,r){var a=new o(function(e,t){this.resolve=e;this.reject=t});this._handlers.push({thisPromise:this,onResolve:t,onReject:r,nextPromise:a});s.scheduleHandlers(this);return a},catch:function e(t){return this.then(undefined,t)}};t.Promise=o})();(function e(){if(t.WeakMap){return}var r=0;function a(){this.id=\"$weakmap\"+r++}a.prototype={has:function(e){return!!Object.getOwnPropertyDescriptor(e,this.id)},get:function(e,t){return this.has(e)?e[this.id]:t},set:function(e,t){Object.defineProperty(e,this.id,{value:t,enumerable:false,configurable:true})},delete:function(e){delete e[this.id]}};t.WeakMap=a})();var de=function e(){function t(e,t,r){while(e.length<r){e+=t}return e}function r(){this.started=Object.create(null);this.times=[];this.enabled=true}r.prototype={time:function e(t){if(!this.enabled){return}if(t in this.started){m(\"Timer is already running for \"+t)}this.started[t]=Date.now()},timeEnd:function e(t){if(!this.enabled){return}if(!(t in this.started)){m(\"Timer has not been started for \"+t)}this.times.push({name:t,start:this.started[t],end:Date.now()});delete this.started[t]},toString:function e(){var r,a;var i=this.times;var n=\"\";var s=0;for(r=0,a=i.length;r<a;++r){var o=i[r][\"name\"];if(o.length>s){s=o.length}}for(r=0,a=i.length;r<a;++r){var l=i[r];var c=l.end-l.start;n+=t(l[\"name\"],\" \",s)+\" \"+c+\"ms\\n\"}return n}};return r}();var ge=function e(t,r){if(typeof Blob!==\"undefined\"){return new Blob([t],{type:r})}m('The \"Blob\" constructor is not supported.')};var ve=function e(){var t=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return function e(r,a,i){if(!i&&typeof URL!==\"undefined\"&&URL.createObjectURL){var n=ge(r,a);return URL.createObjectURL(n)}var s=\"data:\"+a+\";base64,\";for(var o=0,l=r.length;o<l;o+=3){var c=r[o]&255;var h=r[o+1]&255;var u=r[o+2]&255;var f=c>>2,d=(c&3)<<4|h>>4;var g=o+1<l?(h&15)<<2|u>>6:64;var v=o+2<l?u&63:64;s+=t[f]+t[d]+t[g]+t[v]}return s}}();function pe(e,t,r){this.sourceName=e;this.targetName=t;this.comObj=r;this.callbackIndex=1;this.postMessageTransfers=true;var a=this.callbacksCapabilities=Object.create(null);var i=this.actionHandler=Object.create(null);this._onComObjOnMessage=function e(t){var n=t.data;if(n.targetName!==this.sourceName){return}if(n.isReply){var s=n.callbackId;if(n.callbackId in a){var o=a[s];delete a[s];if(\"error\"in n){o.reject(n.error)}else{o.resolve(n.data)}}else{y(\"Cannot resolve callback \"+s)}}else if(n.action in i){var l=i[n.action];if(n.callbackId){var c=this.sourceName;var h=n.sourceName;Promise.resolve().then(function(){return l[0].call(l[1],n.data)}).then(function(e){r.postMessage({sourceName:c,targetName:h,isReply:true,callbackId:n.callbackId,data:e})},function(e){if(e instanceof Error){e=e+\"\"}r.postMessage({sourceName:c,targetName:h,isReply:true,callbackId:n.callbackId,error:e})})}else{l[0].call(l[1],n.data)}}else{y(\"Unknown action from worker: \"+n.action)}}.bind(this);r.addEventListener(\"message\",this._onComObjOnMessage)}pe.prototype={on:function e(t,r,a){var i=this.actionHandler;if(i[t]){y('There is already an actionName called \"'+t+'\"')}i[t]=[r,a]},send:function e(t,r,a){var i={sourceName:this.sourceName,targetName:this.targetName,action:t,data:r};this.postMessage(i,a)},sendWithPromise:function e(t,r,a){var i=this.callbackIndex++;var n={sourceName:this.sourceName,targetName:this.targetName,action:t,data:r,callbackId:i};var s=fe();this.callbacksCapabilities[i]=s;try{this.postMessage(n,a)}catch(e){s.reject(e)}return s.promise},postMessage:function(e,t){if(t&&this.postMessageTransfers){this.comObj.postMessage(e,t)}else{this.comObj.postMessage(e)}},destroy:function(){this.comObj.removeEventListener(\"message\",this._onComObjOnMessage)}};function me(e,t,r){var a=new Image;a.onload=function t(){r.resolve(e,a)};a.onerror=function t(){r.resolve(e,null);m(\"Error during JPEG image loading\")};a.src=t}(function e(t){var r=false;try{if(typeof URL===\"function\"&&typeof URL.prototype===\"object\"&&\"origin\"in URL.prototype){var a=new URL(\"b\",\"http://a\");a.pathname=\"c%20d\";r=a.href===\"http://a/c%20d\"}}catch(e){}if(r){return}var i=Object.create(null);i[\"ftp\"]=21;i[\"file\"]=0;i[\"gopher\"]=70;i[\"http\"]=80;i[\"https\"]=443;i[\"ws\"]=80;i[\"wss\"]=443;var n=Object.create(null);n[\"%2e\"]=\".\";n[\".%2e\"]=\"..\";n[\"%2e.\"]=\"..\";n[\"%2e%2e\"]=\"..\";function s(e){return i[e]!==undefined}function o(){v.call(this);this._isInvalid=true}function l(e){if(e===\"\"){o.call(this)}return e.toLowerCase()}function c(e){var t=e.charCodeAt(0);if(t>32&&t<127&&[34,35,60,62,63,96].indexOf(t)===-1){return e}return encodeURIComponent(e)}function h(e){var t=e.charCodeAt(0);if(t>32&&t<127&&[34,35,60,62,96].indexOf(t)===-1){return e}return encodeURIComponent(e)}var u,f=/[a-zA-Z]/,d=/[a-zA-Z0-9\\+\\-\\.]/;function g(e,t,r){function a(e){y.push(e)}var g=t||\"scheme start\",v=0,p=\"\",m=false,b=false,y=[];e:while((e[v-1]!==u||v===0)&&!this._isInvalid){var k=e[v];switch(g){case\"scheme start\":if(k&&f.test(k)){p+=k.toLowerCase();g=\"scheme\"}else if(!t){p=\"\";g=\"no scheme\";continue}else{a(\"Invalid scheme.\");break e}break;case\"scheme\":if(k&&d.test(k)){p+=k.toLowerCase()}else if(k===\":\"){this._scheme=p;p=\"\";if(t){break e}if(s(this._scheme)){this._isRelative=true}if(this._scheme===\"file\"){g=\"relative\"}else if(this._isRelative&&r&&r._scheme===this._scheme){g=\"relative or authority\"}else if(this._isRelative){g=\"authority first slash\"}else{g=\"scheme data\"}}else if(!t){p=\"\";v=0;g=\"no scheme\";continue}else if(u===k){break e}else{a(\"Code point not allowed in scheme: \"+k);break e}break;case\"scheme data\":if(k===\"?\"){this._query=\"?\";g=\"query\"}else if(k===\"#\"){this._fragment=\"#\";g=\"fragment\"}else{if(u!==k&&\"\\t\"!==k&&\"\\n\"!==k&&\"\\r\"!==k){this._schemeData+=c(k)}}break;case\"no scheme\":if(!r||!s(r._scheme)){a(\"Missing scheme.\");o.call(this)}else{g=\"relative\";continue}break;case\"relative or authority\":if(k===\"/\"&&e[v+1]===\"/\"){g=\"authority ignore slashes\"}else{a(\"Expected /, got: \"+k);g=\"relative\";continue}break;case\"relative\":this._isRelative=true;if(\"file\"!==this._scheme){this._scheme=r._scheme}if(u===k){this._host=r._host;this._port=r._port;this._path=r._path.slice();this._query=r._query;this._username=r._username;this._password=r._password;break e}else if(k===\"/\"||k===\"\\\\\"){if(k===\"\\\\\"){a(\"\\\\ is an invalid code point.\")}g=\"relative slash\"}else if(k===\"?\"){this._host=r._host;this._port=r._port;this._path=r._path.slice();this._query=\"?\";this._username=r._username;this._password=r._password;g=\"query\"}else if(k===\"#\"){this._host=r._host;this._port=r._port;this._path=r._path.slice();this._query=r._query;this._fragment=\"#\";this._username=r._username;this._password=r._password;g=\"fragment\"}else{var w=e[v+1];var C=e[v+2];if(\"file\"!==this._scheme||!f.test(k)||w!==\":\"&&w!==\"|\"||u!==C&&\"/\"!==C&&\"\\\\\"!==C&&\"?\"!==C&&\"#\"!==C){this._host=r._host;this._port=r._port;this._username=r._username;this._password=r._password;this._path=r._path.slice();this._path.pop()}g=\"relative path\";continue}break;case\"relative slash\":if(k===\"/\"||k===\"\\\\\"){if(k===\"\\\\\"){a(\"\\\\ is an invalid code point.\")}if(this._scheme===\"file\"){g=\"file host\"}else{g=\"authority ignore slashes\"}}else{if(\"file\"!==this._scheme){this._host=r._host;this._port=r._port;this._username=r._username;this._password=r._password}g=\"relative path\";continue}break;case\"authority first slash\":if(k===\"/\"){g=\"authority second slash\"}else{a(\"Expected '/', got: \"+k);g=\"authority ignore slashes\";continue}break;case\"authority second slash\":g=\"authority ignore slashes\";if(\"/\"!==k){a(\"Expected '/', got: \"+k);continue}break;case\"authority ignore slashes\":if(\"/\"!==k&&\"\\\\\"!==k){g=\"authority\";continue}else{a(\"Expected authority, got: \"+k)}break;case\"authority\":if(k===\"@\"){if(m){a(\"@ already seen.\");p+=\"%40\"}m=true;for(var x=0;x<p.length;x++){var S=p[x];if(S===\"\\t\"||S===\"\\n\"||S===\"\\r\"){a(\"Invalid whitespace in authority.\");continue}if(S===\":\"&&this._password===null){this._password=\"\";continue}var A=c(S);if(null!==this._password){this._password+=A}else{this._username+=A}}p=\"\"}else if(k===u||k===\"/\"||k===\"\\\\\"||k===\"?\"||k===\"#\"){v-=p.length;p=\"\";g=\"host\";continue}else{p+=k}break;case\"file host\":if(k===u||k===\"/\"||k===\"\\\\\"||k===\"?\"||k===\"#\"){if(p.length===2&&f.test(p[0])&&(p[1]===\":\"||p[1]===\"|\")){g=\"relative path\"}else if(p.length===0){g=\"relative path start\"}else{this._host=l.call(this,p);p=\"\";g=\"relative path start\"}continue}else if(k===\"\\t\"||k===\"\\n\"||k===\"\\r\"){a(\"Invalid whitespace in file host.\")}else{p+=k}break;case\"host\":case\"hostname\":if(k===\":\"&&!b){this._host=l.call(this,p);p=\"\";g=\"port\";if(t===\"hostname\"){break e}}else if(k===u||k===\"/\"||k===\"\\\\\"||k===\"?\"||k===\"#\"){this._host=l.call(this,p);p=\"\";g=\"relative path start\";if(t){break e}continue}else if(\"\\t\"!==k&&\"\\n\"!==k&&\"\\r\"!==k){if(k===\"[\"){b=true}else if(k===\"]\"){b=false}p+=k}else{a(\"Invalid code point in host/hostname: \"+k)}break;case\"port\":if(/[0-9]/.test(k)){p+=k}else if(k===u||k===\"/\"||k===\"\\\\\"||k===\"?\"||k===\"#\"||t){if(\"\"!==p){var I=parseInt(p,10);if(I!==i[this._scheme]){this._port=I+\"\"}p=\"\"}if(t){break e}g=\"relative path start\";continue}else if(k===\"\\t\"||k===\"\\n\"||k===\"\\r\"){a(\"Invalid code point in port: \"+k)}else{o.call(this)}break;case\"relative path start\":if(k===\"\\\\\"){a(\"'\\\\' not allowed in path.\")}g=\"relative path\";if(\"/\"!==k&&\"\\\\\"!==k){continue}break;case\"relative path\":if(k===u||k===\"/\"||k===\"\\\\\"||!t&&(k===\"?\"||k===\"#\")){if(k===\"\\\\\"){a(\"\\\\ not allowed in relative path.\")}var B;if(B=n[p.toLowerCase()]){p=B}if(p===\"..\"){this._path.pop();if(\"/\"!==k&&\"\\\\\"!==k){this._path.push(\"\")}}else if(p===\".\"&&\"/\"!==k&&\"\\\\\"!==k){this._path.push(\"\")}else if(\".\"!==p){if(this._scheme===\"file\"&&this._path.length===0&&p.length===2&&f.test(p[0])&&p[1]===\"|\"){p=p[0]+\":\"}this._path.push(p)}p=\"\";if(k===\"?\"){this._query=\"?\";g=\"query\"}else if(k===\"#\"){this._fragment=\"#\";g=\"fragment\"}}else if(\"\\t\"!==k&&\"\\n\"!==k&&\"\\r\"!==k){p+=c(k)}break;case\"query\":if(!t&&k===\"#\"){this._fragment=\"#\";g=\"fragment\"}else if(u!==k&&\"\\t\"!==k&&\"\\n\"!==k&&\"\\r\"!==k){this._query+=h(k)}break;case\"fragment\":if(u!==k&&\"\\t\"!==k&&\"\\n\"!==k&&\"\\r\"!==k){this._fragment+=k}break}v++}}function v(){this._scheme=\"\";this._schemeData=\"\";this._username=\"\";this._password=null;this._host=\"\";this._port=\"\";this._path=[];this._query=\"\";this._fragment=\"\";this._isInvalid=false;this._isRelative=false}function p(e,t){if(t!==undefined&&!(t instanceof p)){t=new p(String(t))}this._url=e;v.call(this);var r=e.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g,\"\");g.call(this,r,null,t)}p.prototype={toString:function(){return this.href},get href(){if(this._isInvalid){return this._url}var e=\"\";if(\"\"!==this._username||null!==this._password){e=this._username+(null!==this._password?\":\"+this._password:\"\")+\"@\"}return this.protocol+(this._isRelative?\"//\"+e+this.host:\"\")+this.pathname+this._query+this._fragment},set href(e){v.call(this);g.call(this,e)},get protocol(){return this._scheme+\":\"},set protocol(e){if(this._isInvalid){return}g.call(this,e+\":\",\"scheme start\")},get host(){return this._isInvalid?\"\":this._port?this._host+\":\"+this._port:this._host},set host(e){if(this._isInvalid||!this._isRelative){return}g.call(this,e,\"host\")},get hostname(){return this._host},set hostname(e){if(this._isInvalid||!this._isRelative){return}g.call(this,e,\"hostname\")},get port(){return this._port},set port(e){if(this._isInvalid||!this._isRelative){return}g.call(this,e,\"port\")},get pathname(){return this._isInvalid?\"\":this._isRelative?\"/\"+this._path.join(\"/\"):this._schemeData},set pathname(e){if(this._isInvalid||!this._isRelative){return}this._path=[];g.call(this,e,\"relative path start\")},get search(){return this._isInvalid||!this._query||this._query===\"?\"?\"\":this._query},set search(e){if(this._isInvalid||!this._isRelative){return}this._query=\"?\";if(e[0]===\"?\"){e=e.slice(1)}g.call(this,e,\"query\")},get hash(){return this._isInvalid||!this._fragment||this._fragment===\"#\"?\"\":this._fragment},set hash(e){if(this._isInvalid){return}this._fragment=\"#\";if(e[0]===\"#\"){e=e.slice(1)}g.call(this,e,\"fragment\")},get origin(){var e;if(this._isInvalid||!this._scheme){return\"\"}switch(this._scheme){case\"data\":case\"file\":case\"javascript\":case\"mailto\":return\"null\"}e=this.host;if(!e){return\"\"}return this._scheme+\"://\"+e}};var m=t.URL;if(m){p.createObjectURL=function(e){return m.createObjectURL.apply(m,arguments)};p.revokeObjectURL=function(e){m.revokeObjectURL(e)}}t.URL=p})(t);e.FONT_IDENTITY_MATRIX=r;e.IDENTITY_MATRIX=Z;e.OPS=f;e.VERBOSITY_LEVELS=u;e.UNSUPPORTED_FEATURES=C;e.AnnotationBorderStyleType=l;e.AnnotationFieldFlag=o;e.AnnotationFlag=s;e.AnnotationType=n;e.FontType=h;e.ImageKind=i;e.InvalidPDFException=P;e.MessageHandler=pe;e.MissingDataException=D;e.MissingPDFException=E;e.NotImplementedException=L;e.PageViewport=$;e.PasswordException=T;e.PasswordResponses=R;e.StatTimer=de;e.StreamType=c;e.TextRenderingMode=a;e.UnexpectedResponseException=M;e.UnknownErrorException=O;e.Util=Q;e.XRefParseException=F;e.arrayByteLength=_;e.arraysToBytes=z;e.assert=w;e.bytesToString=q;e.createBlob=ge;e.createPromiseCapability=fe;e.createObjectURL=ve;e.deprecated=b;e.error=y;e.getLookupTableFactory=B;e.getVerbosityLevel=v;e.globalScope=t;e.info=p;e.isArray=ce;e.isArrayBuffer=he;e.isBool=ne;e.isEmptyObj=ie;e.isInt=se;e.isNum=oe;e.isString=le;e.isSpace=ue;e.isSameOrigin=x;e.createValidAbsoluteUrl=A;e.isLittleEndian=K;e.isEvalSupported=Y;e.loadJpegStream=me;e.log2=G;e.readInt8=X;e.readUint16=W;e.readUint32=V;e.removeNullCharacters=j;e.setVerbosityLevel=g;e.shadow=I;e.string32=H;e.stringToBytes=N;e.stringToPDFString=te;e.stringToUTF8String=re;e.utf8StringToString=ae;e.warn=m});(function(e,t){t(e.pdfjsCoreBidi={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.warn;var a=[\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"S\",\"B\",\"S\",\"WS\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"B\",\"B\",\"S\",\"WS\",\"ON\",\"ON\",\"ET\",\"ET\",\"ET\",\"ON\",\"ON\",\"ON\",\"ON\",\"ON\",\"ES\",\"CS\",\"ES\",\"CS\",\"CS\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"CS\",\"ON\",\"ON\",\"ON\",\"ON\",\"ON\",\"ON\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"ON\",\"ON\",\"ON\",\"ON\",\"ON\",\"ON\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"ON\",\"ON\",\"ON\",\"ON\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"B\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"BN\",\"CS\",\"ON\",\"ET\",\"ET\",\"ET\",\"ET\",\"ON\",\"ON\",\"ON\",\"ON\",\"L\",\"ON\",\"ON\",\"BN\",\"ON\",\"ON\",\"ET\",\"ET\",\"EN\",\"EN\",\"ON\",\"L\",\"ON\",\"ON\",\"ON\",\"EN\",\"L\",\"ON\",\"ON\",\"ON\",\"ON\",\"ON\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"ON\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"ON\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\",\"L\"];var i=[\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"ON\",\"ON\",\"AL\",\"ET\",\"ET\",\"AL\",\"CS\",\"AL\",\"ON\",\"ON\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"AN\",\"ET\",\"AN\",\"AN\",\"AL\",\"AL\",\"AL\",\"NSM\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AN\",\"ON\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"NSM\",\"NSM\",\"ON\",\"NSM\",\"NSM\",\"NSM\",\"NSM\",\"AL\",\"AL\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"EN\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\",\"AL\"];function n(e){return(e&1)!==0}function s(e){return(e&1)===0}function o(e,t,r){for(var a=t,i=e.length;a<i;++a){if(e[a]!==r){return a}}return a}function l(e,t,r,a){for(var i=t;i<r;++i){e[i]=a}}function c(e,t,r){for(var a=t,i=r-1;a<i;++a,--i){var n=e[a];e[a]=e[i];e[i]=n}}function h(e,t,r){return{str:e,dir:r?\"ttb\":t?\"ltr\":\"rtl\"}}var u=[];var f=[];function d(e,t,d){var g=true;var v=e.length;if(v===0||d){return h(e,g,d)}u.length=v;f.length=v;var p=0;var m,b;for(m=0;m<v;++m){u[m]=e.charAt(m);var y=e.charCodeAt(m);var k=\"L\";if(y<=255){k=a[y]}else if(1424<=y&&y<=1524){k=\"R\"}else if(1536<=y&&y<=1791){k=i[y&255];if(!k){r(\"Bidi: invalid Unicode character \"+y.toString(16))}}else if(1792<=y&&y<=2220){k=\"AL\"}if(k===\"R\"||k===\"AL\"||k===\"AN\"){p++}f[m]=k}if(p===0){g=true;return h(e,g)}if(t===-1){if(p/v<.3){g=true;t=0}else{g=false;t=1}}var w=[];for(m=0;m<v;++m){w[m]=t}var C=n(t)?\"R\":\"L\";var x=C;var S=x;var A=x;for(m=0;m<v;++m){if(f[m]===\"NSM\"){f[m]=A}else{A=f[m]}}A=x;var I;for(m=0;m<v;++m){I=f[m];if(I===\"EN\"){f[m]=A===\"AL\"?\"AN\":\"EN\"}else if(I===\"R\"||I===\"L\"||I===\"AL\"){A=I}}for(m=0;m<v;++m){I=f[m];if(I===\"AL\"){f[m]=\"R\"}}for(m=1;m<v-1;++m){if(f[m]===\"ES\"&&f[m-1]===\"EN\"&&f[m+1]===\"EN\"){f[m]=\"EN\"}if(f[m]===\"CS\"&&(f[m-1]===\"EN\"||f[m-1]===\"AN\")&&f[m+1]===f[m-1]){f[m]=f[m-1]}}for(m=0;m<v;++m){if(f[m]===\"EN\"){var B;for(B=m-1;B>=0;--B){if(f[B]!==\"ET\"){break}f[B]=\"EN\"}for(B=m+1;B<v;++B){if(f[B]!==\"ET\"){break}f[B]=\"EN\"}}}for(m=0;m<v;++m){I=f[m];if(I===\"WS\"||I===\"ES\"||I===\"ET\"||I===\"CS\"){f[m]=\"ON\"}}A=x;for(m=0;m<v;++m){I=f[m];if(I===\"EN\"){f[m]=A===\"L\"?\"L\":\"EN\"}else if(I===\"R\"||I===\"L\"){A=I}}for(m=0;m<v;++m){if(f[m]===\"ON\"){var R=o(f,m+1,\"ON\");var T=x;if(m>0){T=f[m-1]}var O=S;if(R+1<v){O=f[R+1]}if(T!==\"L\"){T=\"R\"}if(O!==\"L\"){O=\"R\"}if(T===O){l(f,m,R,T)}m=R-1}}for(m=0;m<v;++m){if(f[m]===\"ON\"){f[m]=C}}for(m=0;m<v;++m){I=f[m];if(s(w[m])){if(I===\"R\"){w[m]+=1}else if(I===\"AN\"||I===\"EN\"){w[m]+=2}}else{if(I===\"L\"||I===\"AN\"||I===\"EN\"){w[m]+=1}}}var P=-1;var E=99;var M;for(m=0,b=w.length;m<b;++m){M=w[m];if(P<M){P=M}if(E>M&&n(M)){E=M}}for(M=P;M>=E;--M){var L=-1;for(m=0,b=w.length;m<b;++m){if(w[m]<M){if(L>=0){c(u,L,m);L=-1}}else if(L<0){L=m}}if(L>=0){c(u,L,w.length)}}for(m=0,b=u.length;m<b;++m){var D=u[m];if(D===\"<\"||D===\">\"){u[m]=\"\"}}return h(u.join(\"\"),g)}e.bidi=d});(function(e,t){t(e.pdfjsCoreCFFParser={},e.pdfjsSharedUtil,e.pdfjsCoreCharsets,e.pdfjsCoreEncodings)})(this,function(e,t,r,a){var i=t.error;var n=t.info;var s=t.bytesToString;var o=t.warn;var l=t.isArray;var c=t.Util;var h=t.stringToBytes;var u=t.assert;var f=r.ISOAdobeCharset;var d=r.ExpertCharset;var g=r.ExpertSubsetCharset;var v=a.StandardEncoding;var p=a.ExpertEncoding;var m=10;var b=[\".notdef\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quoteright\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"quoteleft\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\"exclamdown\",\"cent\",\"sterling\",\"fraction\",\"yen\",\"florin\",\"section\",\"currency\",\"quotesingle\",\"quotedblleft\",\"guillemotleft\",\"guilsinglleft\",\"guilsinglright\",\"fi\",\"fl\",\"endash\",\"dagger\",\"daggerdbl\",\"periodcentered\",\"paragraph\",\"bullet\",\"quotesinglbase\",\"quotedblbase\",\"quotedblright\",\"guillemotright\",\"ellipsis\",\"perthousand\",\"questiondown\",\"grave\",\"acute\",\"circumflex\",\"tilde\",\"macron\",\"breve\",\"dotaccent\",\"dieresis\",\"ring\",\"cedilla\",\"hungarumlaut\",\"ogonek\",\"caron\",\"emdash\",\"AE\",\"ordfeminine\",\"Lslash\",\"Oslash\",\"OE\",\"ordmasculine\",\"ae\",\"dotlessi\",\"lslash\",\"oslash\",\"oe\",\"germandbls\",\"onesuperior\",\"logicalnot\",\"mu\",\"trademark\",\"Eth\",\"onehalf\",\"plusminus\",\"Thorn\",\"onequarter\",\"divide\",\"brokenbar\",\"degree\",\"thorn\",\"threequarters\",\"twosuperior\",\"registered\",\"minus\",\"eth\",\"multiply\",\"threesuperior\",\"copyright\",\"Aacute\",\"Acircumflex\",\"Adieresis\",\"Agrave\",\"Aring\",\"Atilde\",\"Ccedilla\",\"Eacute\",\"Ecircumflex\",\"Edieresis\",\"Egrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Igrave\",\"Ntilde\",\"Oacute\",\"Ocircumflex\",\"Odieresis\",\"Ograve\",\"Otilde\",\"Scaron\",\"Uacute\",\"Ucircumflex\",\"Udieresis\",\"Ugrave\",\"Yacute\",\"Ydieresis\",\"Zcaron\",\"aacute\",\"acircumflex\",\"adieresis\",\"agrave\",\"aring\",\"atilde\",\"ccedilla\",\"eacute\",\"ecircumflex\",\"edieresis\",\"egrave\",\"iacute\",\"icircumflex\",\"idieresis\",\"igrave\",\"ntilde\",\"oacute\",\"ocircumflex\",\"odieresis\",\"ograve\",\"otilde\",\"scaron\",\"uacute\",\"ucircumflex\",\"udieresis\",\"ugrave\",\"yacute\",\"ydieresis\",\"zcaron\",\"exclamsmall\",\"Hungarumlautsmall\",\"dollaroldstyle\",\"dollarsuperior\",\"ampersandsmall\",\"Acutesmall\",\"parenleftsuperior\",\"parenrightsuperior\",\"twodotenleader\",\"onedotenleader\",\"zerooldstyle\",\"oneoldstyle\",\"twooldstyle\",\"threeoldstyle\",\"fouroldstyle\",\"fiveoldstyle\",\"sixoldstyle\",\"sevenoldstyle\",\"eightoldstyle\",\"nineoldstyle\",\"commasuperior\",\"threequartersemdash\",\"periodsuperior\",\"questionsmall\",\"asuperior\",\"bsuperior\",\"centsuperior\",\"dsuperior\",\"esuperior\",\"isuperior\",\"lsuperior\",\"msuperior\",\"nsuperior\",\"osuperior\",\"rsuperior\",\"ssuperior\",\"tsuperior\",\"ff\",\"ffi\",\"ffl\",\"parenleftinferior\",\"parenrightinferior\",\"Circumflexsmall\",\"hyphensuperior\",\"Gravesmall\",\"Asmall\",\"Bsmall\",\"Csmall\",\"Dsmall\",\"Esmall\",\"Fsmall\",\"Gsmall\",\"Hsmall\",\"Ismall\",\"Jsmall\",\"Ksmall\",\"Lsmall\",\"Msmall\",\"Nsmall\",\"Osmall\",\"Psmall\",\"Qsmall\",\"Rsmall\",\"Ssmall\",\"Tsmall\",\"Usmall\",\"Vsmall\",\"Wsmall\",\"Xsmall\",\"Ysmall\",\"Zsmall\",\"colonmonetary\",\"onefitted\",\"rupiah\",\"Tildesmall\",\"exclamdownsmall\",\"centoldstyle\",\"Lslashsmall\",\"Scaronsmall\",\"Zcaronsmall\",\"Dieresissmall\",\"Brevesmall\",\"Caronsmall\",\"Dotaccentsmall\",\"Macronsmall\",\"figuredash\",\"hypheninferior\",\"Ogoneksmall\",\"Ringsmall\",\"Cedillasmall\",\"questiondownsmall\",\"oneeighth\",\"threeeighths\",\"fiveeighths\",\"seveneighths\",\"onethird\",\"twothirds\",\"zerosuperior\",\"foursuperior\",\"fivesuperior\",\"sixsuperior\",\"sevensuperior\",\"eightsuperior\",\"ninesuperior\",\"zeroinferior\",\"oneinferior\",\"twoinferior\",\"threeinferior\",\"fourinferior\",\"fiveinferior\",\"sixinferior\",\"seveninferior\",\"eightinferior\",\"nineinferior\",\"centinferior\",\"dollarinferior\",\"periodinferior\",\"commainferior\",\"Agravesmall\",\"Aacutesmall\",\"Acircumflexsmall\",\"Atildesmall\",\"Adieresissmall\",\"Aringsmall\",\"AEsmall\",\"Ccedillasmall\",\"Egravesmall\",\"Eacutesmall\",\"Ecircumflexsmall\",\"Edieresissmall\",\"Igravesmall\",\"Iacutesmall\",\"Icircumflexsmall\",\"Idieresissmall\",\"Ethsmall\",\"Ntildesmall\",\"Ogravesmall\",\"Oacutesmall\",\"Ocircumflexsmall\",\"Otildesmall\",\"Odieresissmall\",\"OEsmall\",\"Oslashsmall\",\"Ugravesmall\",\"Uacutesmall\",\"Ucircumflexsmall\",\"Udieresissmall\",\"Yacutesmall\",\"Thornsmall\",\"Ydieresissmall\",\"001.000\",\"001.001\",\"001.002\",\"001.003\",\"Black\",\"Bold\",\"Book\",\"Light\",\"Medium\",\"Regular\",\"Roman\",\"Semibold\"];var y=function e(){var t=[null,{id:\"hstem\",min:2,stackClearing:true,stem:true},null,{id:\"vstem\",min:2,stackClearing:true,stem:true},{id:\"vmoveto\",min:1,stackClearing:true},{id:\"rlineto\",min:2,resetStack:true},{id:\"hlineto\",min:1,resetStack:true},{id:\"vlineto\",min:1,resetStack:true},{id:\"rrcurveto\",min:6,resetStack:true},null,{id:\"callsubr\",min:1,undefStack:true},{id:\"return\",min:0,undefStack:true},null,null,{id:\"endchar\",min:0,stackClearing:true},null,null,null,{id:\"hstemhm\",min:2,stackClearing:true,stem:true},{id:\"hintmask\",min:0,stackClearing:true},{id:\"cntrmask\",min:0,stackClearing:true},{id:\"rmoveto\",min:2,stackClearing:true},{id:\"hmoveto\",min:1,stackClearing:true},{id:\"vstemhm\",min:2,stackClearing:true,stem:true},{id:\"rcurveline\",min:8,resetStack:true},{id:\"rlinecurve\",min:8,resetStack:true},{id:\"vvcurveto\",min:4,resetStack:true},{id:\"hhcurveto\",min:4,resetStack:true},null,{id:\"callgsubr\",min:1,undefStack:true},{id:\"vhcurveto\",min:4,resetStack:true},{id:\"hvcurveto\",min:4,resetStack:true}];var r=[null,null,null,{id:\"and\",min:2,stackDelta:-1},{id:\"or\",min:2,stackDelta:-1},{id:\"not\",min:1,stackDelta:0},null,null,null,{id:\"abs\",min:1,stackDelta:0},{id:\"add\",min:2,stackDelta:-1,stackFn:function e(t,r){t[r-2]=t[r-2]+t[r-1]}},{id:\"sub\",min:2,stackDelta:-1,stackFn:function e(t,r){t[r-2]=t[r-2]-t[r-1]}},{id:\"div\",min:2,stackDelta:-1,stackFn:function e(t,r){t[r-2]=t[r-2]/t[r-1]}},null,{id:\"neg\",min:1,stackDelta:0,stackFn:function e(t,r){t[r-1]=-t[r-1]}},{id:\"eq\",min:2,stackDelta:-1},null,null,{id:\"drop\",min:1,stackDelta:-1},null,{id:\"put\",min:2,stackDelta:-2},{id:\"get\",min:1,stackDelta:0},{id:\"ifelse\",min:4,stackDelta:-3},{id:\"random\",min:0,stackDelta:1},{id:\"mul\",min:2,stackDelta:-1,stackFn:function e(t,r){t[r-2]=t[r-2]*t[r-1]}},null,{id:\"sqrt\",min:1,stackDelta:0},{id:\"dup\",min:1,stackDelta:1},{id:\"exch\",min:2,stackDelta:0},{id:\"index\",min:2,stackDelta:0},{id:\"roll\",min:3,stackDelta:-2},null,null,null,{id:\"hflex\",min:7,resetStack:true},{id:\"flex\",min:13,resetStack:true},{id:\"hflex1\",min:9,resetStack:true},{id:\"flex1\",min:11,resetStack:true}];function a(e,t,r){this.bytes=e.getBytes();this.properties=t;this.seacAnalysisEnabled=!!r}a.prototype={parse:function e(){var t=this.properties;var r=new k;this.cff=r;var a=this.parseHeader();var i=this.parseIndex(a.endPos);var n=this.parseIndex(i.endPos);var s=this.parseIndex(n.endPos);var o=this.parseIndex(s.endPos);var l=this.parseDict(n.obj.get(0));var c=this.createDict(A,l,r.strings);r.header=a.obj;r.names=this.parseNameIndex(i.obj);r.strings=this.parseStringIndex(s.obj);r.topDict=c;r.globalSubrIndex=o.obj;this.parsePrivateDict(r.topDict);r.isCIDFont=c.hasName(\"ROS\");var h=c.getByName(\"CharStrings\");var u=this.parseIndex(h).obj;var f=c.getByName(\"FontMatrix\");if(f){t.fontMatrix=f}var d=c.getByName(\"FontBBox\");if(d){t.ascent=d[3];t.descent=d[1];t.ascentScaled=true}var g,v;if(r.isCIDFont){var p=this.parseIndex(c.getByName(\"FDArray\")).obj;for(var m=0,b=p.count;m<b;++m){var y=p.get(m);var w=this.createDict(A,this.parseDict(y),r.strings);this.parsePrivateDict(w);r.fdArray.push(w)}v=null;g=this.parseCharsets(c.getByName(\"charset\"),u.count,r.strings,true);r.fdSelect=this.parseFDSelect(c.getByName(\"FDSelect\"),u.count)}else{g=this.parseCharsets(c.getByName(\"charset\"),u.count,r.strings,false);v=this.parseEncoding(c.getByName(\"Encoding\"),t,r.strings,g.charset)}r.charset=g;r.encoding=v;var C=this.parseCharStrings(u,c.privateDict.subrsIndex,o.obj,r.fdSelect,r.fdArray);r.charStrings=C.charStrings;r.seacs=C.seacs;r.widths=C.widths;return r},parseHeader:function e(){var t=this.bytes;var r=t.length;var a=0;while(a<r&&t[a]!==1){++a}if(a>=r){i(\"Invalid CFF header\")}else if(a!==0){n(\"cff data is shifted\");t=t.subarray(a);this.bytes=t}var s=t[0];var o=t[1];var l=t[2];var c=t[3];var h=new w(s,o,l,c);return{obj:h,endPos:l}},parseDict:function e(t){var r=0;function a(){var e=t[r++];if(e===30){return i()}else if(e===28){e=t[r++];e=(e<<24|t[r++]<<16)>>16;return e}else if(e===29){e=t[r++];e=e<<8|t[r++];e=e<<8|t[r++];e=e<<8|t[r++];return e}else if(e>=32&&e<=246){return e-139}else if(e>=247&&e<=250){return(e-247)*256+t[r++]+108}else if(e>=251&&e<=254){return-((e-251)*256)-t[r++]-108}o('CFFParser_parseDict: \"'+e+'\" is a reserved command.');return NaN}function i(){var e=\"\";var a=15;var i=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\".\",\"E\",\"E-\",null,\"-\"];var n=t.length;while(r<n){var s=t[r++];var o=s>>4;var l=s&15;if(o===a){break}e+=i[o];if(l===a){break}e+=i[l]}return parseFloat(e)}var n=[];var s=[];r=0;var l=t.length;while(r<l){var c=t[r];if(c<=21){if(c===12){c=c<<8|t[++r]}s.push([c,n]);n=[];++r}else{n.push(a())}}return s},parseIndex:function e(t){var r=new x;var a=this.bytes;var i=a[t++]<<8|a[t++];var n=[];var s=t;var o,l;if(i!==0){var c=a[t++];var h=t+(i+1)*c-1;for(o=0,l=i+1;o<l;++o){var u=0;for(var f=0;f<c;++f){u<<=8;u+=a[t++]}n.push(h+u)}s=n[i]}for(o=0,l=n.length-1;o<l;++o){var d=n[o];var g=n[o+1];r.add(a.subarray(d,g))}return{obj:r,endPos:s}},parseNameIndex:function e(t){var r=[];for(var a=0,i=t.count;a<i;++a){var n=t.get(a);var o=Math.min(n.length,127);var l=[];for(var c=0;c<o;++c){var h=n[c];if(c===0&&h===0){l[c]=h;continue}if(h<33||h>126||h===91||h===93||h===40||h===41||h===123||h===125||h===60||h===62||h===47||h===37||h===35){l[c]=95;continue}l[c]=h}r.push(s(l))}return r},parseStringIndex:function e(t){var r=new C;for(var a=0,i=t.count;a<i;++a){var n=t.get(a);r.add(s(n))}return r},createDict:function e(t,r,a){var i=new t(a);for(var n=0,s=r.length;n<s;++n){var o=r[n];var l=o[0];var c=o[1];i.setByKey(l,c)}return i},parseCharString:function e(a,i,n,s){if(a.callDepth>m){return false}var l=a.stackSize;var c=a.stack;var h=i.length;for(var u=0;u<h;){var f=i[u++];var d=null;if(f===12){var g=i[u++];if(g===0){i[u-2]=139;i[u-1]=22;l=0}else{d=r[g]}}else if(f===28){c[l]=(i[u]<<24|i[u+1]<<16)>>16;u+=2;l++}else if(f===14){if(l>=4){l-=4;if(this.seacAnalysisEnabled){a.seac=c.slice(l,l+4);return false}}d=t[f]}else if(f>=32&&f<=246){c[l]=f-139;l++}else if(f>=247&&f<=254){c[l]=f<251?(f-247<<8)+i[u]+108:-(f-251<<8)-i[u]-108;u++;l++}else if(f===255){c[l]=(i[u]<<24|i[u+1]<<16|i[u+2]<<8|i[u+3])/65536;u+=4;l++}else if(f===19||f===20){a.hints+=l>>1;u+=a.hints+7>>3;l%=2;d=t[f]}else if(f===10||f===29){var v;if(f===10){v=n}else{v=s}if(!v){d=t[f];o(\"Missing subrsIndex for \"+d.id);return false}var p=32768;if(v.count<1240){p=107}else if(v.count<33900){p=1131}var b=c[--l]+p;if(b<0||b>=v.count){d=t[f];o(\"Out of bounds subrIndex for \"+d.id);return false}a.stackSize=l;a.callDepth++;var y=this.parseCharString(a,v.get(b),n,s);if(!y){return false}a.callDepth--;l=a.stackSize;continue}else if(f===11){a.stackSize=l;return true}else{d=t[f]}if(d){if(d.stem){a.hints+=l>>1}if(\"min\"in d){if(!a.undefStack&&l<d.min){o(\"Not enough parameters for \"+d.id+\"; actual: \"+l+\", expected: \"+d.min);return false}}if(a.firstStackClearing&&d.stackClearing){a.firstStackClearing=false;l-=d.min;if(l>=2&&d.stem){l%=2}else if(l>1){o(\"Found too many parameters for stack-clearing command\")}if(l>0&&c[l-1]>=0){a.width=c[l-1]}}if(\"stackDelta\"in d){if(\"stackFn\"in d){d.stackFn(c,l)}l+=d.stackDelta}else if(d.stackClearing){l=0}else if(d.resetStack){l=0;a.undefStack=false}else if(d.undefStack){l=0;a.undefStack=true;a.firstStackClearing=false}}}a.stackSize=l;return true},parseCharStrings:function e(t,r,a,i,n){var s=[];var l=[];var c=t.count;for(var h=0;h<c;h++){var u=t.get(h);var f={callDepth:0,stackSize:0,stack:[],undefStack:true,hints:0,firstStackClearing:true,seac:null,width:null};var d=true;var g=null;if(i&&n.length){var v=i.getFDIndex(h);if(v===-1){o(\"Glyph index is not in fd select.\");d=false}if(v>=n.length){o(\"Invalid fd index for glyph index.\");d=false}if(d){g=n[v].privateDict.subrsIndex}}else if(r){g=r}if(d){d=this.parseCharString(f,u,g,a)}if(f.width!==null){l[h]=f.width}if(f.seac!==null){s[h]=f.seac}if(!d){t.set(h,new Uint8Array([14]))}}return{charStrings:t,seacs:s,widths:l}},emptyPrivateDictionary:function e(t){var r=this.createDict(I,[],t.strings);t.setByKey(18,[0,0]);t.privateDict=r},parsePrivateDict:function e(t){if(!t.hasName(\"Private\")){this.emptyPrivateDictionary(t);return}var r=t.getByName(\"Private\");if(!l(r)||r.length!==2){t.removeByName(\"Private\");return}var a=r[0];var i=r[1];if(a===0||i>=this.bytes.length){this.emptyPrivateDictionary(t);return}var n=i+a;var s=this.bytes.subarray(i,n);var o=this.parseDict(s);var c=this.createDict(I,o,t.strings);t.privateDict=c;if(!c.getByName(\"Subrs\")){return}var h=c.getByName(\"Subrs\");var u=i+h;if(h===0||u>=this.bytes.length){this.emptyPrivateDictionary(t);return}var f=this.parseIndex(u);c.subrsIndex=f.obj},parseCharsets:function e(t,r,a,n){if(t===0){return new R(true,B.ISO_ADOBE,f)}else if(t===1){return new R(true,B.EXPERT,d)}else if(t===2){return new R(true,B.EXPERT_SUBSET,g)}var s=this.bytes;var o=t;var l=s[t++];var c=[\".notdef\"];var h,u,v;r-=1;switch(l){case 0:for(v=0;v<r;v++){h=s[t++]<<8|s[t++];c.push(n?h:a.get(h))}break;case 1:while(c.length<=r){h=s[t++]<<8|s[t++];u=s[t++];for(v=0;v<=u;v++){c.push(n?h++:a.get(h++))}}break;case 2:while(c.length<=r){h=s[t++]<<8|s[t++];u=s[t++]<<8|s[t++];for(v=0;v<=u;v++){c.push(n?h++:a.get(h++))}}break;default:i(\"Unknown charset format\")}var p=t;var m=s.subarray(o,p);return new R(false,l,c,m)},parseEncoding:function e(t,r,a,n){var s=Object.create(null);var o=this.bytes;var l=false;var c=false;var h,u,f;var d=null;function g(){var e=o[t++];for(u=0;u<e;u++){var r=o[t++];var i=(o[t++]<<8)+(o[t++]&255);s[r]=n.indexOf(a.get(i))}}if(t===0||t===1){l=true;h=t;var m=t?p:v;for(u=0,f=n.length;u<f;u++){var b=m.indexOf(n[u]);if(b!==-1){s[b]=u}}}else{var y=t;h=o[t++];switch(h&127){case 0:var k=o[t++];for(u=1;u<=k;u++){s[o[t++]]=u}break;case 1:var w=o[t++];var C=1;for(u=0;u<w;u++){var x=o[t++];var S=o[t++];for(var A=x;A<=x+S;A++){s[A]=C++}}break;default:i(\"Unknown encoding format: \"+h+\" in CFF\");break}var I=t;if(h&128){o[y]&=127;g();c=true}d=o.subarray(y,I)}h=h&127;return new T(l,h,s,d)},parseFDSelect:function e(t,r){var a=t;var n=this.bytes;var s=n[t++];var l=[],c;var h,f=false;switch(s){case 0:for(h=0;h<r;++h){var d=n[t++];l.push(d)}c=n.subarray(a,t);break;case 3:var g=n[t++]<<8|n[t++];for(h=0;h<g;++h){var v=n[t++]<<8|n[t++];if(h===0&&v!==0){o(\"parseFDSelect: The first range must have a first GID of 0\"+\" -- trying to recover.\");f=true;v=0}var p=n[t++];var m=n[t]<<8|n[t+1];for(var b=v;b<m;++b){l.push(p)}}t+=2;c=n.subarray(a,t);if(f){c[3]=c[4]=0}break;default:i('parseFDSelect: Unknown format \"'+s+'\".');break}u(l.length===r,\"parseFDSelect: Invalid font data.\");return new O(l,c)}};return a}();var k=function e(){function t(){this.header=null;this.names=[];this.topDict=null;this.strings=new C;this.globalSubrIndex=null;this.encoding=null;this.charset=null;this.charStrings=null;this.fdArray=[];this.fdSelect=null;this.isCIDFont=false}return t}();var w=function e(){function t(e,t,r,a){this.major=e;this.minor=t;this.hdrSize=r;this.offSize=a}return t}();var C=function e(){function t(){this.strings=[]}t.prototype={get:function e(t){if(t>=0&&t<=390){return b[t]}if(t-391<=this.strings.length){return this.strings[t-391]}return b[0]},add:function e(t){this.strings.push(t)},get count(){return this.strings.length}};return t}();var x=function e(){function t(){this.objects=[];this.length=0}t.prototype={add:function e(t){this.length+=t.length;this.objects.push(t)},set:function e(t,r){this.length+=r.length-this.objects[t].length;this.objects[t]=r},get:function e(t){return this.objects[t]},get count(){return this.objects.length}};return t}();var S=function e(){function t(e,t){this.keyToNameMap=e.keyToNameMap;this.nameToKeyMap=e.nameToKeyMap;this.defaults=e.defaults;this.types=e.types;this.opcodes=e.opcodes;this.order=e.order;this.strings=t;this.values=Object.create(null)}t.prototype={setByKey:function e(t,r){if(!(t in this.keyToNameMap)){return false}var a=r.length;if(a===0){return true}for(var i=0;i<a;i++){if(isNaN(r[i])){o('Invalid CFFDict value: \"'+r+'\" for key \"'+t+'\".');return true}}var n=this.types[t];if(n===\"num\"||n===\"sid\"||n===\"offset\"){r=r[0]}this.values[t]=r;return true},setByName:function e(t,r){if(!(t in this.nameToKeyMap)){i('Invalid dictionary name \"'+t+'\"')}this.values[this.nameToKeyMap[t]]=r},hasName:function e(t){return this.nameToKeyMap[t]in this.values},getByName:function e(t){if(!(t in this.nameToKeyMap)){i('Invalid dictionary name \"'+t+'\"')}var r=this.nameToKeyMap[t];if(!(r in this.values)){return this.defaults[r]}return this.values[r]},removeByName:function e(t){delete this.values[this.nameToKeyMap[t]]}};t.createTables=function e(t){var r={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(var a=0,i=t.length;a<i;++a){var n=t[a];var s=l(n[0])?(n[0][0]<<8)+n[0][1]:n[0];r.keyToNameMap[s]=n[1];r.nameToKeyMap[n[1]]=s;r.types[s]=n[2];r.defaults[s]=n[3];r.opcodes[s]=l(n[0])?n[0]:[n[0]];r.order.push(s)}return r};return t}();var A=function e(){var t=[[[12,30],\"ROS\",[\"sid\",\"sid\",\"num\"],null],[[12,20],\"SyntheticBase\",\"num\",null],[0,\"version\",\"sid\",null],[1,\"Notice\",\"sid\",null],[[12,0],\"Copyright\",\"sid\",null],[2,\"FullName\",\"sid\",null],[3,\"FamilyName\",\"sid\",null],[4,\"Weight\",\"sid\",null],[[12,1],\"isFixedPitch\",\"num\",0],[[12,2],\"ItalicAngle\",\"num\",0],[[12,3],\"UnderlinePosition\",\"num\",-100],[[12,4],\"UnderlineThickness\",\"num\",50],[[12,5],\"PaintType\",\"num\",0],[[12,6],\"CharstringType\",\"num\",2],[[12,7],\"FontMatrix\",[\"num\",\"num\",\"num\",\"num\",\"num\",\"num\"],[.001,0,0,.001,0,0]],[13,\"UniqueID\",\"num\",null],[5,\"FontBBox\",[\"num\",\"num\",\"num\",\"num\"],[0,0,0,0]],[[12,8],\"StrokeWidth\",\"num\",0],[14,\"XUID\",\"array\",null],[15,\"charset\",\"offset\",0],[16,\"Encoding\",\"offset\",0],[17,\"CharStrings\",\"offset\",0],[18,\"Private\",[\"offset\",\"offset\"],null],[[12,21],\"PostScript\",\"sid\",null],[[12,22],\"BaseFontName\",\"sid\",null],[[12,23],\"BaseFontBlend\",\"delta\",null],[[12,31],\"CIDFontVersion\",\"num\",0],[[12,32],\"CIDFontRevision\",\"num\",0],[[12,33],\"CIDFontType\",\"num\",0],[[12,34],\"CIDCount\",\"num\",8720],[[12,35],\"UIDBase\",\"num\",null],[[12,37],\"FDSelect\",\"offset\",null],[[12,36],\"FDArray\",\"offset\",null],[[12,38],\"FontName\",\"sid\",null]];var r=null;function a(e){if(r===null){r=S.createTables(t)}S.call(this,r,e);this.privateDict=null}a.prototype=Object.create(S.prototype);return a}();var I=function e(){var t=[[6,\"BlueValues\",\"delta\",null],[7,\"OtherBlues\",\"delta\",null],[8,\"FamilyBlues\",\"delta\",null],[9,\"FamilyOtherBlues\",\"delta\",null],[[12,9],\"BlueScale\",\"num\",.039625],[[12,10],\"BlueShift\",\"num\",7],[[12,11],\"BlueFuzz\",\"num\",1],[10,\"StdHW\",\"num\",null],[11,\"StdVW\",\"num\",null],[[12,12],\"StemSnapH\",\"delta\",null],[[12,13],\"StemSnapV\",\"delta\",null],[[12,14],\"ForceBold\",\"num\",0],[[12,17],\"LanguageGroup\",\"num\",0],[[12,18],\"ExpansionFactor\",\"num\",.06],[[12,19],\"initialRandomSeed\",\"num\",0],[20,\"defaultWidthX\",\"num\",0],[21,\"nominalWidthX\",\"num\",0],[19,\"Subrs\",\"offset\",null]];var r=null;function a(e){if(r===null){r=S.createTables(t)}S.call(this,r,e);this.subrsIndex=null}a.prototype=Object.create(S.prototype);return a}();var B={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};var R=function e(){function t(e,t,r,a){this.predefined=e;this.format=t;this.charset=r;this.raw=a}return t}();var T=function e(){function t(e,t,r,a){this.predefined=e;this.format=t;this.encoding=r;this.raw=a}return t}();var O=function e(){function t(e,t){this.fdSelect=e;this.raw=t}t.prototype={getFDIndex:function e(t){if(t<0||t>=this.fdSelect.length){return-1}return this.fdSelect[t]}};return t}();var P=function e(){function t(){this.offsets=Object.create(null)}t.prototype={isTracking:function e(t){return t in this.offsets},track:function e(t,r){if(t in this.offsets){i(\"Already tracking location of \"+t)}this.offsets[t]=r},offset:function e(t){for(var r in this.offsets){this.offsets[r]+=t}},setEntryLocation:function e(t,r,a){if(!(t in this.offsets)){i(\"Not tracking location of \"+t)}var n=a.data;var s=this.offsets[t];var o=5;for(var l=0,c=r.length;l<c;++l){var h=l*o+s;var u=h+1;var f=h+2;var d=h+3;var g=h+4;if(n[h]!==29||n[u]!==0||n[f]!==0||n[d]!==0||n[g]!==0){i(\"writing to an offset that is not empty\")}var v=r[l];n[h]=29;n[u]=v>>24&255;n[f]=v>>16&255;n[d]=v>>8&255;n[g]=v&255}}};return t}();var E=function e(){function t(e){this.cff=e}t.prototype={compile:function e(){var t=this.cff;var r={data:[],length:0,add:function e(t){this.data=this.data.concat(t);this.length=this.data.length}};var a=this.compileHeader(t.header);r.add(a);var i=this.compileNameIndex(t.names);r.add(i);if(t.isCIDFont){if(t.topDict.hasName(\"FontMatrix\")){var n=t.topDict.getByName(\"FontMatrix\");t.topDict.removeByName(\"FontMatrix\");for(var s=0,o=t.fdArray.length;s<o;s++){var l=t.fdArray[s];var h=n.slice(0);if(l.hasName(\"FontMatrix\")){h=c.transform(h,l.getByName(\"FontMatrix\"))}l.setByName(\"FontMatrix\",h)}}}var u=this.compileTopDicts([t.topDict],r.length,t.isCIDFont);r.add(u.output);var f=u.trackers[0];var d=this.compileStringIndex(t.strings.strings);r.add(d);var g=this.compileIndex(t.globalSubrIndex);r.add(g);if(t.encoding&&t.topDict.hasName(\"Encoding\")){if(t.encoding.predefined){f.setEntryLocation(\"Encoding\",[t.encoding.format],r)}else{var v=this.compileEncoding(t.encoding);f.setEntryLocation(\"Encoding\",[r.length],r);r.add(v)}}if(t.charset&&t.topDict.hasName(\"charset\")){if(t.charset.predefined){f.setEntryLocation(\"charset\",[t.charset.format],r)}else{var p=this.compileCharset(t.charset);f.setEntryLocation(\"charset\",[r.length],r);r.add(p)}}var m=this.compileCharStrings(t.charStrings);f.setEntryLocation(\"CharStrings\",[r.length],r);r.add(m);if(t.isCIDFont){f.setEntryLocation(\"FDSelect\",[r.length],r);var b=this.compileFDSelect(t.fdSelect.raw);r.add(b);u=this.compileTopDicts(t.fdArray,r.length,true);f.setEntryLocation(\"FDArray\",[r.length],r);r.add(u.output);var y=u.trackers;this.compilePrivateDicts(t.fdArray,y,r)}this.compilePrivateDicts([t.topDict],[f],r);r.add([0]);return r.data},encodeNumber:function e(t){if(parseFloat(t)===parseInt(t,10)&&!isNaN(t)){return this.encodeInteger(t)}return this.encodeFloat(t)},encodeFloat:function e(t){var r=t.toString();var a=/\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/.exec(r);if(a){var i=parseFloat(\"1e\"+((a[2]?+a[2]:0)+a[1].length));r=(Math.round(t*i)/i).toString()}var n=\"\";var s,o;for(s=0,o=r.length;s<o;++s){var l=r[s];if(l===\"e\"){n+=r[++s]===\"-\"?\"c\":\"b\"}else if(l===\".\"){n+=\"a\"}else if(l===\"-\"){n+=\"e\"}else{n+=l}}n+=n.length&1?\"f\":\"ff\";var c=[30];for(s=0,o=n.length;s<o;s+=2){c.push(parseInt(n.substr(s,2),16))}return c},encodeInteger:function e(t){var r;if(t>=-107&&t<=107){r=[t+139]}else if(t>=108&&t<=1131){t=t-108;r=[(t>>8)+247,t&255]}else if(t>=-1131&&t<=-108){t=-t-108;r=[(t>>8)+251,t&255]}else if(t>=-32768&&t<=32767){r=[28,t>>8&255,t&255]}else{r=[29,t>>24&255,t>>16&255,t>>8&255,t&255]}return r},compileHeader:function e(t){return[t.major,t.minor,t.hdrSize,t.offSize]},compileNameIndex:function e(t){var r=new x;for(var a=0,i=t.length;a<i;++a){r.add(h(t[a]))}return this.compileIndex(r)},compileTopDicts:function e(t,r,a){var i=[];var n=new x;for(var s=0,o=t.length;s<o;++s){var l=t[s];if(a){l.removeByName(\"CIDFontVersion\");l.removeByName(\"CIDFontRevision\");l.removeByName(\"CIDFontType\");l.removeByName(\"CIDCount\");l.removeByName(\"UIDBase\")}var c=new P;var h=this.compileDict(l,c);i.push(c);n.add(h);c.offset(r)}n=this.compileIndex(n,i);return{trackers:i,output:n}},compilePrivateDicts:function e(t,r,a){for(var i=0,n=t.length;i<n;++i){var s=t[i];u(s.privateDict&&s.hasName(\"Private\"),\"There must be an private dictionary.\");var o=s.privateDict;var l=new P;var c=this.compileDict(o,l);var h=a.length;l.offset(h);if(!c.length){h=0}r[i].setEntryLocation(\"Private\",[c.length,h],a);a.add(c);if(o.subrsIndex&&o.hasName(\"Subrs\")){var f=this.compileIndex(o.subrsIndex);l.setEntryLocation(\"Subrs\",[c.length],a);a.add(f)}}},compileDict:function e(t,r){var a=[];var n=t.order;for(var s=0;s<n.length;++s){var o=n[s];if(!(o in t.values)){continue}var c=t.values[o];var h=t.types[o];if(!l(h)){h=[h]}if(!l(c)){c=[c]}if(c.length===0){continue}for(var u=0,f=h.length;u<f;++u){var d=h[u];var g=c[u];switch(d){case\"num\":case\"sid\":a=a.concat(this.encodeNumber(g));break;case\"offset\":var v=t.keyToNameMap[o];if(!r.isTracking(v)){r.track(v,a.length)}a=a.concat([29,0,0,0,0]);break;case\"array\":case\"delta\":a=a.concat(this.encodeNumber(g));for(var p=1,m=c.length;p<m;++p){a=a.concat(this.encodeNumber(c[p]))}break;default:i(\"Unknown data type of \"+d);break}}a=a.concat(t.opcodes[o])}return a},compileStringIndex:function e(t){var r=new x;for(var a=0,i=t.length;a<i;++a){r.add(h(t[a]))}return this.compileIndex(r)},compileGlobalSubrIndex:function e(){var t=this.cff.globalSubrIndex;this.out.writeByteArray(this.compileIndex(t))},compileCharStrings:function e(t){return this.compileIndex(t)},compileCharset:function e(t){return this.compileTypedArray(t.raw)},compileEncoding:function e(t){return this.compileTypedArray(t.raw)},compileFDSelect:function e(t){return this.compileTypedArray(t)},compileTypedArray:function e(t){var r=[];for(var a=0,i=t.length;a<i;++a){r[a]=t[a]}return r},compileIndex:function e(t,r){r=r||[];var a=t.objects;var i=a.length;if(i===0){return[0,0,0]}var n=[i>>8&255,i&255];var s=1,o;for(o=0;o<i;++o){s+=a[o].length}var l;if(s<256){l=1}else if(s<65536){l=2}else if(s<16777216){l=3}else{l=4}n.push(l);var c=1;for(o=0;o<i+1;o++){if(l===1){n.push(c&255)}else if(l===2){n.push(c>>8&255,c&255)}else if(l===3){n.push(c>>16&255,c>>8&255,c&255)}else{n.push(c>>>24&255,c>>16&255,c>>8&255,c&255)}if(a[o]){c+=a[o].length}}for(o=0;o<i;o++){if(r[o]){r[o].offset(n.length)}for(var h=0,u=a[o].length;h<u;h++){n.push(a[o][h])}}return n}};return t}();e.CFFStandardStrings=b;e.CFFParser=y;e.CFF=k;e.CFFHeader=w;e.CFFStrings=C;e.CFFIndex=x;e.CFFCharset=R;e.CFFTopDict=A;e.CFFPrivateDict=I;e.CFFCompiler=E});(function(e,t){t(e.pdfjsCoreChunkedStream={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.MissingDataException;var a=t.arrayByteLength;var i=t.arraysToBytes;var n=t.assert;var s=t.createPromiseCapability;var o=t.isInt;var l=t.isEmptyObj;var c=function e(){function t(e,t,r){this.bytes=new Uint8Array(e);this.start=0;this.pos=0;this.end=e;this.chunkSize=t;this.loadedChunks=[];this.numChunksLoaded=0;this.numChunks=Math.ceil(e/t);this.manager=r;this.progressiveDataLength=0;this.lastSuccessfulEnsureByteChunk=-1}t.prototype={getMissingChunks:function e(){var t=[];for(var r=0,a=this.numChunks;r<a;++r){if(!this.loadedChunks[r]){t.push(r)}}return t},getBaseStreams:function e(){return[this]},allChunksLoaded:function e(){return this.numChunksLoaded===this.numChunks},onReceiveData:function e(t,r){var a=t+r.byteLength;n(t%this.chunkSize===0,\"Bad begin offset: \"+t);var i=this.bytes.length;n(a%this.chunkSize===0||a===i,\"Bad end offset: \"+a);this.bytes.set(new Uint8Array(r),t);var s=this.chunkSize;var o=Math.floor(t/s);var l=Math.floor((a-1)/s)+1;var c;for(c=o;c<l;++c){if(!this.loadedChunks[c]){this.loadedChunks[c]=true;++this.numChunksLoaded}}},onReceiveProgressiveData:function e(t){var r=this.progressiveDataLength;var a=Math.floor(r/this.chunkSize);this.bytes.set(new Uint8Array(t),r);r+=t.byteLength;this.progressiveDataLength=r;var i=r>=this.end?this.numChunks:Math.floor(r/this.chunkSize);var n;for(n=a;n<i;++n){if(!this.loadedChunks[n]){this.loadedChunks[n]=true;++this.numChunksLoaded}}},ensureByte:function e(t){var a=Math.floor(t/this.chunkSize);if(a===this.lastSuccessfulEnsureByteChunk){return}if(!this.loadedChunks[a]){throw new r(t,t+1)}this.lastSuccessfulEnsureByteChunk=a},ensureRange:function e(t,a){if(t>=a){return}if(a<=this.progressiveDataLength){return}var i=this.chunkSize;var n=Math.floor(t/i);var s=Math.floor((a-1)/i)+1;for(var o=n;o<s;++o){if(!this.loadedChunks[o]){throw new r(t,a)}}},nextEmptyChunk:function e(t){var r,a=this.numChunks;for(var i=0;i<a;++i){r=(t+i)%a;if(!this.loadedChunks[r]){return r}}return null},hasChunk:function e(t){return!!this.loadedChunks[t]},get length(){return this.end-this.start},get isEmpty(){return this.length===0},getByte:function e(){var t=this.pos;if(t>=this.end){return-1}this.ensureByte(t);return this.bytes[this.pos++]},getUint16:function e(){var t=this.getByte();var r=this.getByte();if(t===-1||r===-1){return-1}return(t<<8)+r},getInt32:function e(){var t=this.getByte();var r=this.getByte();var a=this.getByte();var i=this.getByte();return(t<<24)+(r<<16)+(a<<8)+i},getBytes:function e(t){var r=this.bytes;var a=this.pos;var i=this.end;if(!t){this.ensureRange(a,i);return r.subarray(a,i)}var n=a+t;if(n>i){n=i}this.ensureRange(a,n);this.pos=n;return r.subarray(a,n)},peekByte:function e(){var t=this.getByte();this.pos--;return t},peekBytes:function e(t){var r=this.getBytes(t);this.pos-=r.length;return r},getByteRange:function e(t,r){this.ensureRange(t,r);return this.bytes.subarray(t,r)},skip:function e(t){if(!t){t=1}this.pos+=t},reset:function e(){this.pos=this.start},moveStart:function e(){this.start=this.pos},makeSubStream:function e(t,r,a){this.ensureRange(t,t+r);function i(){}i.prototype=Object.create(this);i.prototype.getMissingChunks=function(){var e=this.chunkSize;var t=Math.floor(this.start/e);var r=Math.floor((this.end-1)/e)+1;var a=[];for(var i=t;i<r;++i){if(!this.loadedChunks[i]){a.push(i)}}return a};var n=new i;n.pos=n.start=t;n.end=t+r||this.end;n.dict=a;return n},isStream:true};return t}();var h=function e(){function t(e,t){var r=t.rangeChunkSize;var a=t.length;this.stream=new c(a,r,this);this.length=a;this.chunkSize=r;this.pdfNetworkStream=e;this.url=t.url;this.disableAutoFetch=t.disableAutoFetch;this.msgHandler=t.msgHandler;this.currRequestId=0;this.chunksNeededByRequest=Object.create(null);this.requestsByChunk=Object.create(null);this.promisesByRequest=Object.create(null);this.progressiveDataLength=0;this.aborted=false;this._loadedStreamCapability=s()}t.prototype={onLoadedStream:function e(){return this._loadedStreamCapability.promise},sendRequest:function e(t,r){var n=this.pdfNetworkStream.getRangeReader(t,r);if(!n.isStreamingSupported){n.onProgress=this.onProgress.bind(this)}var s=[],o=0;var l=this;var c=new Promise(function(e,t){var r=function(c){try{if(!c.done){var h=c.value;s.push(h);o+=a(h);if(n.isStreamingSupported){l.onProgress({loaded:o})}n.read().then(r,t);return}var u=i(s);s=null;e(u)}catch(e){t(e)}};n.read().then(r,t)});c.then(function(e){if(this.aborted){return}this.onReceiveData({chunk:e,begin:t})}.bind(this))},requestAllChunks:function e(){var t=this.stream.getMissingChunks();this._requestChunks(t);return this._loadedStreamCapability.promise},_requestChunks:function e(t){var r=this.currRequestId++;var a,i;var n=Object.create(null);this.chunksNeededByRequest[r]=n;for(a=0,i=t.length;a<i;a++){if(!this.stream.hasChunk(t[a])){n[t[a]]=true}}if(l(n)){return Promise.resolve()}var o=s();this.promisesByRequest[r]=o;var c=[];for(var h in n){h=h|0;if(!(h in this.requestsByChunk)){this.requestsByChunk[h]=[];c.push(h)}this.requestsByChunk[h].push(r)}if(!c.length){return o.promise}var u=this.groupChunks(c);for(a=0;a<u.length;++a){var f=u[a];var d=f.beginChunk*this.chunkSize;var g=Math.min(f.endChunk*this.chunkSize,this.length);this.sendRequest(d,g)}return o.promise},getStream:function e(){return this.stream},requestRange:function e(t,r){r=Math.min(r,this.length);var a=this.getBeginChunk(t);var i=this.getEndChunk(r);var n=[];for(var s=a;s<i;++s){n.push(s)}return this._requestChunks(n)},requestRanges:function e(t){t=t||[];var r=[];for(var a=0;a<t.length;a++){var i=this.getBeginChunk(t[a].begin);var n=this.getEndChunk(t[a].end);for(var s=i;s<n;++s){if(r.indexOf(s)<0){r.push(s)}}}r.sort(function(e,t){return e-t});return this._requestChunks(r)},groupChunks:function e(t){var r=[];var a=-1;var i=-1;for(var n=0;n<t.length;++n){var s=t[n];if(a<0){a=s}if(i>=0&&i+1!==s){r.push({beginChunk:a,endChunk:i+1});a=s}if(n+1===t.length){r.push({beginChunk:a,endChunk:s+1})}i=s}return r},onProgress:function e(t){var r=this.stream.numChunksLoaded*this.chunkSize+t.loaded;this.msgHandler.send(\"DocProgress\",{loaded:r,total:this.length})},onReceiveData:function e(t){var r=t.chunk;var a=t.begin===undefined;var i=a?this.progressiveDataLength:t.begin;var n=i+r.byteLength;var s=Math.floor(i/this.chunkSize);var c=n<this.length?Math.floor(n/this.chunkSize):Math.ceil(n/this.chunkSize);if(a){this.stream.onReceiveProgressiveData(r);this.progressiveDataLength=n}else{this.stream.onReceiveData(i,r)}if(this.stream.allChunksLoaded()){this._loadedStreamCapability.resolve(this.stream)}var h=[];var u,f;for(r=s;r<c;++r){var d=this.requestsByChunk[r]||[];delete this.requestsByChunk[r];for(u=0;u<d.length;++u){f=d[u];var g=this.chunksNeededByRequest[f];if(r in g){delete g[r]}if(!l(g)){continue}h.push(f)}}if(!this.disableAutoFetch&&l(this.requestsByChunk)){var v;if(this.stream.numChunksLoaded===1){var p=this.stream.numChunks-1;if(!this.stream.hasChunk(p)){v=p}}else{v=this.stream.nextEmptyChunk(c)}if(o(v)){this._requestChunks([v])}}for(u=0;u<h.length;++u){f=h[u];var m=this.promisesByRequest[f];delete this.promisesByRequest[f];m.resolve()}this.msgHandler.send(\"DocProgress\",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})},onError:function e(t){this._loadedStreamCapability.reject(t)},getBeginChunk:function e(t){var r=Math.floor(t/this.chunkSize);return r},getEndChunk:function e(t){var r=Math.floor((t-1)/this.chunkSize)+1;return r},abort:function e(){this.aborted=true;if(this.pdfNetworkStream){this.pdfNetworkStream.cancelAllRequests(\"abort\")}for(var t in this.promisesByRequest){var r=this.promisesByRequest[t];r.reject(new Error(\"Request was aborted\"))}}};return t}();e.ChunkedStream=c;e.ChunkedStreamManager=h});(function(e,t){t(e.pdfjsCoreGlyphList={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.getLookupTableFactory;var a=r(function(e){e[\"A\"]=65;e[\"AE\"]=198;e[\"AEacute\"]=508;e[\"AEmacron\"]=482;e[\"AEsmall\"]=63462;e[\"Aacute\"]=193;e[\"Aacutesmall\"]=63457;e[\"Abreve\"]=258;e[\"Abreveacute\"]=7854;e[\"Abrevecyrillic\"]=1232;e[\"Abrevedotbelow\"]=7862;e[\"Abrevegrave\"]=7856;e[\"Abrevehookabove\"]=7858;e[\"Abrevetilde\"]=7860;e[\"Acaron\"]=461;e[\"Acircle\"]=9398;e[\"Acircumflex\"]=194;e[\"Acircumflexacute\"]=7844;e[\"Acircumflexdotbelow\"]=7852;e[\"Acircumflexgrave\"]=7846;e[\"Acircumflexhookabove\"]=7848;e[\"Acircumflexsmall\"]=63458;e[\"Acircumflextilde\"]=7850;e[\"Acute\"]=63177;e[\"Acutesmall\"]=63412;e[\"Acyrillic\"]=1040;e[\"Adblgrave\"]=512;e[\"Adieresis\"]=196;e[\"Adieresiscyrillic\"]=1234;e[\"Adieresismacron\"]=478;e[\"Adieresissmall\"]=63460;e[\"Adotbelow\"]=7840;e[\"Adotmacron\"]=480;e[\"Agrave\"]=192;e[\"Agravesmall\"]=63456;e[\"Ahookabove\"]=7842;e[\"Aiecyrillic\"]=1236;e[\"Ainvertedbreve\"]=514;e[\"Alpha\"]=913;e[\"Alphatonos\"]=902;e[\"Amacron\"]=256;e[\"Amonospace\"]=65313;e[\"Aogonek\"]=260;e[\"Aring\"]=197;e[\"Aringacute\"]=506;e[\"Aringbelow\"]=7680;e[\"Aringsmall\"]=63461;e[\"Asmall\"]=63329;e[\"Atilde\"]=195;e[\"Atildesmall\"]=63459;e[\"Aybarmenian\"]=1329;e[\"B\"]=66;e[\"Bcircle\"]=9399;e[\"Bdotaccent\"]=7682;e[\"Bdotbelow\"]=7684;e[\"Becyrillic\"]=1041;e[\"Benarmenian\"]=1330;e[\"Beta\"]=914;e[\"Bhook\"]=385;e[\"Blinebelow\"]=7686;e[\"Bmonospace\"]=65314;e[\"Brevesmall\"]=63220;e[\"Bsmall\"]=63330;e[\"Btopbar\"]=386;e[\"C\"]=67;e[\"Caarmenian\"]=1342;e[\"Cacute\"]=262;e[\"Caron\"]=63178;e[\"Caronsmall\"]=63221;e[\"Ccaron\"]=268;e[\"Ccedilla\"]=199;e[\"Ccedillaacute\"]=7688;e[\"Ccedillasmall\"]=63463;e[\"Ccircle\"]=9400;e[\"Ccircumflex\"]=264;e[\"Cdot\"]=266;e[\"Cdotaccent\"]=266;e[\"Cedillasmall\"]=63416;e[\"Chaarmenian\"]=1353;e[\"Cheabkhasiancyrillic\"]=1212;e[\"Checyrillic\"]=1063;e[\"Chedescenderabkhasiancyrillic\"]=1214;e[\"Chedescendercyrillic\"]=1206;e[\"Chedieresiscyrillic\"]=1268;e[\"Cheharmenian\"]=1347;e[\"Chekhakassiancyrillic\"]=1227;e[\"Cheverticalstrokecyrillic\"]=1208;e[\"Chi\"]=935;e[\"Chook\"]=391;e[\"Circumflexsmall\"]=63222;e[\"Cmonospace\"]=65315;e[\"Coarmenian\"]=1361;e[\"Csmall\"]=63331;e[\"D\"]=68;e[\"DZ\"]=497;e[\"DZcaron\"]=452;e[\"Daarmenian\"]=1332;e[\"Dafrican\"]=393;e[\"Dcaron\"]=270;e[\"Dcedilla\"]=7696;e[\"Dcircle\"]=9401;e[\"Dcircumflexbelow\"]=7698;e[\"Dcroat\"]=272;e[\"Ddotaccent\"]=7690;e[\"Ddotbelow\"]=7692;e[\"Decyrillic\"]=1044;e[\"Deicoptic\"]=1006;e[\"Delta\"]=8710;e[\"Deltagreek\"]=916;e[\"Dhook\"]=394;e[\"Dieresis\"]=63179;e[\"DieresisAcute\"]=63180;e[\"DieresisGrave\"]=63181;e[\"Dieresissmall\"]=63400;e[\"Digammagreek\"]=988;e[\"Djecyrillic\"]=1026;e[\"Dlinebelow\"]=7694;e[\"Dmonospace\"]=65316;e[\"Dotaccentsmall\"]=63223;e[\"Dslash\"]=272;e[\"Dsmall\"]=63332;e[\"Dtopbar\"]=395;e[\"Dz\"]=498;e[\"Dzcaron\"]=453;e[\"Dzeabkhasiancyrillic\"]=1248;e[\"Dzecyrillic\"]=1029;e[\"Dzhecyrillic\"]=1039;e[\"E\"]=69;e[\"Eacute\"]=201;e[\"Eacutesmall\"]=63465;e[\"Ebreve\"]=276;e[\"Ecaron\"]=282;e[\"Ecedillabreve\"]=7708;e[\"Echarmenian\"]=1333;e[\"Ecircle\"]=9402;e[\"Ecircumflex\"]=202;e[\"Ecircumflexacute\"]=7870;e[\"Ecircumflexbelow\"]=7704;e[\"Ecircumflexdotbelow\"]=7878;e[\"Ecircumflexgrave\"]=7872;e[\"Ecircumflexhookabove\"]=7874;e[\"Ecircumflexsmall\"]=63466;e[\"Ecircumflextilde\"]=7876;e[\"Ecyrillic\"]=1028;e[\"Edblgrave\"]=516;e[\"Edieresis\"]=203;e[\"Edieresissmall\"]=63467;e[\"Edot\"]=278;e[\"Edotaccent\"]=278;e[\"Edotbelow\"]=7864;e[\"Efcyrillic\"]=1060;e[\"Egrave\"]=200;e[\"Egravesmall\"]=63464;e[\"Eharmenian\"]=1335;e[\"Ehookabove\"]=7866;e[\"Eightroman\"]=8551;e[\"Einvertedbreve\"]=518;e[\"Eiotifiedcyrillic\"]=1124;e[\"Elcyrillic\"]=1051;e[\"Elevenroman\"]=8554;e[\"Emacron\"]=274;e[\"Emacronacute\"]=7702;e[\"Emacrongrave\"]=7700;e[\"Emcyrillic\"]=1052;e[\"Emonospace\"]=65317;e[\"Encyrillic\"]=1053;e[\"Endescendercyrillic\"]=1186;e[\"Eng\"]=330;e[\"Enghecyrillic\"]=1188;e[\"Enhookcyrillic\"]=1223;e[\"Eogonek\"]=280;e[\"Eopen\"]=400;e[\"Epsilon\"]=917;e[\"Epsilontonos\"]=904;e[\"Ercyrillic\"]=1056;e[\"Ereversed\"]=398;e[\"Ereversedcyrillic\"]=1069;e[\"Escyrillic\"]=1057;e[\"Esdescendercyrillic\"]=1194;e[\"Esh\"]=425;e[\"Esmall\"]=63333;e[\"Eta\"]=919;e[\"Etarmenian\"]=1336;e[\"Etatonos\"]=905;e[\"Eth\"]=208;e[\"Ethsmall\"]=63472;e[\"Etilde\"]=7868;e[\"Etildebelow\"]=7706;e[\"Euro\"]=8364;e[\"Ezh\"]=439;e[\"Ezhcaron\"]=494;e[\"Ezhreversed\"]=440;e[\"F\"]=70;e[\"Fcircle\"]=9403;e[\"Fdotaccent\"]=7710;e[\"Feharmenian\"]=1366;e[\"Feicoptic\"]=996;e[\"Fhook\"]=401;e[\"Fitacyrillic\"]=1138;e[\"Fiveroman\"]=8548;e[\"Fmonospace\"]=65318;e[\"Fourroman\"]=8547;e[\"Fsmall\"]=63334;e[\"G\"]=71;e[\"GBsquare\"]=13191;e[\"Gacute\"]=500;e[\"Gamma\"]=915;e[\"Gammaafrican\"]=404;e[\"Gangiacoptic\"]=1002;e[\"Gbreve\"]=286;e[\"Gcaron\"]=486;e[\"Gcedilla\"]=290;e[\"Gcircle\"]=9404;e[\"Gcircumflex\"]=284;e[\"Gcommaaccent\"]=290;e[\"Gdot\"]=288;e[\"Gdotaccent\"]=288;e[\"Gecyrillic\"]=1043;e[\"Ghadarmenian\"]=1346;e[\"Ghemiddlehookcyrillic\"]=1172;e[\"Ghestrokecyrillic\"]=1170;e[\"Gheupturncyrillic\"]=1168;e[\"Ghook\"]=403;e[\"Gimarmenian\"]=1331;e[\"Gjecyrillic\"]=1027;e[\"Gmacron\"]=7712;e[\"Gmonospace\"]=65319;e[\"Grave\"]=63182;e[\"Gravesmall\"]=63328;e[\"Gsmall\"]=63335;e[\"Gsmallhook\"]=667;e[\"Gstroke\"]=484;e[\"H\"]=72;e[\"H18533\"]=9679;e[\"H18543\"]=9642;e[\"H18551\"]=9643;e[\"H22073\"]=9633;e[\"HPsquare\"]=13259;e[\"Haabkhasiancyrillic\"]=1192;e[\"Hadescendercyrillic\"]=1202;e[\"Hardsigncyrillic\"]=1066;e[\"Hbar\"]=294;e[\"Hbrevebelow\"]=7722;e[\"Hcedilla\"]=7720;e[\"Hcircle\"]=9405;e[\"Hcircumflex\"]=292;e[\"Hdieresis\"]=7718;e[\"Hdotaccent\"]=7714;e[\"Hdotbelow\"]=7716;e[\"Hmonospace\"]=65320;e[\"Hoarmenian\"]=1344;e[\"Horicoptic\"]=1e3;e[\"Hsmall\"]=63336;e[\"Hungarumlaut\"]=63183;e[\"Hungarumlautsmall\"]=63224;e[\"Hzsquare\"]=13200;e[\"I\"]=73;e[\"IAcyrillic\"]=1071;e[\"IJ\"]=306;e[\"IUcyrillic\"]=1070;e[\"Iacute\"]=205;e[\"Iacutesmall\"]=63469;e[\"Ibreve\"]=300;e[\"Icaron\"]=463;e[\"Icircle\"]=9406;e[\"Icircumflex\"]=206;e[\"Icircumflexsmall\"]=63470;e[\"Icyrillic\"]=1030;e[\"Idblgrave\"]=520;e[\"Idieresis\"]=207;e[\"Idieresisacute\"]=7726;e[\"Idieresiscyrillic\"]=1252;e[\"Idieresissmall\"]=63471;e[\"Idot\"]=304;e[\"Idotaccent\"]=304;e[\"Idotbelow\"]=7882;e[\"Iebrevecyrillic\"]=1238;e[\"Iecyrillic\"]=1045;e[\"Ifraktur\"]=8465;e[\"Igrave\"]=204;e[\"Igravesmall\"]=63468;e[\"Ihookabove\"]=7880;e[\"Iicyrillic\"]=1048;e[\"Iinvertedbreve\"]=522;e[\"Iishortcyrillic\"]=1049;e[\"Imacron\"]=298;e[\"Imacroncyrillic\"]=1250;e[\"Imonospace\"]=65321;e[\"Iniarmenian\"]=1339;e[\"Iocyrillic\"]=1025;e[\"Iogonek\"]=302;e[\"Iota\"]=921;e[\"Iotaafrican\"]=406;e[\"Iotadieresis\"]=938;e[\"Iotatonos\"]=906;e[\"Ismall\"]=63337;e[\"Istroke\"]=407;e[\"Itilde\"]=296;e[\"Itildebelow\"]=7724;e[\"Izhitsacyrillic\"]=1140;e[\"Izhitsadblgravecyrillic\"]=1142;e[\"J\"]=74;e[\"Jaarmenian\"]=1345;e[\"Jcircle\"]=9407;e[\"Jcircumflex\"]=308;e[\"Jecyrillic\"]=1032;e[\"Jheharmenian\"]=1355;e[\"Jmonospace\"]=65322;e[\"Jsmall\"]=63338;e[\"K\"]=75;e[\"KBsquare\"]=13189;e[\"KKsquare\"]=13261;e[\"Kabashkircyrillic\"]=1184;e[\"Kacute\"]=7728;e[\"Kacyrillic\"]=1050;e[\"Kadescendercyrillic\"]=1178;e[\"Kahookcyrillic\"]=1219;e[\"Kappa\"]=922;e[\"Kastrokecyrillic\"]=1182;e[\"Kaverticalstrokecyrillic\"]=1180;e[\"Kcaron\"]=488;e[\"Kcedilla\"]=310;e[\"Kcircle\"]=9408;e[\"Kcommaaccent\"]=310;e[\"Kdotbelow\"]=7730;e[\"Keharmenian\"]=1364;e[\"Kenarmenian\"]=1343;e[\"Khacyrillic\"]=1061;e[\"Kheicoptic\"]=998;e[\"Khook\"]=408;e[\"Kjecyrillic\"]=1036;e[\"Klinebelow\"]=7732;e[\"Kmonospace\"]=65323;e[\"Koppacyrillic\"]=1152;e[\"Koppagreek\"]=990;e[\"Ksicyrillic\"]=1134;e[\"Ksmall\"]=63339;e[\"L\"]=76;e[\"LJ\"]=455;e[\"LL\"]=63167;e[\"Lacute\"]=313;e[\"Lambda\"]=923;e[\"Lcaron\"]=317;e[\"Lcedilla\"]=315;e[\"Lcircle\"]=9409;e[\"Lcircumflexbelow\"]=7740;e[\"Lcommaaccent\"]=315;e[\"Ldot\"]=319;e[\"Ldotaccent\"]=319;e[\"Ldotbelow\"]=7734;e[\"Ldotbelowmacron\"]=7736;e[\"Liwnarmenian\"]=1340;e[\"Lj\"]=456;e[\"Ljecyrillic\"]=1033;e[\"Llinebelow\"]=7738;e[\"Lmonospace\"]=65324;e[\"Lslash\"]=321;e[\"Lslashsmall\"]=63225;e[\"Lsmall\"]=63340;e[\"M\"]=77;e[\"MBsquare\"]=13190;e[\"Macron\"]=63184;e[\"Macronsmall\"]=63407;e[\"Macute\"]=7742;e[\"Mcircle\"]=9410;e[\"Mdotaccent\"]=7744;e[\"Mdotbelow\"]=7746;e[\"Menarmenian\"]=1348;e[\"Mmonospace\"]=65325;e[\"Msmall\"]=63341;e[\"Mturned\"]=412;e[\"Mu\"]=924;e[\"N\"]=78;e[\"NJ\"]=458;e[\"Nacute\"]=323;e[\"Ncaron\"]=327;e[\"Ncedilla\"]=325;e[\"Ncircle\"]=9411;e[\"Ncircumflexbelow\"]=7754;e[\"Ncommaaccent\"]=325;e[\"Ndotaccent\"]=7748;e[\"Ndotbelow\"]=7750;e[\"Nhookleft\"]=413;e[\"Nineroman\"]=8552;e[\"Nj\"]=459;e[\"Njecyrillic\"]=1034;e[\"Nlinebelow\"]=7752;e[\"Nmonospace\"]=65326;e[\"Nowarmenian\"]=1350;e[\"Nsmall\"]=63342;e[\"Ntilde\"]=209;e[\"Ntildesmall\"]=63473;e[\"Nu\"]=925;e[\"O\"]=79;e[\"OE\"]=338;e[\"OEsmall\"]=63226;e[\"Oacute\"]=211;e[\"Oacutesmall\"]=63475;e[\"Obarredcyrillic\"]=1256;e[\"Obarreddieresiscyrillic\"]=1258;e[\"Obreve\"]=334;e[\"Ocaron\"]=465;e[\"Ocenteredtilde\"]=415;e[\"Ocircle\"]=9412;e[\"Ocircumflex\"]=212;e[\"Ocircumflexacute\"]=7888;e[\"Ocircumflexdotbelow\"]=7896;e[\"Ocircumflexgrave\"]=7890;e[\"Ocircumflexhookabove\"]=7892;e[\"Ocircumflexsmall\"]=63476;e[\"Ocircumflextilde\"]=7894;e[\"Ocyrillic\"]=1054;e[\"Odblacute\"]=336;e[\"Odblgrave\"]=524;e[\"Odieresis\"]=214;e[\"Odieresiscyrillic\"]=1254;e[\"Odieresissmall\"]=63478;e[\"Odotbelow\"]=7884;e[\"Ogoneksmall\"]=63227;e[\"Ograve\"]=210;e[\"Ogravesmall\"]=63474;e[\"Oharmenian\"]=1365;e[\"Ohm\"]=8486;e[\"Ohookabove\"]=7886;e[\"Ohorn\"]=416;e[\"Ohornacute\"]=7898;e[\"Ohorndotbelow\"]=7906;e[\"Ohorngrave\"]=7900;e[\"Ohornhookabove\"]=7902;e[\"Ohorntilde\"]=7904;e[\"Ohungarumlaut\"]=336;e[\"Oi\"]=418;e[\"Oinvertedbreve\"]=526;e[\"Omacron\"]=332;e[\"Omacronacute\"]=7762;e[\"Omacrongrave\"]=7760;e[\"Omega\"]=8486;e[\"Omegacyrillic\"]=1120;e[\"Omegagreek\"]=937;e[\"Omegaroundcyrillic\"]=1146;e[\"Omegatitlocyrillic\"]=1148;e[\"Omegatonos\"]=911;e[\"Omicron\"]=927;e[\"Omicrontonos\"]=908;e[\"Omonospace\"]=65327;e[\"Oneroman\"]=8544;e[\"Oogonek\"]=490;e[\"Oogonekmacron\"]=492;e[\"Oopen\"]=390;e[\"Oslash\"]=216;e[\"Oslashacute\"]=510;e[\"Oslashsmall\"]=63480;e[\"Osmall\"]=63343;e[\"Ostrokeacute\"]=510;e[\"Otcyrillic\"]=1150;e[\"Otilde\"]=213;e[\"Otildeacute\"]=7756;e[\"Otildedieresis\"]=7758;e[\"Otildesmall\"]=63477;e[\"P\"]=80;e[\"Pacute\"]=7764;e[\"Pcircle\"]=9413;e[\"Pdotaccent\"]=7766;e[\"Pecyrillic\"]=1055;e[\"Peharmenian\"]=1354;e[\"Pemiddlehookcyrillic\"]=1190;e[\"Phi\"]=934;e[\"Phook\"]=420;e[\"Pi\"]=928;e[\"Piwrarmenian\"]=1363;e[\"Pmonospace\"]=65328;e[\"Psi\"]=936;e[\"Psicyrillic\"]=1136;e[\"Psmall\"]=63344;e[\"Q\"]=81;e[\"Qcircle\"]=9414;e[\"Qmonospace\"]=65329;e[\"Qsmall\"]=63345;e[\"R\"]=82;e[\"Raarmenian\"]=1356;e[\"Racute\"]=340;e[\"Rcaron\"]=344;e[\"Rcedilla\"]=342;e[\"Rcircle\"]=9415;e[\"Rcommaaccent\"]=342;e[\"Rdblgrave\"]=528;e[\"Rdotaccent\"]=7768;e[\"Rdotbelow\"]=7770;e[\"Rdotbelowmacron\"]=7772;e[\"Reharmenian\"]=1360;e[\"Rfraktur\"]=8476;e[\"Rho\"]=929;e[\"Ringsmall\"]=63228;e[\"Rinvertedbreve\"]=530;e[\"Rlinebelow\"]=7774;e[\"Rmonospace\"]=65330;e[\"Rsmall\"]=63346;e[\"Rsmallinverted\"]=641;e[\"Rsmallinvertedsuperior\"]=694;e[\"S\"]=83;e[\"SF010000\"]=9484;e[\"SF020000\"]=9492;e[\"SF030000\"]=9488;e[\"SF040000\"]=9496;e[\"SF050000\"]=9532;e[\"SF060000\"]=9516;e[\"SF070000\"]=9524;e[\"SF080000\"]=9500;e[\"SF090000\"]=9508;e[\"SF100000\"]=9472;e[\"SF110000\"]=9474;e[\"SF190000\"]=9569;e[\"SF200000\"]=9570;e[\"SF210000\"]=9558;e[\"SF220000\"]=9557;e[\"SF230000\"]=9571;e[\"SF240000\"]=9553;e[\"SF250000\"]=9559;e[\"SF260000\"]=9565;e[\"SF270000\"]=9564;e[\"SF280000\"]=9563;e[\"SF360000\"]=9566;e[\"SF370000\"]=9567;e[\"SF380000\"]=9562;e[\"SF390000\"]=9556;e[\"SF400000\"]=9577;e[\"SF410000\"]=9574;e[\"SF420000\"]=9568;e[\"SF430000\"]=9552;e[\"SF440000\"]=9580;e[\"SF450000\"]=9575;e[\"SF460000\"]=9576;e[\"SF470000\"]=9572;e[\"SF480000\"]=9573;e[\"SF490000\"]=9561;e[\"SF500000\"]=9560;e[\"SF510000\"]=9554;e[\"SF520000\"]=9555;e[\"SF530000\"]=9579;e[\"SF540000\"]=9578;e[\"Sacute\"]=346;e[\"Sacutedotaccent\"]=7780;e[\"Sampigreek\"]=992;e[\"Scaron\"]=352;e[\"Scarondotaccent\"]=7782;e[\"Scaronsmall\"]=63229;e[\"Scedilla\"]=350;e[\"Schwa\"]=399;e[\"Schwacyrillic\"]=1240;e[\"Schwadieresiscyrillic\"]=1242;e[\"Scircle\"]=9416;e[\"Scircumflex\"]=348;e[\"Scommaaccent\"]=536;e[\"Sdotaccent\"]=7776;e[\"Sdotbelow\"]=7778;e[\"Sdotbelowdotaccent\"]=7784;e[\"Seharmenian\"]=1357;e[\"Sevenroman\"]=8550;e[\"Shaarmenian\"]=1351;e[\"Shacyrillic\"]=1064;e[\"Shchacyrillic\"]=1065;e[\"Sheicoptic\"]=994;e[\"Shhacyrillic\"]=1210;e[\"Shimacoptic\"]=1004;e[\"Sigma\"]=931;e[\"Sixroman\"]=8549;e[\"Smonospace\"]=65331;e[\"Softsigncyrillic\"]=1068;e[\"Ssmall\"]=63347;e[\"Stigmagreek\"]=986;e[\"T\"]=84;e[\"Tau\"]=932;e[\"Tbar\"]=358;e[\"Tcaron\"]=356;e[\"Tcedilla\"]=354;e[\"Tcircle\"]=9417;e[\"Tcircumflexbelow\"]=7792;e[\"Tcommaaccent\"]=354;e[\"Tdotaccent\"]=7786;e[\"Tdotbelow\"]=7788;e[\"Tecyrillic\"]=1058;e[\"Tedescendercyrillic\"]=1196;e[\"Tenroman\"]=8553;e[\"Tetsecyrillic\"]=1204;e[\"Theta\"]=920;e[\"Thook\"]=428;e[\"Thorn\"]=222;e[\"Thornsmall\"]=63486;e[\"Threeroman\"]=8546;e[\"Tildesmall\"]=63230;e[\"Tiwnarmenian\"]=1359;e[\"Tlinebelow\"]=7790;e[\"Tmonospace\"]=65332;e[\"Toarmenian\"]=1337;e[\"Tonefive\"]=444;e[\"Tonesix\"]=388;e[\"Tonetwo\"]=423;e[\"Tretroflexhook\"]=430;e[\"Tsecyrillic\"]=1062;e[\"Tshecyrillic\"]=1035;e[\"Tsmall\"]=63348;e[\"Twelveroman\"]=8555;e[\"Tworoman\"]=8545;e[\"U\"]=85;e[\"Uacute\"]=218;e[\"Uacutesmall\"]=63482;e[\"Ubreve\"]=364;e[\"Ucaron\"]=467;e[\"Ucircle\"]=9418;e[\"Ucircumflex\"]=219;e[\"Ucircumflexbelow\"]=7798;e[\"Ucircumflexsmall\"]=63483;e[\"Ucyrillic\"]=1059;e[\"Udblacute\"]=368;e[\"Udblgrave\"]=532;e[\"Udieresis\"]=220;e[\"Udieresisacute\"]=471;e[\"Udieresisbelow\"]=7794;e[\"Udieresiscaron\"]=473;e[\"Udieresiscyrillic\"]=1264;e[\"Udieresisgrave\"]=475;e[\"Udieresismacron\"]=469;e[\"Udieresissmall\"]=63484;e[\"Udotbelow\"]=7908;e[\"Ugrave\"]=217;e[\"Ugravesmall\"]=63481;e[\"Uhookabove\"]=7910;e[\"Uhorn\"]=431;e[\"Uhornacute\"]=7912;e[\"Uhorndotbelow\"]=7920;e[\"Uhorngrave\"]=7914;e[\"Uhornhookabove\"]=7916;e[\"Uhorntilde\"]=7918;e[\"Uhungarumlaut\"]=368;e[\"Uhungarumlautcyrillic\"]=1266;e[\"Uinvertedbreve\"]=534;e[\"Ukcyrillic\"]=1144;e[\"Umacron\"]=362;e[\"Umacroncyrillic\"]=1262;e[\"Umacrondieresis\"]=7802;e[\"Umonospace\"]=65333;e[\"Uogonek\"]=370;e[\"Upsilon\"]=933;e[\"Upsilon1\"]=978;e[\"Upsilonacutehooksymbolgreek\"]=979;e[\"Upsilonafrican\"]=433;e[\"Upsilondieresis\"]=939;e[\"Upsilondieresishooksymbolgreek\"]=980;e[\"Upsilonhooksymbol\"]=978;e[\"Upsilontonos\"]=910;e[\"Uring\"]=366;e[\"Ushortcyrillic\"]=1038;e[\"Usmall\"]=63349;e[\"Ustraightcyrillic\"]=1198;e[\"Ustraightstrokecyrillic\"]=1200;e[\"Utilde\"]=360;e[\"Utildeacute\"]=7800;e[\"Utildebelow\"]=7796;e[\"V\"]=86;e[\"Vcircle\"]=9419;e[\"Vdotbelow\"]=7806;e[\"Vecyrillic\"]=1042;e[\"Vewarmenian\"]=1358;e[\"Vhook\"]=434;e[\"Vmonospace\"]=65334;e[\"Voarmenian\"]=1352;e[\"Vsmall\"]=63350;e[\"Vtilde\"]=7804;e[\"W\"]=87;e[\"Wacute\"]=7810;e[\"Wcircle\"]=9420;e[\"Wcircumflex\"]=372;e[\"Wdieresis\"]=7812;e[\"Wdotaccent\"]=7814;e[\"Wdotbelow\"]=7816;e[\"Wgrave\"]=7808;e[\"Wmonospace\"]=65335;e[\"Wsmall\"]=63351;e[\"X\"]=88;e[\"Xcircle\"]=9421;e[\"Xdieresis\"]=7820;e[\"Xdotaccent\"]=7818;e[\"Xeharmenian\"]=1341;e[\"Xi\"]=926;e[\"Xmonospace\"]=65336;e[\"Xsmall\"]=63352;e[\"Y\"]=89;e[\"Yacute\"]=221;e[\"Yacutesmall\"]=63485;e[\"Yatcyrillic\"]=1122;e[\"Ycircle\"]=9422;e[\"Ycircumflex\"]=374;e[\"Ydieresis\"]=376;e[\"Ydieresissmall\"]=63487;e[\"Ydotaccent\"]=7822;e[\"Ydotbelow\"]=7924;e[\"Yericyrillic\"]=1067;e[\"Yerudieresiscyrillic\"]=1272;e[\"Ygrave\"]=7922;e[\"Yhook\"]=435;e[\"Yhookabove\"]=7926;e[\"Yiarmenian\"]=1349;e[\"Yicyrillic\"]=1031;e[\"Yiwnarmenian\"]=1362;e[\"Ymonospace\"]=65337;e[\"Ysmall\"]=63353;e[\"Ytilde\"]=7928;e[\"Yusbigcyrillic\"]=1130;e[\"Yusbigiotifiedcyrillic\"]=1132;e[\"Yuslittlecyrillic\"]=1126;e[\"Yuslittleiotifiedcyrillic\"]=1128;e[\"Z\"]=90;e[\"Zaarmenian\"]=1334;e[\"Zacute\"]=377;e[\"Zcaron\"]=381;e[\"Zcaronsmall\"]=63231;e[\"Zcircle\"]=9423;e[\"Zcircumflex\"]=7824;e[\"Zdot\"]=379;e[\"Zdotaccent\"]=379;e[\"Zdotbelow\"]=7826;e[\"Zecyrillic\"]=1047;e[\"Zedescendercyrillic\"]=1176;e[\"Zedieresiscyrillic\"]=1246;e[\"Zeta\"]=918;e[\"Zhearmenian\"]=1338;e[\"Zhebrevecyrillic\"]=1217;e[\"Zhecyrillic\"]=1046;e[\"Zhedescendercyrillic\"]=1174;e[\"Zhedieresiscyrillic\"]=1244;e[\"Zlinebelow\"]=7828;e[\"Zmonospace\"]=65338;e[\"Zsmall\"]=63354;e[\"Zstroke\"]=437;e[\"a\"]=97;e[\"aabengali\"]=2438;e[\"aacute\"]=225;e[\"aadeva\"]=2310;e[\"aagujarati\"]=2694;e[\"aagurmukhi\"]=2566;e[\"aamatragurmukhi\"]=2622;e[\"aarusquare\"]=13059;e[\"aavowelsignbengali\"]=2494;e[\"aavowelsigndeva\"]=2366;e[\"aavowelsigngujarati\"]=2750;e[\"abbreviationmarkarmenian\"]=1375;e[\"abbreviationsigndeva\"]=2416;e[\"abengali\"]=2437;e[\"abopomofo\"]=12570;e[\"abreve\"]=259;e[\"abreveacute\"]=7855;e[\"abrevecyrillic\"]=1233;e[\"abrevedotbelow\"]=7863;e[\"abrevegrave\"]=7857;e[\"abrevehookabove\"]=7859;e[\"abrevetilde\"]=7861;e[\"acaron\"]=462;e[\"acircle\"]=9424;e[\"acircumflex\"]=226;e[\"acircumflexacute\"]=7845;e[\"acircumflexdotbelow\"]=7853;e[\"acircumflexgrave\"]=7847;e[\"acircumflexhookabove\"]=7849;e[\"acircumflextilde\"]=7851;e[\"acute\"]=180;e[\"acutebelowcmb\"]=791;e[\"acutecmb\"]=769;e[\"acutecomb\"]=769;e[\"acutedeva\"]=2388;e[\"acutelowmod\"]=719;e[\"acutetonecmb\"]=833;e[\"acyrillic\"]=1072;e[\"adblgrave\"]=513;e[\"addakgurmukhi\"]=2673;e[\"adeva\"]=2309;e[\"adieresis\"]=228;e[\"adieresiscyrillic\"]=1235;e[\"adieresismacron\"]=479;e[\"adotbelow\"]=7841;e[\"adotmacron\"]=481;e[\"ae\"]=230;e[\"aeacute\"]=509;e[\"aekorean\"]=12624;e[\"aemacron\"]=483;e[\"afii00208\"]=8213;e[\"afii08941\"]=8356;e[\"afii10017\"]=1040;e[\"afii10018\"]=1041;e[\"afii10019\"]=1042;e[\"afii10020\"]=1043;e[\"afii10021\"]=1044;e[\"afii10022\"]=1045;e[\"afii10023\"]=1025;e[\"afii10024\"]=1046;e[\"afii10025\"]=1047;e[\"afii10026\"]=1048;e[\"afii10027\"]=1049;e[\"afii10028\"]=1050;e[\"afii10029\"]=1051;e[\"afii10030\"]=1052;e[\"afii10031\"]=1053;e[\"afii10032\"]=1054;e[\"afii10033\"]=1055;e[\"afii10034\"]=1056;e[\"afii10035\"]=1057;e[\"afii10036\"]=1058;e[\"afii10037\"]=1059;e[\"afii10038\"]=1060;e[\"afii10039\"]=1061;e[\"afii10040\"]=1062;e[\"afii10041\"]=1063;e[\"afii10042\"]=1064;e[\"afii10043\"]=1065;e[\"afii10044\"]=1066;e[\"afii10045\"]=1067;e[\"afii10046\"]=1068;e[\"afii10047\"]=1069;e[\"afii10048\"]=1070;e[\"afii10049\"]=1071;e[\"afii10050\"]=1168;e[\"afii10051\"]=1026;e[\"afii10052\"]=1027;e[\"afii10053\"]=1028;e[\"afii10054\"]=1029;e[\"afii10055\"]=1030;e[\"afii10056\"]=1031;e[\"afii10057\"]=1032;e[\"afii10058\"]=1033;e[\"afii10059\"]=1034;e[\"afii10060\"]=1035;e[\"afii10061\"]=1036;e[\"afii10062\"]=1038;e[\"afii10063\"]=63172;e[\"afii10064\"]=63173;e[\"afii10065\"]=1072;e[\"afii10066\"]=1073;e[\"afii10067\"]=1074;e[\"afii10068\"]=1075;e[\"afii10069\"]=1076;e[\"afii10070\"]=1077;e[\"afii10071\"]=1105;e[\"afii10072\"]=1078;e[\"afii10073\"]=1079;e[\"afii10074\"]=1080;e[\"afii10075\"]=1081;e[\"afii10076\"]=1082;e[\"afii10077\"]=1083;e[\"afii10078\"]=1084;e[\"afii10079\"]=1085;e[\"afii10080\"]=1086;e[\"afii10081\"]=1087;e[\"afii10082\"]=1088;e[\"afii10083\"]=1089;e[\"afii10084\"]=1090;e[\"afii10085\"]=1091;e[\"afii10086\"]=1092;e[\"afii10087\"]=1093;e[\"afii10088\"]=1094;e[\"afii10089\"]=1095;e[\"afii10090\"]=1096;e[\"afii10091\"]=1097;e[\"afii10092\"]=1098;e[\"afii10093\"]=1099;e[\"afii10094\"]=1100;e[\"afii10095\"]=1101;e[\"afii10096\"]=1102;e[\"afii10097\"]=1103;e[\"afii10098\"]=1169;e[\"afii10099\"]=1106;e[\"afii10100\"]=1107;e[\"afii10101\"]=1108;e[\"afii10102\"]=1109;e[\"afii10103\"]=1110;e[\"afii10104\"]=1111;e[\"afii10105\"]=1112;e[\"afii10106\"]=1113;e[\"afii10107\"]=1114;e[\"afii10108\"]=1115;e[\"afii10109\"]=1116;e[\"afii10110\"]=1118;e[\"afii10145\"]=1039;e[\"afii10146\"]=1122;e[\"afii10147\"]=1138;e[\"afii10148\"]=1140;e[\"afii10192\"]=63174;e[\"afii10193\"]=1119;e[\"afii10194\"]=1123;e[\"afii10195\"]=1139;e[\"afii10196\"]=1141;e[\"afii10831\"]=63175;e[\"afii10832\"]=63176;e[\"afii10846\"]=1241;e[\"afii299\"]=8206;e[\"afii300\"]=8207;e[\"afii301\"]=8205;e[\"afii57381\"]=1642;e[\"afii57388\"]=1548;e[\"afii57392\"]=1632;e[\"afii57393\"]=1633;e[\"afii57394\"]=1634;e[\"afii57395\"]=1635;e[\"afii57396\"]=1636;e[\"afii57397\"]=1637;e[\"afii57398\"]=1638;e[\"afii57399\"]=1639;e[\"afii57400\"]=1640;e[\"afii57401\"]=1641;e[\"afii57403\"]=1563;e[\"afii57407\"]=1567;e[\"afii57409\"]=1569;e[\"afii57410\"]=1570;e[\"afii57411\"]=1571;e[\"afii57412\"]=1572;e[\"afii57413\"]=1573;e[\"afii57414\"]=1574;e[\"afii57415\"]=1575;e[\"afii57416\"]=1576;e[\"afii57417\"]=1577;e[\"afii57418\"]=1578;e[\"afii57419\"]=1579;e[\"afii57420\"]=1580;e[\"afii57421\"]=1581;e[\"afii57422\"]=1582;e[\"afii57423\"]=1583;e[\"afii57424\"]=1584;e[\"afii57425\"]=1585;e[\"afii57426\"]=1586;e[\"afii57427\"]=1587;e[\"afii57428\"]=1588;e[\"afii57429\"]=1589;e[\"afii57430\"]=1590;e[\"afii57431\"]=1591;e[\"afii57432\"]=1592;e[\"afii57433\"]=1593;e[\"afii57434\"]=1594;e[\"afii57440\"]=1600;e[\"afii57441\"]=1601;e[\"afii57442\"]=1602;e[\"afii57443\"]=1603;e[\"afii57444\"]=1604;e[\"afii57445\"]=1605;e[\"afii57446\"]=1606;e[\"afii57448\"]=1608;e[\"afii57449\"]=1609;e[\"afii57450\"]=1610;e[\"afii57451\"]=1611;e[\"afii57452\"]=1612;e[\"afii57453\"]=1613;e[\"afii57454\"]=1614;e[\"afii57455\"]=1615;e[\"afii57456\"]=1616;e[\"afii57457\"]=1617;e[\"afii57458\"]=1618;e[\"afii57470\"]=1607;e[\"afii57505\"]=1700;e[\"afii57506\"]=1662;e[\"afii57507\"]=1670;e[\"afii57508\"]=1688;e[\"afii57509\"]=1711;e[\"afii57511\"]=1657;e[\"afii57512\"]=1672;e[\"afii57513\"]=1681;e[\"afii57514\"]=1722;e[\"afii57519\"]=1746;e[\"afii57534\"]=1749;e[\"afii57636\"]=8362;e[\"afii57645\"]=1470;e[\"afii57658\"]=1475;e[\"afii57664\"]=1488;e[\"afii57665\"]=1489;e[\"afii57666\"]=1490;e[\"afii57667\"]=1491;e[\"afii57668\"]=1492;e[\"afii57669\"]=1493;e[\"afii57670\"]=1494;e[\"afii57671\"]=1495;e[\"afii57672\"]=1496;e[\"afii57673\"]=1497;e[\"afii57674\"]=1498;e[\"afii57675\"]=1499;e[\"afii57676\"]=1500;e[\"afii57677\"]=1501;e[\"afii57678\"]=1502;e[\"afii57679\"]=1503;e[\"afii57680\"]=1504;e[\"afii57681\"]=1505;e[\"afii57682\"]=1506;e[\"afii57683\"]=1507;e[\"afii57684\"]=1508;e[\"afii57685\"]=1509;e[\"afii57686\"]=1510;e[\"afii57687\"]=1511;e[\"afii57688\"]=1512;e[\"afii57689\"]=1513;e[\"afii57690\"]=1514;e[\"afii57694\"]=64298;e[\"afii57695\"]=64299;e[\"afii57700\"]=64331;e[\"afii57705\"]=64287;e[\"afii57716\"]=1520;e[\"afii57717\"]=1521;e[\"afii57718\"]=1522;e[\"afii57723\"]=64309;e[\"afii57793\"]=1460;e[\"afii57794\"]=1461;e[\"afii57795\"]=1462;e[\"afii57796\"]=1467;e[\"afii57797\"]=1464;e[\"afii57798\"]=1463;e[\"afii57799\"]=1456;e[\"afii57800\"]=1458;e[\"afii57801\"]=1457;e[\"afii57802\"]=1459;e[\"afii57803\"]=1474;e[\"afii57804\"]=1473;e[\"afii57806\"]=1465;e[\"afii57807\"]=1468;e[\"afii57839\"]=1469;e[\"afii57841\"]=1471;e[\"afii57842\"]=1472;e[\"afii57929\"]=700;e[\"afii61248\"]=8453;e[\"afii61289\"]=8467;e[\"afii61352\"]=8470;e[\"afii61573\"]=8236;e[\"afii61574\"]=8237;e[\"afii61575\"]=8238;e[\"afii61664\"]=8204;e[\"afii63167\"]=1645;e[\"afii64937\"]=701;e[\"agrave\"]=224;e[\"agujarati\"]=2693;e[\"agurmukhi\"]=2565;e[\"ahiragana\"]=12354;e[\"ahookabove\"]=7843;e[\"aibengali\"]=2448;e[\"aibopomofo\"]=12574;e[\"aideva\"]=2320;e[\"aiecyrillic\"]=1237;e[\"aigujarati\"]=2704;e[\"aigurmukhi\"]=2576;e[\"aimatragurmukhi\"]=2632;e[\"ainarabic\"]=1593;e[\"ainfinalarabic\"]=65226;e[\"aininitialarabic\"]=65227;e[\"ainmedialarabic\"]=65228;e[\"ainvertedbreve\"]=515;e[\"aivowelsignbengali\"]=2504;e[\"aivowelsigndeva\"]=2376;e[\"aivowelsigngujarati\"]=2760;e[\"akatakana\"]=12450;e[\"akatakanahalfwidth\"]=65393;e[\"akorean\"]=12623;e[\"alef\"]=1488;e[\"alefarabic\"]=1575;e[\"alefdageshhebrew\"]=64304;e[\"aleffinalarabic\"]=65166;e[\"alefhamzaabovearabic\"]=1571;e[\"alefhamzaabovefinalarabic\"]=65156;e[\"alefhamzabelowarabic\"]=1573;e[\"alefhamzabelowfinalarabic\"]=65160;e[\"alefhebrew\"]=1488;e[\"aleflamedhebrew\"]=64335;e[\"alefmaddaabovearabic\"]=1570;e[\"alefmaddaabovefinalarabic\"]=65154;e[\"alefmaksuraarabic\"]=1609;e[\"alefmaksurafinalarabic\"]=65264;e[\"alefmaksurainitialarabic\"]=65267;e[\"alefmaksuramedialarabic\"]=65268;e[\"alefpatahhebrew\"]=64302;e[\"alefqamatshebrew\"]=64303;e[\"aleph\"]=8501;e[\"allequal\"]=8780;e[\"alpha\"]=945;e[\"alphatonos\"]=940;e[\"amacron\"]=257;e[\"amonospace\"]=65345;e[\"ampersand\"]=38;e[\"ampersandmonospace\"]=65286;e[\"ampersandsmall\"]=63270;e[\"amsquare\"]=13250;e[\"anbopomofo\"]=12578;e[\"angbopomofo\"]=12580;e[\"angbracketleft\"]=12296;e[\"angbracketright\"]=12297;e[\"angkhankhuthai\"]=3674;e[\"angle\"]=8736;e[\"anglebracketleft\"]=12296;e[\"anglebracketleftvertical\"]=65087;e[\"anglebracketright\"]=12297;e[\"anglebracketrightvertical\"]=65088;e[\"angleleft\"]=9001;e[\"angleright\"]=9002;e[\"angstrom\"]=8491;e[\"anoteleia\"]=903;e[\"anudattadeva\"]=2386;e[\"anusvarabengali\"]=2434;e[\"anusvaradeva\"]=2306;e[\"anusvaragujarati\"]=2690;e[\"aogonek\"]=261;e[\"apaatosquare\"]=13056;e[\"aparen\"]=9372;e[\"apostrophearmenian\"]=1370;e[\"apostrophemod\"]=700;e[\"apple\"]=63743;e[\"approaches\"]=8784;e[\"approxequal\"]=8776;e[\"approxequalorimage\"]=8786;e[\"approximatelyequal\"]=8773;e[\"araeaekorean\"]=12686;e[\"araeakorean\"]=12685;e[\"arc\"]=8978;e[\"arighthalfring\"]=7834;e[\"aring\"]=229;e[\"aringacute\"]=507;e[\"aringbelow\"]=7681;e[\"arrowboth\"]=8596;e[\"arrowdashdown\"]=8675;e[\"arrowdashleft\"]=8672;e[\"arrowdashright\"]=8674;e[\"arrowdashup\"]=8673;e[\"arrowdblboth\"]=8660;e[\"arrowdbldown\"]=8659;e[\"arrowdblleft\"]=8656;e[\"arrowdblright\"]=8658;e[\"arrowdblup\"]=8657;e[\"arrowdown\"]=8595;e[\"arrowdownleft\"]=8601;e[\"arrowdownright\"]=8600;e[\"arrowdownwhite\"]=8681;e[\"arrowheaddownmod\"]=709;e[\"arrowheadleftmod\"]=706;e[\"arrowheadrightmod\"]=707;e[\"arrowheadupmod\"]=708;e[\"arrowhorizex\"]=63719;e[\"arrowleft\"]=8592;e[\"arrowleftdbl\"]=8656;e[\"arrowleftdblstroke\"]=8653;e[\"arrowleftoverright\"]=8646;e[\"arrowleftwhite\"]=8678;e[\"arrowright\"]=8594;e[\"arrowrightdblstroke\"]=8655;e[\"arrowrightheavy\"]=10142;e[\"arrowrightoverleft\"]=8644;e[\"arrowrightwhite\"]=8680;e[\"arrowtableft\"]=8676;e[\"arrowtabright\"]=8677;e[\"arrowup\"]=8593;e[\"arrowupdn\"]=8597;e[\"arrowupdnbse\"]=8616;e[\"arrowupdownbase\"]=8616;e[\"arrowupleft\"]=8598;e[\"arrowupleftofdown\"]=8645;e[\"arrowupright\"]=8599;e[\"arrowupwhite\"]=8679;e[\"arrowvertex\"]=63718;e[\"asciicircum\"]=94;e[\"asciicircummonospace\"]=65342;e[\"asciitilde\"]=126;e[\"asciitildemonospace\"]=65374;e[\"ascript\"]=593;e[\"ascriptturned\"]=594;e[\"asmallhiragana\"]=12353;e[\"asmallkatakana\"]=12449;e[\"asmallkatakanahalfwidth\"]=65383;e[\"asterisk\"]=42;e[\"asteriskaltonearabic\"]=1645;e[\"asteriskarabic\"]=1645;e[\"asteriskmath\"]=8727;e[\"asteriskmonospace\"]=65290;e[\"asterisksmall\"]=65121;e[\"asterism\"]=8258;e[\"asuperior\"]=63209;e[\"asymptoticallyequal\"]=8771;e[\"at\"]=64;e[\"atilde\"]=227;e[\"atmonospace\"]=65312;e[\"atsmall\"]=65131;e[\"aturned\"]=592;e[\"aubengali\"]=2452;e[\"aubopomofo\"]=12576;e[\"audeva\"]=2324;e[\"augujarati\"]=2708;e[\"augurmukhi\"]=2580;e[\"aulengthmarkbengali\"]=2519;e[\"aumatragurmukhi\"]=2636;e[\"auvowelsignbengali\"]=2508;e[\"auvowelsigndeva\"]=2380;e[\"auvowelsigngujarati\"]=2764;e[\"avagrahadeva\"]=2365;e[\"aybarmenian\"]=1377;e[\"ayin\"]=1506;e[\"ayinaltonehebrew\"]=64288;e[\"ayinhebrew\"]=1506;e[\"b\"]=98;e[\"babengali\"]=2476;e[\"backslash\"]=92;e[\"backslashmonospace\"]=65340;e[\"badeva\"]=2348;e[\"bagujarati\"]=2732;e[\"bagurmukhi\"]=2604;e[\"bahiragana\"]=12400;e[\"bahtthai\"]=3647;e[\"bakatakana\"]=12496;e[\"bar\"]=124;e[\"barmonospace\"]=65372;e[\"bbopomofo\"]=12549;e[\"bcircle\"]=9425;e[\"bdotaccent\"]=7683;e[\"bdotbelow\"]=7685;e[\"beamedsixteenthnotes\"]=9836;e[\"because\"]=8757;e[\"becyrillic\"]=1073;e[\"beharabic\"]=1576;e[\"behfinalarabic\"]=65168;e[\"behinitialarabic\"]=65169;e[\"behiragana\"]=12409;e[\"behmedialarabic\"]=65170;e[\"behmeeminitialarabic\"]=64671;e[\"behmeemisolatedarabic\"]=64520;e[\"behnoonfinalarabic\"]=64621;e[\"bekatakana\"]=12505;e[\"benarmenian\"]=1378;e[\"bet\"]=1489;e[\"beta\"]=946;e[\"betasymbolgreek\"]=976;e[\"betdagesh\"]=64305;e[\"betdageshhebrew\"]=64305;e[\"bethebrew\"]=1489;e[\"betrafehebrew\"]=64332;e[\"bhabengali\"]=2477;e[\"bhadeva\"]=2349;e[\"bhagujarati\"]=2733;e[\"bhagurmukhi\"]=2605;e[\"bhook\"]=595;e[\"bihiragana\"]=12403;e[\"bikatakana\"]=12499;e[\"bilabialclick\"]=664;e[\"bindigurmukhi\"]=2562;e[\"birusquare\"]=13105;e[\"blackcircle\"]=9679;e[\"blackdiamond\"]=9670;e[\"blackdownpointingtriangle\"]=9660;e[\"blackleftpointingpointer\"]=9668;e[\"blackleftpointingtriangle\"]=9664;e[\"blacklenticularbracketleft\"]=12304;e[\"blacklenticularbracketleftvertical\"]=65083;e[\"blacklenticularbracketright\"]=12305;e[\"blacklenticularbracketrightvertical\"]=65084;e[\"blacklowerlefttriangle\"]=9699;e[\"blacklowerrighttriangle\"]=9698;e[\"blackrectangle\"]=9644;e[\"blackrightpointingpointer\"]=9658;e[\"blackrightpointingtriangle\"]=9654;e[\"blacksmallsquare\"]=9642;e[\"blacksmilingface\"]=9787;e[\"blacksquare\"]=9632;e[\"blackstar\"]=9733;e[\"blackupperlefttriangle\"]=9700;e[\"blackupperrighttriangle\"]=9701;e[\"blackuppointingsmalltriangle\"]=9652;e[\"blackuppointingtriangle\"]=9650;e[\"blank\"]=9251;e[\"blinebelow\"]=7687;e[\"block\"]=9608;e[\"bmonospace\"]=65346;e[\"bobaimaithai\"]=3610;e[\"bohiragana\"]=12412;e[\"bokatakana\"]=12508;e[\"bparen\"]=9373;e[\"bqsquare\"]=13251;e[\"braceex\"]=63732;e[\"braceleft\"]=123;e[\"braceleftbt\"]=63731;e[\"braceleftmid\"]=63730;e[\"braceleftmonospace\"]=65371;e[\"braceleftsmall\"]=65115;e[\"bracelefttp\"]=63729;e[\"braceleftvertical\"]=65079;e[\"braceright\"]=125;e[\"bracerightbt\"]=63742;e[\"bracerightmid\"]=63741;e[\"bracerightmonospace\"]=65373;e[\"bracerightsmall\"]=65116;e[\"bracerighttp\"]=63740;e[\"bracerightvertical\"]=65080;e[\"bracketleft\"]=91;e[\"bracketleftbt\"]=63728;e[\"bracketleftex\"]=63727;e[\"bracketleftmonospace\"]=65339;e[\"bracketlefttp\"]=63726;e[\"bracketright\"]=93;e[\"bracketrightbt\"]=63739;e[\"bracketrightex\"]=63738;e[\"bracketrightmonospace\"]=65341;e[\"bracketrighttp\"]=63737;e[\"breve\"]=728;e[\"brevebelowcmb\"]=814;e[\"brevecmb\"]=774;e[\"breveinvertedbelowcmb\"]=815;e[\"breveinvertedcmb\"]=785;e[\"breveinverteddoublecmb\"]=865;e[\"bridgebelowcmb\"]=810;e[\"bridgeinvertedbelowcmb\"]=826;e[\"brokenbar\"]=166;e[\"bstroke\"]=384;e[\"bsuperior\"]=63210;e[\"btopbar\"]=387;e[\"buhiragana\"]=12406;e[\"bukatakana\"]=12502;e[\"bullet\"]=8226;e[\"bulletinverse\"]=9688;e[\"bulletoperator\"]=8729;e[\"bullseye\"]=9678;e[\"c\"]=99;e[\"caarmenian\"]=1390;e[\"cabengali\"]=2458;e[\"cacute\"]=263;e[\"cadeva\"]=2330;e[\"cagujarati\"]=2714;e[\"cagurmukhi\"]=2586;e[\"calsquare\"]=13192;e[\"candrabindubengali\"]=2433;e[\"candrabinducmb\"]=784;e[\"candrabindudeva\"]=2305;e[\"candrabindugujarati\"]=2689;e[\"capslock\"]=8682;e[\"careof\"]=8453;e[\"caron\"]=711;e[\"caronbelowcmb\"]=812;e[\"caroncmb\"]=780;e[\"carriagereturn\"]=8629;e[\"cbopomofo\"]=12568;e[\"ccaron\"]=269;e[\"ccedilla\"]=231;e[\"ccedillaacute\"]=7689;e[\"ccircle\"]=9426;e[\"ccircumflex\"]=265;e[\"ccurl\"]=597;e[\"cdot\"]=267;e[\"cdotaccent\"]=267;e[\"cdsquare\"]=13253;e[\"cedilla\"]=184;e[\"cedillacmb\"]=807;e[\"cent\"]=162;e[\"centigrade\"]=8451;e[\"centinferior\"]=63199;e[\"centmonospace\"]=65504;e[\"centoldstyle\"]=63394;e[\"centsuperior\"]=63200;e[\"chaarmenian\"]=1401;e[\"chabengali\"]=2459;e[\"chadeva\"]=2331;e[\"chagujarati\"]=2715;e[\"chagurmukhi\"]=2587;e[\"chbopomofo\"]=12564;e[\"cheabkhasiancyrillic\"]=1213;e[\"checkmark\"]=10003;e[\"checyrillic\"]=1095;e[\"chedescenderabkhasiancyrillic\"]=1215;e[\"chedescendercyrillic\"]=1207;e[\"chedieresiscyrillic\"]=1269;e[\"cheharmenian\"]=1395;e[\"chekhakassiancyrillic\"]=1228;e[\"cheverticalstrokecyrillic\"]=1209;e[\"chi\"]=967;e[\"chieuchacirclekorean\"]=12919;e[\"chieuchaparenkorean\"]=12823;e[\"chieuchcirclekorean\"]=12905;e[\"chieuchkorean\"]=12618;e[\"chieuchparenkorean\"]=12809;e[\"chochangthai\"]=3594;e[\"chochanthai\"]=3592;e[\"chochingthai\"]=3593;e[\"chochoethai\"]=3596;e[\"chook\"]=392;e[\"cieucacirclekorean\"]=12918;e[\"cieucaparenkorean\"]=12822;e[\"cieuccirclekorean\"]=12904;e[\"cieuckorean\"]=12616;e[\"cieucparenkorean\"]=12808;e[\"cieucuparenkorean\"]=12828;e[\"circle\"]=9675;e[\"circlecopyrt\"]=169;e[\"circlemultiply\"]=8855;e[\"circleot\"]=8857;e[\"circleplus\"]=8853;e[\"circlepostalmark\"]=12342;e[\"circlewithlefthalfblack\"]=9680;e[\"circlewithrighthalfblack\"]=9681;e[\"circumflex\"]=710;e[\"circumflexbelowcmb\"]=813;e[\"circumflexcmb\"]=770;e[\"clear\"]=8999;e[\"clickalveolar\"]=450;e[\"clickdental\"]=448;e[\"clicklateral\"]=449;e[\"clickretroflex\"]=451;e[\"club\"]=9827;e[\"clubsuitblack\"]=9827;e[\"clubsuitwhite\"]=9831;e[\"cmcubedsquare\"]=13220;e[\"cmonospace\"]=65347;e[\"cmsquaredsquare\"]=13216;e[\"coarmenian\"]=1409;e[\"colon\"]=58;e[\"colonmonetary\"]=8353;e[\"colonmonospace\"]=65306;e[\"colonsign\"]=8353;e[\"colonsmall\"]=65109;e[\"colontriangularhalfmod\"]=721;e[\"colontriangularmod\"]=720;e[\"comma\"]=44;e[\"commaabovecmb\"]=787;e[\"commaaboverightcmb\"]=789;e[\"commaaccent\"]=63171;e[\"commaarabic\"]=1548;e[\"commaarmenian\"]=1373;e[\"commainferior\"]=63201;e[\"commamonospace\"]=65292;e[\"commareversedabovecmb\"]=788;e[\"commareversedmod\"]=701;e[\"commasmall\"]=65104;e[\"commasuperior\"]=63202;e[\"commaturnedabovecmb\"]=786;e[\"commaturnedmod\"]=699;e[\"compass\"]=9788;e[\"congruent\"]=8773;e[\"contourintegral\"]=8750;e[\"control\"]=8963;e[\"controlACK\"]=6;e[\"controlBEL\"]=7;e[\"controlBS\"]=8;e[\"controlCAN\"]=24;e[\"controlCR\"]=13;e[\"controlDC1\"]=17;e[\"controlDC2\"]=18;e[\"controlDC3\"]=19;e[\"controlDC4\"]=20;e[\"controlDEL\"]=127;e[\"controlDLE\"]=16;e[\"controlEM\"]=25;e[\"controlENQ\"]=5;e[\"controlEOT\"]=4;e[\"controlESC\"]=27;e[\"controlETB\"]=23;e[\"controlETX\"]=3;e[\"controlFF\"]=12;e[\"controlFS\"]=28;e[\"controlGS\"]=29;e[\"controlHT\"]=9;e[\"controlLF\"]=10;e[\"controlNAK\"]=21;e[\"controlNULL\"]=0;e[\"controlRS\"]=30;e[\"controlSI\"]=15;e[\"controlSO\"]=14;e[\"controlSOT\"]=2;e[\"controlSTX\"]=1;e[\"controlSUB\"]=26;e[\"controlSYN\"]=22;e[\"controlUS\"]=31;e[\"controlVT\"]=11;e[\"copyright\"]=169;e[\"copyrightsans\"]=63721;e[\"copyrightserif\"]=63193;e[\"cornerbracketleft\"]=12300;e[\"cornerbracketlefthalfwidth\"]=65378;e[\"cornerbracketleftvertical\"]=65089;e[\"cornerbracketright\"]=12301;e[\"cornerbracketrighthalfwidth\"]=65379;e[\"cornerbracketrightvertical\"]=65090;e[\"corporationsquare\"]=13183;e[\"cosquare\"]=13255;e[\"coverkgsquare\"]=13254;e[\"cparen\"]=9374;e[\"cruzeiro\"]=8354;e[\"cstretched\"]=663;e[\"curlyand\"]=8911;e[\"curlyor\"]=8910;e[\"currency\"]=164;e[\"cyrBreve\"]=63185;e[\"cyrFlex\"]=63186;e[\"cyrbreve\"]=63188;e[\"cyrflex\"]=63189;e[\"d\"]=100;e[\"daarmenian\"]=1380;e[\"dabengali\"]=2470;e[\"dadarabic\"]=1590;e[\"dadeva\"]=2342;e[\"dadfinalarabic\"]=65214;e[\"dadinitialarabic\"]=65215;e[\"dadmedialarabic\"]=65216;e[\"dagesh\"]=1468;e[\"dageshhebrew\"]=1468;e[\"dagger\"]=8224;e[\"daggerdbl\"]=8225;e[\"dagujarati\"]=2726;e[\"dagurmukhi\"]=2598;e[\"dahiragana\"]=12384;e[\"dakatakana\"]=12480;e[\"dalarabic\"]=1583;e[\"dalet\"]=1491;e[\"daletdagesh\"]=64307;e[\"daletdageshhebrew\"]=64307;e[\"dalethebrew\"]=1491;e[\"dalfinalarabic\"]=65194;e[\"dammaarabic\"]=1615;e[\"dammalowarabic\"]=1615;e[\"dammatanaltonearabic\"]=1612;e[\"dammatanarabic\"]=1612;e[\"danda\"]=2404;e[\"dargahebrew\"]=1447;e[\"dargalefthebrew\"]=1447;e[\"dasiapneumatacyrilliccmb\"]=1157;e[\"dblGrave\"]=63187;e[\"dblanglebracketleft\"]=12298;e[\"dblanglebracketleftvertical\"]=65085;e[\"dblanglebracketright\"]=12299;e[\"dblanglebracketrightvertical\"]=65086;e[\"dblarchinvertedbelowcmb\"]=811;e[\"dblarrowleft\"]=8660;e[\"dblarrowright\"]=8658;e[\"dbldanda\"]=2405;e[\"dblgrave\"]=63190;e[\"dblgravecmb\"]=783;e[\"dblintegral\"]=8748;e[\"dbllowline\"]=8215;e[\"dbllowlinecmb\"]=819;e[\"dbloverlinecmb\"]=831;e[\"dblprimemod\"]=698;e[\"dblverticalbar\"]=8214;e[\"dblverticallineabovecmb\"]=782;e[\"dbopomofo\"]=12553;e[\"dbsquare\"]=13256;e[\"dcaron\"]=271;e[\"dcedilla\"]=7697;e[\"dcircle\"]=9427;e[\"dcircumflexbelow\"]=7699;e[\"dcroat\"]=273;e[\"ddabengali\"]=2465;e[\"ddadeva\"]=2337;e[\"ddagujarati\"]=2721;e[\"ddagurmukhi\"]=2593;e[\"ddalarabic\"]=1672;e[\"ddalfinalarabic\"]=64393;e[\"dddhadeva\"]=2396;e[\"ddhabengali\"]=2466;e[\"ddhadeva\"]=2338;e[\"ddhagujarati\"]=2722;e[\"ddhagurmukhi\"]=2594;e[\"ddotaccent\"]=7691;e[\"ddotbelow\"]=7693;e[\"decimalseparatorarabic\"]=1643;e[\"decimalseparatorpersian\"]=1643;e[\"decyrillic\"]=1076;e[\"degree\"]=176;e[\"dehihebrew\"]=1453;e[\"dehiragana\"]=12391;e[\"deicoptic\"]=1007;e[\"dekatakana\"]=12487;e[\"deleteleft\"]=9003;e[\"deleteright\"]=8998;e[\"delta\"]=948;e[\"deltaturned\"]=397;e[\"denominatorminusonenumeratorbengali\"]=2552;e[\"dezh\"]=676;e[\"dhabengali\"]=2471;e[\"dhadeva\"]=2343;e[\"dhagujarati\"]=2727;e[\"dhagurmukhi\"]=2599;e[\"dhook\"]=599;e[\"dialytikatonos\"]=901;e[\"dialytikatonoscmb\"]=836;e[\"diamond\"]=9830;e[\"diamondsuitwhite\"]=9826;e[\"dieresis\"]=168;e[\"dieresisacute\"]=63191;e[\"dieresisbelowcmb\"]=804;e[\"dieresiscmb\"]=776;e[\"dieresisgrave\"]=63192;e[\"dieresistonos\"]=901;e[\"dihiragana\"]=12386;e[\"dikatakana\"]=12482;e[\"dittomark\"]=12291;e[\"divide\"]=247;e[\"divides\"]=8739;e[\"divisionslash\"]=8725;e[\"djecyrillic\"]=1106;e[\"dkshade\"]=9619;e[\"dlinebelow\"]=7695;e[\"dlsquare\"]=13207;e[\"dmacron\"]=273;e[\"dmonospace\"]=65348;e[\"dnblock\"]=9604;e[\"dochadathai\"]=3598;e[\"dodekthai\"]=3604;e[\"dohiragana\"]=12393;e[\"dokatakana\"]=12489;e[\"dollar\"]=36;e[\"dollarinferior\"]=63203;e[\"dollarmonospace\"]=65284;e[\"dollaroldstyle\"]=63268;e[\"dollarsmall\"]=65129;e[\"dollarsuperior\"]=63204;e[\"dong\"]=8363;e[\"dorusquare\"]=13094;e[\"dotaccent\"]=729;e[\"dotaccentcmb\"]=775;e[\"dotbelowcmb\"]=803;e[\"dotbelowcomb\"]=803;e[\"dotkatakana\"]=12539;e[\"dotlessi\"]=305;e[\"dotlessj\"]=63166;e[\"dotlessjstrokehook\"]=644;e[\"dotmath\"]=8901;e[\"dottedcircle\"]=9676;e[\"doubleyodpatah\"]=64287;e[\"doubleyodpatahhebrew\"]=64287;e[\"downtackbelowcmb\"]=798;e[\"downtackmod\"]=725;e[\"dparen\"]=9375;e[\"dsuperior\"]=63211;e[\"dtail\"]=598;e[\"dtopbar\"]=396;e[\"duhiragana\"]=12389;e[\"dukatakana\"]=12485;e[\"dz\"]=499;e[\"dzaltone\"]=675;e[\"dzcaron\"]=454;e[\"dzcurl\"]=677;e[\"dzeabkhasiancyrillic\"]=1249;e[\"dzecyrillic\"]=1109;e[\"dzhecyrillic\"]=1119;e[\"e\"]=101;e[\"eacute\"]=233;e[\"earth\"]=9793;e[\"ebengali\"]=2447;e[\"ebopomofo\"]=12572;e[\"ebreve\"]=277;e[\"ecandradeva\"]=2317;e[\"ecandragujarati\"]=2701;e[\"ecandravowelsigndeva\"]=2373;e[\"ecandravowelsigngujarati\"]=2757;e[\"ecaron\"]=283;e[\"ecedillabreve\"]=7709;e[\"echarmenian\"]=1381;e[\"echyiwnarmenian\"]=1415;e[\"ecircle\"]=9428;e[\"ecircumflex\"]=234;e[\"ecircumflexacute\"]=7871;e[\"ecircumflexbelow\"]=7705;e[\"ecircumflexdotbelow\"]=7879;e[\"ecircumflexgrave\"]=7873;e[\"ecircumflexhookabove\"]=7875;e[\"ecircumflextilde\"]=7877;e[\"ecyrillic\"]=1108;e[\"edblgrave\"]=517;e[\"edeva\"]=2319;e[\"edieresis\"]=235;e[\"edot\"]=279;e[\"edotaccent\"]=279;e[\"edotbelow\"]=7865;e[\"eegurmukhi\"]=2575;e[\"eematragurmukhi\"]=2631;e[\"efcyrillic\"]=1092;e[\"egrave\"]=232;e[\"egujarati\"]=2703;e[\"eharmenian\"]=1383;e[\"ehbopomofo\"]=12573;e[\"ehiragana\"]=12360;e[\"ehookabove\"]=7867;e[\"eibopomofo\"]=12575;e[\"eight\"]=56;e[\"eightarabic\"]=1640;e[\"eightbengali\"]=2542;e[\"eightcircle\"]=9319;e[\"eightcircleinversesansserif\"]=10129;e[\"eightdeva\"]=2414;e[\"eighteencircle\"]=9329;e[\"eighteenparen\"]=9349;e[\"eighteenperiod\"]=9369;e[\"eightgujarati\"]=2798;e[\"eightgurmukhi\"]=2670;e[\"eighthackarabic\"]=1640;e[\"eighthangzhou\"]=12328;e[\"eighthnotebeamed\"]=9835;e[\"eightideographicparen\"]=12839;e[\"eightinferior\"]=8328;e[\"eightmonospace\"]=65304;e[\"eightoldstyle\"]=63288;e[\"eightparen\"]=9339;e[\"eightperiod\"]=9359;e[\"eightpersian\"]=1784;e[\"eightroman\"]=8567;e[\"eightsuperior\"]=8312;e[\"eightthai\"]=3672;e[\"einvertedbreve\"]=519;e[\"eiotifiedcyrillic\"]=1125;e[\"ekatakana\"]=12456;e[\"ekatakanahalfwidth\"]=65396;e[\"ekonkargurmukhi\"]=2676;e[\"ekorean\"]=12628;e[\"elcyrillic\"]=1083;e[\"element\"]=8712;e[\"elevencircle\"]=9322;e[\"elevenparen\"]=9342;e[\"elevenperiod\"]=9362;e[\"elevenroman\"]=8570;e[\"ellipsis\"]=8230;e[\"ellipsisvertical\"]=8942;e[\"emacron\"]=275;e[\"emacronacute\"]=7703;e[\"emacrongrave\"]=7701;e[\"emcyrillic\"]=1084;e[\"emdash\"]=8212;e[\"emdashvertical\"]=65073;e[\"emonospace\"]=65349;e[\"emphasismarkarmenian\"]=1371;e[\"emptyset\"]=8709;e[\"enbopomofo\"]=12579;e[\"encyrillic\"]=1085;e[\"endash\"]=8211;e[\"endashvertical\"]=65074;e[\"endescendercyrillic\"]=1187;e[\"eng\"]=331;e[\"engbopomofo\"]=12581;e[\"enghecyrillic\"]=1189;e[\"enhookcyrillic\"]=1224;e[\"enspace\"]=8194;e[\"eogonek\"]=281;e[\"eokorean\"]=12627;e[\"eopen\"]=603;e[\"eopenclosed\"]=666;e[\"eopenreversed\"]=604;e[\"eopenreversedclosed\"]=606;e[\"eopenreversedhook\"]=605;e[\"eparen\"]=9376;e[\"epsilon\"]=949;e[\"epsilontonos\"]=941;e[\"equal\"]=61;e[\"equalmonospace\"]=65309;e[\"equalsmall\"]=65126;e[\"equalsuperior\"]=8316;e[\"equivalence\"]=8801;e[\"erbopomofo\"]=12582;e[\"ercyrillic\"]=1088;e[\"ereversed\"]=600;e[\"ereversedcyrillic\"]=1101;e[\"escyrillic\"]=1089;e[\"esdescendercyrillic\"]=1195;e[\"esh\"]=643;e[\"eshcurl\"]=646;e[\"eshortdeva\"]=2318;e[\"eshortvowelsigndeva\"]=2374;e[\"eshreversedloop\"]=426;e[\"eshsquatreversed\"]=645;e[\"esmallhiragana\"]=12359;e[\"esmallkatakana\"]=12455;e[\"esmallkatakanahalfwidth\"]=65386;e[\"estimated\"]=8494;e[\"esuperior\"]=63212;e[\"eta\"]=951;e[\"etarmenian\"]=1384;e[\"etatonos\"]=942;e[\"eth\"]=240;e[\"etilde\"]=7869;e[\"etildebelow\"]=7707;e[\"etnahtafoukhhebrew\"]=1425;e[\"etnahtafoukhlefthebrew\"]=1425;e[\"etnahtahebrew\"]=1425;e[\"etnahtalefthebrew\"]=1425;e[\"eturned\"]=477;e[\"eukorean\"]=12641;e[\"euro\"]=8364;e[\"evowelsignbengali\"]=2503;e[\"evowelsigndeva\"]=2375;e[\"evowelsigngujarati\"]=2759;e[\"exclam\"]=33;e[\"exclamarmenian\"]=1372;e[\"exclamdbl\"]=8252;e[\"exclamdown\"]=161;e[\"exclamdownsmall\"]=63393;e[\"exclammonospace\"]=65281;e[\"exclamsmall\"]=63265;e[\"existential\"]=8707;e[\"ezh\"]=658;e[\"ezhcaron\"]=495;e[\"ezhcurl\"]=659;e[\"ezhreversed\"]=441;e[\"ezhtail\"]=442;e[\"f\"]=102;e[\"fadeva\"]=2398;e[\"fagurmukhi\"]=2654;e[\"fahrenheit\"]=8457;e[\"fathaarabic\"]=1614;e[\"fathalowarabic\"]=1614;e[\"fathatanarabic\"]=1611;e[\"fbopomofo\"]=12552;e[\"fcircle\"]=9429;e[\"fdotaccent\"]=7711;e[\"feharabic\"]=1601;e[\"feharmenian\"]=1414;e[\"fehfinalarabic\"]=65234;e[\"fehinitialarabic\"]=65235;e[\"fehmedialarabic\"]=65236;e[\"feicoptic\"]=997;e[\"female\"]=9792;e[\"ff\"]=64256;e[\"ffi\"]=64259;e[\"ffl\"]=64260;e[\"fi\"]=64257;e[\"fifteencircle\"]=9326;e[\"fifteenparen\"]=9346;e[\"fifteenperiod\"]=9366;e[\"figuredash\"]=8210;e[\"filledbox\"]=9632;e[\"filledrect\"]=9644;e[\"finalkaf\"]=1498;e[\"finalkafdagesh\"]=64314;e[\"finalkafdageshhebrew\"]=64314;e[\"finalkafhebrew\"]=1498;e[\"finalmem\"]=1501;e[\"finalmemhebrew\"]=1501;e[\"finalnun\"]=1503;e[\"finalnunhebrew\"]=1503;e[\"finalpe\"]=1507;e[\"finalpehebrew\"]=1507;e[\"finaltsadi\"]=1509;e[\"finaltsadihebrew\"]=1509;e[\"firsttonechinese\"]=713;e[\"fisheye\"]=9673;e[\"fitacyrillic\"]=1139;e[\"five\"]=53;e[\"fivearabic\"]=1637;e[\"fivebengali\"]=2539;e[\"fivecircle\"]=9316;e[\"fivecircleinversesansserif\"]=10126;e[\"fivedeva\"]=2411;e[\"fiveeighths\"]=8541;e[\"fivegujarati\"]=2795;e[\"fivegurmukhi\"]=2667;e[\"fivehackarabic\"]=1637;e[\"fivehangzhou\"]=12325;e[\"fiveideographicparen\"]=12836;e[\"fiveinferior\"]=8325;e[\"fivemonospace\"]=65301;e[\"fiveoldstyle\"]=63285;e[\"fiveparen\"]=9336;e[\"fiveperiod\"]=9356;e[\"fivepersian\"]=1781;e[\"fiveroman\"]=8564;e[\"fivesuperior\"]=8309;e[\"fivethai\"]=3669;e[\"fl\"]=64258;e[\"florin\"]=402;e[\"fmonospace\"]=65350;e[\"fmsquare\"]=13209;e[\"fofanthai\"]=3615;e[\"fofathai\"]=3613;e[\"fongmanthai\"]=3663;e[\"forall\"]=8704;e[\"four\"]=52;e[\"fourarabic\"]=1636;e[\"fourbengali\"]=2538;e[\"fourcircle\"]=9315;e[\"fourcircleinversesansserif\"]=10125;e[\"fourdeva\"]=2410;e[\"fourgujarati\"]=2794;e[\"fourgurmukhi\"]=2666;e[\"fourhackarabic\"]=1636;e[\"fourhangzhou\"]=12324;e[\"fourideographicparen\"]=12835;e[\"fourinferior\"]=8324;e[\"fourmonospace\"]=65300;e[\"fournumeratorbengali\"]=2551;e[\"fouroldstyle\"]=63284;e[\"fourparen\"]=9335;e[\"fourperiod\"]=9355;e[\"fourpersian\"]=1780;e[\"fourroman\"]=8563;e[\"foursuperior\"]=8308;e[\"fourteencircle\"]=9325;e[\"fourteenparen\"]=9345;e[\"fourteenperiod\"]=9365;e[\"fourthai\"]=3668;e[\"fourthtonechinese\"]=715;e[\"fparen\"]=9377;e[\"fraction\"]=8260;e[\"franc\"]=8355;e[\"g\"]=103;e[\"gabengali\"]=2455;e[\"gacute\"]=501;e[\"gadeva\"]=2327;e[\"gafarabic\"]=1711;e[\"gaffinalarabic\"]=64403;e[\"gafinitialarabic\"]=64404;e[\"gafmedialarabic\"]=64405;e[\"gagujarati\"]=2711;e[\"gagurmukhi\"]=2583;e[\"gahiragana\"]=12364;e[\"gakatakana\"]=12460;e[\"gamma\"]=947;e[\"gammalatinsmall\"]=611;e[\"gammasuperior\"]=736;e[\"gangiacoptic\"]=1003;e[\"gbopomofo\"]=12557;e[\"gbreve\"]=287;e[\"gcaron\"]=487;e[\"gcedilla\"]=291;e[\"gcircle\"]=9430;e[\"gcircumflex\"]=285;e[\"gcommaaccent\"]=291;e[\"gdot\"]=289;e[\"gdotaccent\"]=289;e[\"gecyrillic\"]=1075;e[\"gehiragana\"]=12370;e[\"gekatakana\"]=12466;e[\"geometricallyequal\"]=8785;e[\"gereshaccenthebrew\"]=1436;e[\"gereshhebrew\"]=1523;e[\"gereshmuqdamhebrew\"]=1437;e[\"germandbls\"]=223;e[\"gershayimaccenthebrew\"]=1438;e[\"gershayimhebrew\"]=1524;e[\"getamark\"]=12307;e[\"ghabengali\"]=2456;e[\"ghadarmenian\"]=1394;e[\"ghadeva\"]=2328;e[\"ghagujarati\"]=2712;e[\"ghagurmukhi\"]=2584;e[\"ghainarabic\"]=1594;e[\"ghainfinalarabic\"]=65230;e[\"ghaininitialarabic\"]=65231;e[\"ghainmedialarabic\"]=65232;e[\"ghemiddlehookcyrillic\"]=1173;e[\"ghestrokecyrillic\"]=1171;e[\"gheupturncyrillic\"]=1169;e[\"ghhadeva\"]=2394;e[\"ghhagurmukhi\"]=2650;e[\"ghook\"]=608;e[\"ghzsquare\"]=13203;e[\"gihiragana\"]=12366;e[\"gikatakana\"]=12462;e[\"gimarmenian\"]=1379;e[\"gimel\"]=1490;e[\"gimeldagesh\"]=64306;e[\"gimeldageshhebrew\"]=64306;e[\"gimelhebrew\"]=1490;e[\"gjecyrillic\"]=1107;e[\"glottalinvertedstroke\"]=446;e[\"glottalstop\"]=660;e[\"glottalstopinverted\"]=662;e[\"glottalstopmod\"]=704;e[\"glottalstopreversed\"]=661;e[\"glottalstopreversedmod\"]=705;e[\"glottalstopreversedsuperior\"]=740;e[\"glottalstopstroke\"]=673;e[\"glottalstopstrokereversed\"]=674;e[\"gmacron\"]=7713;e[\"gmonospace\"]=65351;e[\"gohiragana\"]=12372;e[\"gokatakana\"]=12468;e[\"gparen\"]=9378;e[\"gpasquare\"]=13228;e[\"gradient\"]=8711;e[\"grave\"]=96;e[\"gravebelowcmb\"]=790;e[\"gravecmb\"]=768;e[\"gravecomb\"]=768;e[\"gravedeva\"]=2387;e[\"gravelowmod\"]=718;e[\"gravemonospace\"]=65344;e[\"gravetonecmb\"]=832;e[\"greater\"]=62;e[\"greaterequal\"]=8805;e[\"greaterequalorless\"]=8923;e[\"greatermonospace\"]=65310;e[\"greaterorequivalent\"]=8819;e[\"greaterorless\"]=8823;e[\"greateroverequal\"]=8807;e[\"greatersmall\"]=65125;e[\"gscript\"]=609;e[\"gstroke\"]=485;e[\"guhiragana\"]=12368;e[\"guillemotleft\"]=171;e[\"guillemotright\"]=187;e[\"guilsinglleft\"]=8249;e[\"guilsinglright\"]=8250;e[\"gukatakana\"]=12464;e[\"guramusquare\"]=13080;e[\"gysquare\"]=13257;e[\"h\"]=104;e[\"haabkhasiancyrillic\"]=1193;e[\"haaltonearabic\"]=1729;e[\"habengali\"]=2489;e[\"hadescendercyrillic\"]=1203;e[\"hadeva\"]=2361;e[\"hagujarati\"]=2745;e[\"hagurmukhi\"]=2617;e[\"haharabic\"]=1581;e[\"hahfinalarabic\"]=65186;e[\"hahinitialarabic\"]=65187;e[\"hahiragana\"]=12399;e[\"hahmedialarabic\"]=65188;e[\"haitusquare\"]=13098;e[\"hakatakana\"]=12495;e[\"hakatakanahalfwidth\"]=65418;e[\"halantgurmukhi\"]=2637;e[\"hamzaarabic\"]=1569;e[\"hamzalowarabic\"]=1569;e[\"hangulfiller\"]=12644;e[\"hardsigncyrillic\"]=1098;e[\"harpoonleftbarbup\"]=8636;e[\"harpoonrightbarbup\"]=8640;e[\"hasquare\"]=13258;e[\"hatafpatah\"]=1458;e[\"hatafpatah16\"]=1458;e[\"hatafpatah23\"]=1458;e[\"hatafpatah2f\"]=1458;e[\"hatafpatahhebrew\"]=1458;e[\"hatafpatahnarrowhebrew\"]=1458;e[\"hatafpatahquarterhebrew\"]=1458;e[\"hatafpatahwidehebrew\"]=1458;e[\"hatafqamats\"]=1459;e[\"hatafqamats1b\"]=1459;e[\"hatafqamats28\"]=1459;e[\"hatafqamats34\"]=1459;e[\"hatafqamatshebrew\"]=1459;e[\"hatafqamatsnarrowhebrew\"]=1459;e[\"hatafqamatsquarterhebrew\"]=1459;e[\"hatafqamatswidehebrew\"]=1459;e[\"hatafsegol\"]=1457;e[\"hatafsegol17\"]=1457;e[\"hatafsegol24\"]=1457;e[\"hatafsegol30\"]=1457;e[\"hatafsegolhebrew\"]=1457;e[\"hatafsegolnarrowhebrew\"]=1457;e[\"hatafsegolquarterhebrew\"]=1457;e[\"hatafsegolwidehebrew\"]=1457;e[\"hbar\"]=295;e[\"hbopomofo\"]=12559;e[\"hbrevebelow\"]=7723;e[\"hcedilla\"]=7721;e[\"hcircle\"]=9431;e[\"hcircumflex\"]=293;e[\"hdieresis\"]=7719;e[\"hdotaccent\"]=7715;e[\"hdotbelow\"]=7717;e[\"he\"]=1492;e[\"heart\"]=9829;e[\"heartsuitblack\"]=9829;e[\"heartsuitwhite\"]=9825;e[\"hedagesh\"]=64308;e[\"hedageshhebrew\"]=64308;e[\"hehaltonearabic\"]=1729;e[\"heharabic\"]=1607;e[\"hehebrew\"]=1492;e[\"hehfinalaltonearabic\"]=64423;e[\"hehfinalalttwoarabic\"]=65258;e[\"hehfinalarabic\"]=65258;e[\"hehhamzaabovefinalarabic\"]=64421;e[\"hehhamzaaboveisolatedarabic\"]=64420;e[\"hehinitialaltonearabic\"]=64424;e[\"hehinitialarabic\"]=65259;e[\"hehiragana\"]=12408;e[\"hehmedialaltonearabic\"]=64425;e[\"hehmedialarabic\"]=65260;e[\"heiseierasquare\"]=13179;e[\"hekatakana\"]=12504;e[\"hekatakanahalfwidth\"]=65421;e[\"hekutaarusquare\"]=13110;e[\"henghook\"]=615;e[\"herutusquare\"]=13113;e[\"het\"]=1495;e[\"hethebrew\"]=1495;e[\"hhook\"]=614;e[\"hhooksuperior\"]=689;e[\"hieuhacirclekorean\"]=12923;e[\"hieuhaparenkorean\"]=12827;e[\"hieuhcirclekorean\"]=12909;e[\"hieuhkorean\"]=12622;e[\"hieuhparenkorean\"]=12813;e[\"hihiragana\"]=12402;e[\"hikatakana\"]=12498;e[\"hikatakanahalfwidth\"]=65419;e[\"hiriq\"]=1460;e[\"hiriq14\"]=1460;e[\"hiriq21\"]=1460;e[\"hiriq2d\"]=1460;e[\"hiriqhebrew\"]=1460;e[\"hiriqnarrowhebrew\"]=1460;e[\"hiriqquarterhebrew\"]=1460;e[\"hiriqwidehebrew\"]=1460;e[\"hlinebelow\"]=7830;e[\"hmonospace\"]=65352;e[\"hoarmenian\"]=1392;e[\"hohipthai\"]=3627;e[\"hohiragana\"]=12411;e[\"hokatakana\"]=12507;e[\"hokatakanahalfwidth\"]=65422;e[\"holam\"]=1465;e[\"holam19\"]=1465;e[\"holam26\"]=1465;e[\"holam32\"]=1465;e[\"holamhebrew\"]=1465;e[\"holamnarrowhebrew\"]=1465;e[\"holamquarterhebrew\"]=1465;e[\"holamwidehebrew\"]=1465;e[\"honokhukthai\"]=3630;e[\"hookabovecomb\"]=777;e[\"hookcmb\"]=777;e[\"hookpalatalizedbelowcmb\"]=801;e[\"hookretroflexbelowcmb\"]=802;e[\"hoonsquare\"]=13122;e[\"horicoptic\"]=1001;e[\"horizontalbar\"]=8213;e[\"horncmb\"]=795;e[\"hotsprings\"]=9832;e[\"house\"]=8962;e[\"hparen\"]=9379;e[\"hsuperior\"]=688;e[\"hturned\"]=613;e[\"huhiragana\"]=12405;e[\"huiitosquare\"]=13107;e[\"hukatakana\"]=12501;e[\"hukatakanahalfwidth\"]=65420;e[\"hungarumlaut\"]=733;e[\"hungarumlautcmb\"]=779;e[\"hv\"]=405;e[\"hyphen\"]=45;e[\"hypheninferior\"]=63205;e[\"hyphenmonospace\"]=65293;e[\"hyphensmall\"]=65123;e[\"hyphensuperior\"]=63206;e[\"hyphentwo\"]=8208;e[\"i\"]=105;e[\"iacute\"]=237;e[\"iacyrillic\"]=1103;e[\"ibengali\"]=2439;e[\"ibopomofo\"]=12583;e[\"ibreve\"]=301;e[\"icaron\"]=464;e[\"icircle\"]=9432;e[\"icircumflex\"]=238;e[\"icyrillic\"]=1110;e[\"idblgrave\"]=521;e[\"ideographearthcircle\"]=12943;e[\"ideographfirecircle\"]=12939;e[\"ideographicallianceparen\"]=12863;e[\"ideographiccallparen\"]=12858;e[\"ideographiccentrecircle\"]=12965;e[\"ideographicclose\"]=12294;e[\"ideographiccomma\"]=12289;e[\"ideographiccommaleft\"]=65380;e[\"ideographiccongratulationparen\"]=12855;e[\"ideographiccorrectcircle\"]=12963;e[\"ideographicearthparen\"]=12847;e[\"ideographicenterpriseparen\"]=12861;e[\"ideographicexcellentcircle\"]=12957;e[\"ideographicfestivalparen\"]=12864;e[\"ideographicfinancialcircle\"]=12950;e[\"ideographicfinancialparen\"]=12854;e[\"ideographicfireparen\"]=12843;e[\"ideographichaveparen\"]=12850;e[\"ideographichighcircle\"]=12964;e[\"ideographiciterationmark\"]=12293;e[\"ideographiclaborcircle\"]=12952;e[\"ideographiclaborparen\"]=12856;e[\"ideographicleftcircle\"]=12967;e[\"ideographiclowcircle\"]=12966;e[\"ideographicmedicinecircle\"]=12969;e[\"ideographicmetalparen\"]=12846;e[\"ideographicmoonparen\"]=12842;e[\"ideographicnameparen\"]=12852;e[\"ideographicperiod\"]=12290;e[\"ideographicprintcircle\"]=12958;e[\"ideographicreachparen\"]=12867;e[\"ideographicrepresentparen\"]=12857;e[\"ideographicresourceparen\"]=12862;e[\"ideographicrightcircle\"]=12968;e[\"ideographicsecretcircle\"]=12953;e[\"ideographicselfparen\"]=12866;e[\"ideographicsocietyparen\"]=12851;e[\"ideographicspace\"]=12288;e[\"ideographicspecialparen\"]=12853;e[\"ideographicstockparen\"]=12849;e[\"ideographicstudyparen\"]=12859;e[\"ideographicsunparen\"]=12848;e[\"ideographicsuperviseparen\"]=12860;e[\"ideographicwaterparen\"]=12844;e[\"ideographicwoodparen\"]=12845;e[\"ideographiczero\"]=12295;e[\"ideographmetalcircle\"]=12942;e[\"ideographmooncircle\"]=12938;e[\"ideographnamecircle\"]=12948;e[\"ideographsuncircle\"]=12944;e[\"ideographwatercircle\"]=12940;e[\"ideographwoodcircle\"]=12941;e[\"ideva\"]=2311;e[\"idieresis\"]=239;e[\"idieresisacute\"]=7727;e[\"idieresiscyrillic\"]=1253;e[\"idotbelow\"]=7883;e[\"iebrevecyrillic\"]=1239;e[\"iecyrillic\"]=1077;e[\"ieungacirclekorean\"]=12917;e[\"ieungaparenkorean\"]=12821;e[\"ieungcirclekorean\"]=12903;e[\"ieungkorean\"]=12615;e[\"ieungparenkorean\"]=12807;e[\"igrave\"]=236;e[\"igujarati\"]=2695;e[\"igurmukhi\"]=2567;e[\"ihiragana\"]=12356;e[\"ihookabove\"]=7881;e[\"iibengali\"]=2440;e[\"iicyrillic\"]=1080;e[\"iideva\"]=2312;e[\"iigujarati\"]=2696;e[\"iigurmukhi\"]=2568;e[\"iimatragurmukhi\"]=2624;e[\"iinvertedbreve\"]=523;e[\"iishortcyrillic\"]=1081;e[\"iivowelsignbengali\"]=2496;e[\"iivowelsigndeva\"]=2368;e[\"iivowelsigngujarati\"]=2752;e[\"ij\"]=307;e[\"ikatakana\"]=12452;e[\"ikatakanahalfwidth\"]=65394;e[\"ikorean\"]=12643;e[\"ilde\"]=732;e[\"iluyhebrew\"]=1452;e[\"imacron\"]=299;e[\"imacroncyrillic\"]=1251;e[\"imageorapproximatelyequal\"]=8787;e[\"imatragurmukhi\"]=2623;e[\"imonospace\"]=65353;e[\"increment\"]=8710;e[\"infinity\"]=8734;e[\"iniarmenian\"]=1387;e[\"integral\"]=8747;e[\"integralbottom\"]=8993;e[\"integralbt\"]=8993;e[\"integralex\"]=63733;e[\"integraltop\"]=8992;e[\"integraltp\"]=8992;e[\"intersection\"]=8745;e[\"intisquare\"]=13061;e[\"invbullet\"]=9688;e[\"invcircle\"]=9689;e[\"invsmileface\"]=9787;e[\"iocyrillic\"]=1105;e[\"iogonek\"]=303;e[\"iota\"]=953;e[\"iotadieresis\"]=970;e[\"iotadieresistonos\"]=912;e[\"iotalatin\"]=617;e[\"iotatonos\"]=943;e[\"iparen\"]=9380;e[\"irigurmukhi\"]=2674;e[\"ismallhiragana\"]=12355;e[\"ismallkatakana\"]=12451;e[\"ismallkatakanahalfwidth\"]=65384;e[\"issharbengali\"]=2554;e[\"istroke\"]=616;e[\"isuperior\"]=63213;e[\"iterationhiragana\"]=12445;e[\"iterationkatakana\"]=12541;e[\"itilde\"]=297;e[\"itildebelow\"]=7725;e[\"iubopomofo\"]=12585;e[\"iucyrillic\"]=1102;e[\"ivowelsignbengali\"]=2495;e[\"ivowelsigndeva\"]=2367;e[\"ivowelsigngujarati\"]=2751;e[\"izhitsacyrillic\"]=1141;e[\"izhitsadblgravecyrillic\"]=1143;e[\"j\"]=106;e[\"jaarmenian\"]=1393;e[\"jabengali\"]=2460;e[\"jadeva\"]=2332;e[\"jagujarati\"]=2716;e[\"jagurmukhi\"]=2588;e[\"jbopomofo\"]=12560;e[\"jcaron\"]=496;e[\"jcircle\"]=9433;e[\"jcircumflex\"]=309;e[\"jcrossedtail\"]=669;e[\"jdotlessstroke\"]=607;e[\"jecyrillic\"]=1112;e[\"jeemarabic\"]=1580;e[\"jeemfinalarabic\"]=65182;e[\"jeeminitialarabic\"]=65183;e[\"jeemmedialarabic\"]=65184;e[\"jeharabic\"]=1688;e[\"jehfinalarabic\"]=64395;e[\"jhabengali\"]=2461;e[\"jhadeva\"]=2333;e[\"jhagujarati\"]=2717;e[\"jhagurmukhi\"]=2589;e[\"jheharmenian\"]=1403;e[\"jis\"]=12292;e[\"jmonospace\"]=65354;e[\"jparen\"]=9381;e[\"jsuperior\"]=690;e[\"k\"]=107;e[\"kabashkircyrillic\"]=1185;e[\"kabengali\"]=2453;e[\"kacute\"]=7729;e[\"kacyrillic\"]=1082;e[\"kadescendercyrillic\"]=1179;e[\"kadeva\"]=2325;e[\"kaf\"]=1499;e[\"kafarabic\"]=1603;e[\"kafdagesh\"]=64315;e[\"kafdageshhebrew\"]=64315;e[\"kaffinalarabic\"]=65242;e[\"kafhebrew\"]=1499;e[\"kafinitialarabic\"]=65243;e[\"kafmedialarabic\"]=65244;e[\"kafrafehebrew\"]=64333;e[\"kagujarati\"]=2709;e[\"kagurmukhi\"]=2581;e[\"kahiragana\"]=12363;e[\"kahookcyrillic\"]=1220;e[\"kakatakana\"]=12459;e[\"kakatakanahalfwidth\"]=65398;e[\"kappa\"]=954;e[\"kappasymbolgreek\"]=1008;e[\"kapyeounmieumkorean\"]=12657;e[\"kapyeounphieuphkorean\"]=12676;e[\"kapyeounpieupkorean\"]=12664;e[\"kapyeounssangpieupkorean\"]=12665;e[\"karoriisquare\"]=13069;e[\"kashidaautoarabic\"]=1600;e[\"kashidaautonosidebearingarabic\"]=1600;e[\"kasmallkatakana\"]=12533;e[\"kasquare\"]=13188;e[\"kasraarabic\"]=1616;e[\"kasratanarabic\"]=1613;e[\"kastrokecyrillic\"]=1183;e[\"katahiraprolongmarkhalfwidth\"]=65392;e[\"kaverticalstrokecyrillic\"]=1181;e[\"kbopomofo\"]=12558;e[\"kcalsquare\"]=13193;e[\"kcaron\"]=489;e[\"kcedilla\"]=311;e[\"kcircle\"]=9434;e[\"kcommaaccent\"]=311;e[\"kdotbelow\"]=7731;e[\"keharmenian\"]=1412;e[\"kehiragana\"]=12369;e[\"kekatakana\"]=12465;e[\"kekatakanahalfwidth\"]=65401;e[\"kenarmenian\"]=1391;e[\"kesmallkatakana\"]=12534;e[\"kgreenlandic\"]=312;e[\"khabengali\"]=2454;e[\"khacyrillic\"]=1093;e[\"khadeva\"]=2326;e[\"khagujarati\"]=2710;e[\"khagurmukhi\"]=2582;e[\"khaharabic\"]=1582;e[\"khahfinalarabic\"]=65190;e[\"khahinitialarabic\"]=65191;e[\"khahmedialarabic\"]=65192;e[\"kheicoptic\"]=999;e[\"khhadeva\"]=2393;e[\"khhagurmukhi\"]=2649;e[\"khieukhacirclekorean\"]=12920;e[\"khieukhaparenkorean\"]=12824;e[\"khieukhcirclekorean\"]=12906;e[\"khieukhkorean\"]=12619;e[\"khieukhparenkorean\"]=12810;e[\"khokhaithai\"]=3586;e[\"khokhonthai\"]=3589;e[\"khokhuatthai\"]=3587;e[\"khokhwaithai\"]=3588;e[\"khomutthai\"]=3675;e[\"khook\"]=409;e[\"khorakhangthai\"]=3590;e[\"khzsquare\"]=13201;e[\"kihiragana\"]=12365;e[\"kikatakana\"]=12461;e[\"kikatakanahalfwidth\"]=65399;e[\"kiroguramusquare\"]=13077;e[\"kiromeetorusquare\"]=13078;e[\"kirosquare\"]=13076;e[\"kiyeokacirclekorean\"]=12910;e[\"kiyeokaparenkorean\"]=12814;e[\"kiyeokcirclekorean\"]=12896;e[\"kiyeokkorean\"]=12593;e[\"kiyeokparenkorean\"]=12800;e[\"kiyeoksioskorean\"]=12595;e[\"kjecyrillic\"]=1116;e[\"klinebelow\"]=7733;e[\"klsquare\"]=13208;e[\"kmcubedsquare\"]=13222;e[\"kmonospace\"]=65355;e[\"kmsquaredsquare\"]=13218;e[\"kohiragana\"]=12371;e[\"kohmsquare\"]=13248;e[\"kokaithai\"]=3585;e[\"kokatakana\"]=12467;e[\"kokatakanahalfwidth\"]=65402;e[\"kooposquare\"]=13086;e[\"koppacyrillic\"]=1153;e[\"koreanstandardsymbol\"]=12927;e[\"koroniscmb\"]=835;e[\"kparen\"]=9382;e[\"kpasquare\"]=13226;e[\"ksicyrillic\"]=1135;e[\"ktsquare\"]=13263;e[\"kturned\"]=670;e[\"kuhiragana\"]=12367;e[\"kukatakana\"]=12463;e[\"kukatakanahalfwidth\"]=65400;e[\"kvsquare\"]=13240;e[\"kwsquare\"]=13246;e[\"l\"]=108;e[\"labengali\"]=2482;e[\"lacute\"]=314;e[\"ladeva\"]=2354;e[\"lagujarati\"]=2738;e[\"lagurmukhi\"]=2610;e[\"lakkhangyaothai\"]=3653;e[\"lamaleffinalarabic\"]=65276;e[\"lamalefhamzaabovefinalarabic\"]=65272;e[\"lamalefhamzaaboveisolatedarabic\"]=65271;e[\"lamalefhamzabelowfinalarabic\"]=65274;e[\"lamalefhamzabelowisolatedarabic\"]=65273;e[\"lamalefisolatedarabic\"]=65275;e[\"lamalefmaddaabovefinalarabic\"]=65270;e[\"lamalefmaddaaboveisolatedarabic\"]=65269;e[\"lamarabic\"]=1604;e[\"lambda\"]=955;e[\"lambdastroke\"]=411;e[\"lamed\"]=1500;e[\"lameddagesh\"]=64316;e[\"lameddageshhebrew\"]=64316;e[\"lamedhebrew\"]=1500;e[\"lamfinalarabic\"]=65246;e[\"lamhahinitialarabic\"]=64714;e[\"laminitialarabic\"]=65247;e[\"lamjeeminitialarabic\"]=64713;e[\"lamkhahinitialarabic\"]=64715;e[\"lamlamhehisolatedarabic\"]=65010;e[\"lammedialarabic\"]=65248;e[\"lammeemhahinitialarabic\"]=64904;e[\"lammeeminitialarabic\"]=64716;e[\"largecircle\"]=9711;e[\"lbar\"]=410;e[\"lbelt\"]=620;e[\"lbopomofo\"]=12556;e[\"lcaron\"]=318;e[\"lcedilla\"]=316;e[\"lcircle\"]=9435;e[\"lcircumflexbelow\"]=7741;e[\"lcommaaccent\"]=316;e[\"ldot\"]=320;e[\"ldotaccent\"]=320;e[\"ldotbelow\"]=7735;e[\"ldotbelowmacron\"]=7737;e[\"leftangleabovecmb\"]=794;e[\"lefttackbelowcmb\"]=792;e[\"less\"]=60;e[\"lessequal\"]=8804;e[\"lessequalorgreater\"]=8922;e[\"lessmonospace\"]=65308;e[\"lessorequivalent\"]=8818;e[\"lessorgreater\"]=8822;e[\"lessoverequal\"]=8806;e[\"lesssmall\"]=65124;e[\"lezh\"]=622;e[\"lfblock\"]=9612;e[\"lhookretroflex\"]=621;e[\"lira\"]=8356;e[\"liwnarmenian\"]=1388;e[\"lj\"]=457;e[\"ljecyrillic\"]=1113;e[\"ll\"]=63168;e[\"lladeva\"]=2355;e[\"llagujarati\"]=2739;e[\"llinebelow\"]=7739;e[\"llladeva\"]=2356;e[\"llvocalicbengali\"]=2529;e[\"llvocalicdeva\"]=2401;e[\"llvocalicvowelsignbengali\"]=2531;e[\"llvocalicvowelsigndeva\"]=2403;e[\"lmiddletilde\"]=619;e[\"lmonospace\"]=65356;e[\"lmsquare\"]=13264;e[\"lochulathai\"]=3628;e[\"logicaland\"]=8743;e[\"logicalnot\"]=172;e[\"logicalnotreversed\"]=8976;e[\"logicalor\"]=8744;e[\"lolingthai\"]=3621;e[\"longs\"]=383;e[\"lowlinecenterline\"]=65102;e[\"lowlinecmb\"]=818;e[\"lowlinedashed\"]=65101;e[\"lozenge\"]=9674;e[\"lparen\"]=9383;e[\"lslash\"]=322;e[\"lsquare\"]=8467;e[\"lsuperior\"]=63214;e[\"ltshade\"]=9617;e[\"luthai\"]=3622;e[\"lvocalicbengali\"]=2444;e[\"lvocalicdeva\"]=2316;e[\"lvocalicvowelsignbengali\"]=2530;e[\"lvocalicvowelsigndeva\"]=2402;e[\"lxsquare\"]=13267;e[\"m\"]=109;e[\"mabengali\"]=2478;e[\"macron\"]=175;e[\"macronbelowcmb\"]=817;e[\"macroncmb\"]=772;e[\"macronlowmod\"]=717;e[\"macronmonospace\"]=65507;e[\"macute\"]=7743;e[\"madeva\"]=2350;e[\"magujarati\"]=2734;e[\"magurmukhi\"]=2606;e[\"mahapakhhebrew\"]=1444;e[\"mahapakhlefthebrew\"]=1444;e[\"mahiragana\"]=12414;e[\"maichattawalowleftthai\"]=63637;e[\"maichattawalowrightthai\"]=63636;e[\"maichattawathai\"]=3659;e[\"maichattawaupperleftthai\"]=63635;e[\"maieklowleftthai\"]=63628;e[\"maieklowrightthai\"]=63627;e[\"maiekthai\"]=3656;e[\"maiekupperleftthai\"]=63626;e[\"maihanakatleftthai\"]=63620;e[\"maihanakatthai\"]=3633;e[\"maitaikhuleftthai\"]=63625;e[\"maitaikhuthai\"]=3655;e[\"maitholowleftthai\"]=63631;e[\"maitholowrightthai\"]=63630;e[\"maithothai\"]=3657;e[\"maithoupperleftthai\"]=63629;e[\"maitrilowleftthai\"]=63634;e[\"maitrilowrightthai\"]=63633;e[\"maitrithai\"]=3658;e[\"maitriupperleftthai\"]=63632;e[\"maiyamokthai\"]=3654;e[\"makatakana\"]=12510;e[\"makatakanahalfwidth\"]=65423;e[\"male\"]=9794;e[\"mansyonsquare\"]=13127;e[\"maqafhebrew\"]=1470;e[\"mars\"]=9794;e[\"masoracirclehebrew\"]=1455;e[\"masquare\"]=13187;e[\"mbopomofo\"]=12551;e[\"mbsquare\"]=13268;e[\"mcircle\"]=9436;e[\"mcubedsquare\"]=13221;e[\"mdotaccent\"]=7745;e[\"mdotbelow\"]=7747;e[\"meemarabic\"]=1605;e[\"meemfinalarabic\"]=65250;e[\"meeminitialarabic\"]=65251;e[\"meemmedialarabic\"]=65252;e[\"meemmeeminitialarabic\"]=64721;e[\"meemmeemisolatedarabic\"]=64584;e[\"meetorusquare\"]=13133;e[\"mehiragana\"]=12417;e[\"meizierasquare\"]=13182;e[\"mekatakana\"]=12513;e[\"mekatakanahalfwidth\"]=65426;e[\"mem\"]=1502;e[\"memdagesh\"]=64318;e[\"memdageshhebrew\"]=64318;e[\"memhebrew\"]=1502;e[\"menarmenian\"]=1396;e[\"merkhahebrew\"]=1445;e[\"merkhakefulahebrew\"]=1446;e[\"merkhakefulalefthebrew\"]=1446;e[\"merkhalefthebrew\"]=1445;e[\"mhook\"]=625;e[\"mhzsquare\"]=13202;e[\"middledotkatakanahalfwidth\"]=65381;e[\"middot\"]=183;e[\"mieumacirclekorean\"]=12914;e[\"mieumaparenkorean\"]=12818;e[\"mieumcirclekorean\"]=12900;e[\"mieumkorean\"]=12609;e[\"mieumpansioskorean\"]=12656;e[\"mieumparenkorean\"]=12804;e[\"mieumpieupkorean\"]=12654;e[\"mieumsioskorean\"]=12655;e[\"mihiragana\"]=12415;e[\"mikatakana\"]=12511;e[\"mikatakanahalfwidth\"]=65424;e[\"minus\"]=8722;e[\"minusbelowcmb\"]=800;e[\"minuscircle\"]=8854;e[\"minusmod\"]=727;e[\"minusplus\"]=8723;e[\"minute\"]=8242;e[\"miribaarusquare\"]=13130;e[\"mirisquare\"]=13129;e[\"mlonglegturned\"]=624;e[\"mlsquare\"]=13206;e[\"mmcubedsquare\"]=13219;e[\"mmonospace\"]=65357;e[\"mmsquaredsquare\"]=13215;e[\"mohiragana\"]=12418;e[\"mohmsquare\"]=13249;e[\"mokatakana\"]=12514;e[\"mokatakanahalfwidth\"]=65427;e[\"molsquare\"]=13270;e[\"momathai\"]=3617;e[\"moverssquare\"]=13223;e[\"moverssquaredsquare\"]=13224;e[\"mparen\"]=9384;e[\"mpasquare\"]=13227;e[\"mssquare\"]=13235;e[\"msuperior\"]=63215;e[\"mturned\"]=623;e[\"mu\"]=181;e[\"mu1\"]=181;e[\"muasquare\"]=13186;e[\"muchgreater\"]=8811;e[\"muchless\"]=8810;e[\"mufsquare\"]=13196;e[\"mugreek\"]=956;e[\"mugsquare\"]=13197;e[\"muhiragana\"]=12416;e[\"mukatakana\"]=12512;e[\"mukatakanahalfwidth\"]=65425;e[\"mulsquare\"]=13205;e[\"multiply\"]=215;e[\"mumsquare\"]=13211;e[\"munahhebrew\"]=1443;e[\"munahlefthebrew\"]=1443;e[\"musicalnote\"]=9834;e[\"musicalnotedbl\"]=9835;e[\"musicflatsign\"]=9837;e[\"musicsharpsign\"]=9839;e[\"mussquare\"]=13234;e[\"muvsquare\"]=13238;e[\"muwsquare\"]=13244;e[\"mvmegasquare\"]=13241;e[\"mvsquare\"]=13239;e[\"mwmegasquare\"]=13247;e[\"mwsquare\"]=13245;e[\"n\"]=110;e[\"nabengali\"]=2472;e[\"nabla\"]=8711;e[\"nacute\"]=324;e[\"nadeva\"]=2344;e[\"nagujarati\"]=2728;e[\"nagurmukhi\"]=2600;e[\"nahiragana\"]=12394;e[\"nakatakana\"]=12490;e[\"nakatakanahalfwidth\"]=65413;e[\"napostrophe\"]=329;e[\"nasquare\"]=13185;e[\"nbopomofo\"]=12555;e[\"nbspace\"]=160;e[\"ncaron\"]=328;e[\"ncedilla\"]=326;e[\"ncircle\"]=9437;e[\"ncircumflexbelow\"]=7755;e[\"ncommaaccent\"]=326;e[\"ndotaccent\"]=7749;e[\"ndotbelow\"]=7751;e[\"nehiragana\"]=12397;e[\"nekatakana\"]=12493;e[\"nekatakanahalfwidth\"]=65416;e[\"newsheqelsign\"]=8362;e[\"nfsquare\"]=13195;e[\"ngabengali\"]=2457;e[\"ngadeva\"]=2329;e[\"ngagujarati\"]=2713;e[\"ngagurmukhi\"]=2585;e[\"ngonguthai\"]=3591;e[\"nhiragana\"]=12435;e[\"nhookleft\"]=626;e[\"nhookretroflex\"]=627;e[\"nieunacirclekorean\"]=12911;e[\"nieunaparenkorean\"]=12815;e[\"nieuncieuckorean\"]=12597;e[\"nieuncirclekorean\"]=12897;e[\"nieunhieuhkorean\"]=12598;e[\"nieunkorean\"]=12596;e[\"nieunpansioskorean\"]=12648;e[\"nieunparenkorean\"]=12801;e[\"nieunsioskorean\"]=12647;e[\"nieuntikeutkorean\"]=12646;e[\"nihiragana\"]=12395;e[\"nikatakana\"]=12491;e[\"nikatakanahalfwidth\"]=65414;e[\"nikhahitleftthai\"]=63641;e[\"nikhahitthai\"]=3661;e[\"nine\"]=57;e[\"ninearabic\"]=1641;e[\"ninebengali\"]=2543;e[\"ninecircle\"]=9320;e[\"ninecircleinversesansserif\"]=10130;e[\"ninedeva\"]=2415;e[\"ninegujarati\"]=2799;e[\"ninegurmukhi\"]=2671;e[\"ninehackarabic\"]=1641;e[\"ninehangzhou\"]=12329;e[\"nineideographicparen\"]=12840;e[\"nineinferior\"]=8329;e[\"ninemonospace\"]=65305;e[\"nineoldstyle\"]=63289;e[\"nineparen\"]=9340;e[\"nineperiod\"]=9360;e[\"ninepersian\"]=1785;e[\"nineroman\"]=8568;e[\"ninesuperior\"]=8313;e[\"nineteencircle\"]=9330;e[\"nineteenparen\"]=9350;e[\"nineteenperiod\"]=9370;e[\"ninethai\"]=3673;e[\"nj\"]=460;e[\"njecyrillic\"]=1114;e[\"nkatakana\"]=12531;e[\"nkatakanahalfwidth\"]=65437;e[\"nlegrightlong\"]=414;e[\"nlinebelow\"]=7753;e[\"nmonospace\"]=65358;e[\"nmsquare\"]=13210;e[\"nnabengali\"]=2467;e[\"nnadeva\"]=2339;e[\"nnagujarati\"]=2723;e[\"nnagurmukhi\"]=2595;e[\"nnnadeva\"]=2345;e[\"nohiragana\"]=12398;e[\"nokatakana\"]=12494;e[\"nokatakanahalfwidth\"]=65417;e[\"nonbreakingspace\"]=160;e[\"nonenthai\"]=3603;e[\"nonuthai\"]=3609;e[\"noonarabic\"]=1606;e[\"noonfinalarabic\"]=65254;e[\"noonghunnaarabic\"]=1722;e[\"noonghunnafinalarabic\"]=64415;e[\"nooninitialarabic\"]=65255;e[\"noonjeeminitialarabic\"]=64722;e[\"noonjeemisolatedarabic\"]=64587;e[\"noonmedialarabic\"]=65256;e[\"noonmeeminitialarabic\"]=64725;e[\"noonmeemisolatedarabic\"]=64590;e[\"noonnoonfinalarabic\"]=64653;e[\"notcontains\"]=8716;e[\"notelement\"]=8713;e[\"notelementof\"]=8713;e[\"notequal\"]=8800;e[\"notgreater\"]=8815;e[\"notgreaternorequal\"]=8817;e[\"notgreaternorless\"]=8825;e[\"notidentical\"]=8802;e[\"notless\"]=8814;e[\"notlessnorequal\"]=8816;e[\"notparallel\"]=8742;e[\"notprecedes\"]=8832;e[\"notsubset\"]=8836;e[\"notsucceeds\"]=8833;e[\"notsuperset\"]=8837;e[\"nowarmenian\"]=1398;e[\"nparen\"]=9385;e[\"nssquare\"]=13233;e[\"nsuperior\"]=8319;e[\"ntilde\"]=241;e[\"nu\"]=957;e[\"nuhiragana\"]=12396;e[\"nukatakana\"]=12492;e[\"nukatakanahalfwidth\"]=65415;e[\"nuktabengali\"]=2492;e[\"nuktadeva\"]=2364;e[\"nuktagujarati\"]=2748;e[\"nuktagurmukhi\"]=2620;e[\"numbersign\"]=35;e[\"numbersignmonospace\"]=65283;e[\"numbersignsmall\"]=65119;e[\"numeralsigngreek\"]=884;e[\"numeralsignlowergreek\"]=885;e[\"numero\"]=8470;e[\"nun\"]=1504;e[\"nundagesh\"]=64320;e[\"nundageshhebrew\"]=64320;e[\"nunhebrew\"]=1504;e[\"nvsquare\"]=13237;e[\"nwsquare\"]=13243;e[\"nyabengali\"]=2462;e[\"nyadeva\"]=2334;e[\"nyagujarati\"]=2718;e[\"nyagurmukhi\"]=2590;e[\"o\"]=111;e[\"oacute\"]=243;e[\"oangthai\"]=3629;e[\"obarred\"]=629;e[\"obarredcyrillic\"]=1257;e[\"obarreddieresiscyrillic\"]=1259;e[\"obengali\"]=2451;e[\"obopomofo\"]=12571;e[\"obreve\"]=335;e[\"ocandradeva\"]=2321;e[\"ocandragujarati\"]=2705;e[\"ocandravowelsigndeva\"]=2377;e[\"ocandravowelsigngujarati\"]=2761;e[\"ocaron\"]=466;e[\"ocircle\"]=9438;e[\"ocircumflex\"]=244;e[\"ocircumflexacute\"]=7889;e[\"ocircumflexdotbelow\"]=7897;e[\"ocircumflexgrave\"]=7891;e[\"ocircumflexhookabove\"]=7893;e[\"ocircumflextilde\"]=7895;e[\"ocyrillic\"]=1086;e[\"odblacute\"]=337;e[\"odblgrave\"]=525;e[\"odeva\"]=2323;e[\"odieresis\"]=246;e[\"odieresiscyrillic\"]=1255;e[\"odotbelow\"]=7885;e[\"oe\"]=339;e[\"oekorean\"]=12634;e[\"ogonek\"]=731;e[\"ogonekcmb\"]=808;e[\"ograve\"]=242;e[\"ogujarati\"]=2707;e[\"oharmenian\"]=1413;e[\"ohiragana\"]=12362;e[\"ohookabove\"]=7887;e[\"ohorn\"]=417;e[\"ohornacute\"]=7899;e[\"ohorndotbelow\"]=7907;e[\"ohorngrave\"]=7901;e[\"ohornhookabove\"]=7903;e[\"ohorntilde\"]=7905;e[\"ohungarumlaut\"]=337;e[\"oi\"]=419;e[\"oinvertedbreve\"]=527;e[\"okatakana\"]=12458;e[\"okatakanahalfwidth\"]=65397;e[\"okorean\"]=12631;e[\"olehebrew\"]=1451;e[\"omacron\"]=333;e[\"omacronacute\"]=7763;e[\"omacrongrave\"]=7761;e[\"omdeva\"]=2384;e[\"omega\"]=969;e[\"omega1\"]=982;e[\"omegacyrillic\"]=1121;e[\"omegalatinclosed\"]=631;e[\"omegaroundcyrillic\"]=1147;e[\"omegatitlocyrillic\"]=1149;e[\"omegatonos\"]=974;e[\"omgujarati\"]=2768;e[\"omicron\"]=959;e[\"omicrontonos\"]=972;e[\"omonospace\"]=65359;e[\"one\"]=49;e[\"onearabic\"]=1633;e[\"onebengali\"]=2535;e[\"onecircle\"]=9312;e[\"onecircleinversesansserif\"]=10122;e[\"onedeva\"]=2407;e[\"onedotenleader\"]=8228;e[\"oneeighth\"]=8539;e[\"onefitted\"]=63196;e[\"onegujarati\"]=2791;e[\"onegurmukhi\"]=2663;e[\"onehackarabic\"]=1633;e[\"onehalf\"]=189;e[\"onehangzhou\"]=12321;e[\"oneideographicparen\"]=12832;e[\"oneinferior\"]=8321;e[\"onemonospace\"]=65297;e[\"onenumeratorbengali\"]=2548;e[\"oneoldstyle\"]=63281;e[\"oneparen\"]=9332;e[\"oneperiod\"]=9352;e[\"onepersian\"]=1777;e[\"onequarter\"]=188;e[\"oneroman\"]=8560;e[\"onesuperior\"]=185;e[\"onethai\"]=3665;e[\"onethird\"]=8531;e[\"oogonek\"]=491;e[\"oogonekmacron\"]=493;e[\"oogurmukhi\"]=2579;e[\"oomatragurmukhi\"]=2635;e[\"oopen\"]=596;e[\"oparen\"]=9386;e[\"openbullet\"]=9702;e[\"option\"]=8997;e[\"ordfeminine\"]=170;e[\"ordmasculine\"]=186;e[\"orthogonal\"]=8735;e[\"oshortdeva\"]=2322;e[\"oshortvowelsigndeva\"]=2378;e[\"oslash\"]=248;e[\"oslashacute\"]=511;e[\"osmallhiragana\"]=12361;e[\"osmallkatakana\"]=12457;e[\"osmallkatakanahalfwidth\"]=65387;e[\"ostrokeacute\"]=511;e[\"osuperior\"]=63216;e[\"otcyrillic\"]=1151;e[\"otilde\"]=245;e[\"otildeacute\"]=7757;e[\"otildedieresis\"]=7759;e[\"oubopomofo\"]=12577;e[\"overline\"]=8254;e[\"overlinecenterline\"]=65098;e[\"overlinecmb\"]=773;e[\"overlinedashed\"]=65097;e[\"overlinedblwavy\"]=65100;e[\"overlinewavy\"]=65099;e[\"overscore\"]=175;e[\"ovowelsignbengali\"]=2507;e[\"ovowelsigndeva\"]=2379;e[\"ovowelsigngujarati\"]=2763;e[\"p\"]=112;e[\"paampssquare\"]=13184;e[\"paasentosquare\"]=13099;e[\"pabengali\"]=2474;e[\"pacute\"]=7765;e[\"padeva\"]=2346;e[\"pagedown\"]=8671;e[\"pageup\"]=8670;e[\"pagujarati\"]=2730;e[\"pagurmukhi\"]=2602;e[\"pahiragana\"]=12401;e[\"paiyannoithai\"]=3631;e[\"pakatakana\"]=12497;e[\"palatalizationcyrilliccmb\"]=1156;e[\"palochkacyrillic\"]=1216;e[\"pansioskorean\"]=12671;e[\"paragraph\"]=182;e[\"parallel\"]=8741;e[\"parenleft\"]=40;e[\"parenleftaltonearabic\"]=64830;e[\"parenleftbt\"]=63725;e[\"parenleftex\"]=63724;e[\"parenleftinferior\"]=8333;e[\"parenleftmonospace\"]=65288;e[\"parenleftsmall\"]=65113;e[\"parenleftsuperior\"]=8317;e[\"parenlefttp\"]=63723;e[\"parenleftvertical\"]=65077;e[\"parenright\"]=41;e[\"parenrightaltonearabic\"]=64831;e[\"parenrightbt\"]=63736;e[\"parenrightex\"]=63735;e[\"parenrightinferior\"]=8334;e[\"parenrightmonospace\"]=65289;e[\"parenrightsmall\"]=65114;e[\"parenrightsuperior\"]=8318;e[\"parenrighttp\"]=63734;e[\"parenrightvertical\"]=65078;e[\"partialdiff\"]=8706;e[\"paseqhebrew\"]=1472;e[\"pashtahebrew\"]=1433;e[\"pasquare\"]=13225;e[\"patah\"]=1463;e[\"patah11\"]=1463;e[\"patah1d\"]=1463;e[\"patah2a\"]=1463;e[\"patahhebrew\"]=1463;e[\"patahnarrowhebrew\"]=1463;e[\"patahquarterhebrew\"]=1463;e[\"patahwidehebrew\"]=1463;e[\"pazerhebrew\"]=1441;e[\"pbopomofo\"]=12550;e[\"pcircle\"]=9439;e[\"pdotaccent\"]=7767;e[\"pe\"]=1508;e[\"pecyrillic\"]=1087;e[\"pedagesh\"]=64324;e[\"pedageshhebrew\"]=64324;e[\"peezisquare\"]=13115;e[\"pefinaldageshhebrew\"]=64323;e[\"peharabic\"]=1662;e[\"peharmenian\"]=1402;e[\"pehebrew\"]=1508;e[\"pehfinalarabic\"]=64343;e[\"pehinitialarabic\"]=64344;e[\"pehiragana\"]=12410;e[\"pehmedialarabic\"]=64345;e[\"pekatakana\"]=12506;e[\"pemiddlehookcyrillic\"]=1191;e[\"perafehebrew\"]=64334;e[\"percent\"]=37;e[\"percentarabic\"]=1642;e[\"percentmonospace\"]=65285;e[\"percentsmall\"]=65130;e[\"period\"]=46;e[\"periodarmenian\"]=1417;e[\"periodcentered\"]=183;e[\"periodhalfwidth\"]=65377;e[\"periodinferior\"]=63207;e[\"periodmonospace\"]=65294;e[\"periodsmall\"]=65106;e[\"periodsuperior\"]=63208;e[\"perispomenigreekcmb\"]=834;e[\"perpendicular\"]=8869;e[\"perthousand\"]=8240;e[\"peseta\"]=8359;e[\"pfsquare\"]=13194;e[\"phabengali\"]=2475;e[\"phadeva\"]=2347;e[\"phagujarati\"]=2731;e[\"phagurmukhi\"]=2603;e[\"phi\"]=966;e[\"phi1\"]=981;e[\"phieuphacirclekorean\"]=12922;e[\"phieuphaparenkorean\"]=12826;e[\"phieuphcirclekorean\"]=12908;e[\"phieuphkorean\"]=12621;e[\"phieuphparenkorean\"]=12812;e[\"philatin\"]=632;e[\"phinthuthai\"]=3642;e[\"phisymbolgreek\"]=981;e[\"phook\"]=421;e[\"phophanthai\"]=3614;e[\"phophungthai\"]=3612;e[\"phosamphaothai\"]=3616;e[\"pi\"]=960;e[\"pieupacirclekorean\"]=12915;e[\"pieupaparenkorean\"]=12819;e[\"pieupcieuckorean\"]=12662;e[\"pieupcirclekorean\"]=12901;e[\"pieupkiyeokkorean\"]=12658;e[\"pieupkorean\"]=12610;e[\"pieupparenkorean\"]=12805;e[\"pieupsioskiyeokkorean\"]=12660;e[\"pieupsioskorean\"]=12612;e[\"pieupsiostikeutkorean\"]=12661;e[\"pieupthieuthkorean\"]=12663;e[\"pieuptikeutkorean\"]=12659;e[\"pihiragana\"]=12404;e[\"pikatakana\"]=12500;e[\"pisymbolgreek\"]=982;e[\"piwrarmenian\"]=1411;e[\"plus\"]=43;e[\"plusbelowcmb\"]=799;e[\"pluscircle\"]=8853;e[\"plusminus\"]=177;e[\"plusmod\"]=726;e[\"plusmonospace\"]=65291;e[\"plussmall\"]=65122;e[\"plussuperior\"]=8314;e[\"pmonospace\"]=65360;e[\"pmsquare\"]=13272;e[\"pohiragana\"]=12413;e[\"pointingindexdownwhite\"]=9759;e[\"pointingindexleftwhite\"]=9756;e[\"pointingindexrightwhite\"]=9758;e[\"pointingindexupwhite\"]=9757;e[\"pokatakana\"]=12509;e[\"poplathai\"]=3611;e[\"postalmark\"]=12306;e[\"postalmarkface\"]=12320;e[\"pparen\"]=9387;e[\"precedes\"]=8826;e[\"prescription\"]=8478;e[\"primemod\"]=697;e[\"primereversed\"]=8245;e[\"product\"]=8719;e[\"projective\"]=8965;e[\"prolongedkana\"]=12540;e[\"propellor\"]=8984;e[\"propersubset\"]=8834;e[\"propersuperset\"]=8835;e[\"proportion\"]=8759;e[\"proportional\"]=8733;e[\"psi\"]=968;e[\"psicyrillic\"]=1137;e[\"psilipneumatacyrilliccmb\"]=1158;e[\"pssquare\"]=13232;e[\"puhiragana\"]=12407;e[\"pukatakana\"]=12503;e[\"pvsquare\"]=13236;e[\"pwsquare\"]=13242;e[\"q\"]=113;e[\"qadeva\"]=2392;e[\"qadmahebrew\"]=1448;e[\"qafarabic\"]=1602;e[\"qaffinalarabic\"]=65238;e[\"qafinitialarabic\"]=65239;e[\"qafmedialarabic\"]=65240;e[\"qamats\"]=1464;e[\"qamats10\"]=1464;e[\"qamats1a\"]=1464;e[\"qamats1c\"]=1464;e[\"qamats27\"]=1464;e[\"qamats29\"]=1464;e[\"qamats33\"]=1464;e[\"qamatsde\"]=1464;e[\"qamatshebrew\"]=1464;e[\"qamatsnarrowhebrew\"]=1464;e[\"qamatsqatanhebrew\"]=1464;e[\"qamatsqatannarrowhebrew\"]=1464;e[\"qamatsqatanquarterhebrew\"]=1464;e[\"qamatsqatanwidehebrew\"]=1464;e[\"qamatsquarterhebrew\"]=1464;e[\"qamatswidehebrew\"]=1464;e[\"qarneyparahebrew\"]=1439;e[\"qbopomofo\"]=12561;e[\"qcircle\"]=9440;e[\"qhook\"]=672;e[\"qmonospace\"]=65361;e[\"qof\"]=1511;e[\"qofdagesh\"]=64327;e[\"qofdageshhebrew\"]=64327;e[\"qofhebrew\"]=1511;e[\"qparen\"]=9388;e[\"quarternote\"]=9833;e[\"qubuts\"]=1467;e[\"qubuts18\"]=1467;e[\"qubuts25\"]=1467;e[\"qubuts31\"]=1467;e[\"qubutshebrew\"]=1467;e[\"qubutsnarrowhebrew\"]=1467;e[\"qubutsquarterhebrew\"]=1467;e[\"qubutswidehebrew\"]=1467;e[\"question\"]=63;e[\"questionarabic\"]=1567;e[\"questionarmenian\"]=1374;e[\"questiondown\"]=191;e[\"questiondownsmall\"]=63423;e[\"questiongreek\"]=894;e[\"questionmonospace\"]=65311;e[\"questionsmall\"]=63295;e[\"quotedbl\"]=34;e[\"quotedblbase\"]=8222;e[\"quotedblleft\"]=8220;e[\"quotedblmonospace\"]=65282;e[\"quotedblprime\"]=12318;e[\"quotedblprimereversed\"]=12317;e[\"quotedblright\"]=8221;e[\"quoteleft\"]=8216;e[\"quoteleftreversed\"]=8219;e[\"quotereversed\"]=8219;e[\"quoteright\"]=8217;e[\"quoterightn\"]=329;e[\"quotesinglbase\"]=8218;e[\"quotesingle\"]=39;e[\"quotesinglemonospace\"]=65287;e[\"r\"]=114;e[\"raarmenian\"]=1404;e[\"rabengali\"]=2480;e[\"racute\"]=341;e[\"radeva\"]=2352;e[\"radical\"]=8730;e[\"radicalex\"]=63717;e[\"radoverssquare\"]=13230;e[\"radoverssquaredsquare\"]=13231;e[\"radsquare\"]=13229;e[\"rafe\"]=1471;e[\"rafehebrew\"]=1471;e[\"ragujarati\"]=2736;e[\"ragurmukhi\"]=2608;e[\"rahiragana\"]=12425;e[\"rakatakana\"]=12521;e[\"rakatakanahalfwidth\"]=65431;e[\"ralowerdiagonalbengali\"]=2545;e[\"ramiddlediagonalbengali\"]=2544;e[\"ramshorn\"]=612;e[\"ratio\"]=8758;e[\"rbopomofo\"]=12566;e[\"rcaron\"]=345;e[\"rcedilla\"]=343;e[\"rcircle\"]=9441;e[\"rcommaaccent\"]=343;e[\"rdblgrave\"]=529;e[\"rdotaccent\"]=7769;e[\"rdotbelow\"]=7771;e[\"rdotbelowmacron\"]=7773;e[\"referencemark\"]=8251;e[\"reflexsubset\"]=8838;e[\"reflexsuperset\"]=8839;e[\"registered\"]=174;e[\"registersans\"]=63720;e[\"registerserif\"]=63194;e[\"reharabic\"]=1585;e[\"reharmenian\"]=1408;e[\"rehfinalarabic\"]=65198;e[\"rehiragana\"]=12428;e[\"rekatakana\"]=12524;e[\"rekatakanahalfwidth\"]=65434;e[\"resh\"]=1512;e[\"reshdageshhebrew\"]=64328;e[\"reshhebrew\"]=1512;e[\"reversedtilde\"]=8765;e[\"reviahebrew\"]=1431;e[\"reviamugrashhebrew\"]=1431;e[\"revlogicalnot\"]=8976;e[\"rfishhook\"]=638;e[\"rfishhookreversed\"]=639;e[\"rhabengali\"]=2525;e[\"rhadeva\"]=2397;e[\"rho\"]=961;e[\"rhook\"]=637;e[\"rhookturned\"]=635;e[\"rhookturnedsuperior\"]=693;e[\"rhosymbolgreek\"]=1009;e[\"rhotichookmod\"]=734;e[\"rieulacirclekorean\"]=12913;e[\"rieulaparenkorean\"]=12817;e[\"rieulcirclekorean\"]=12899;e[\"rieulhieuhkorean\"]=12608;e[\"rieulkiyeokkorean\"]=12602;e[\"rieulkiyeoksioskorean\"]=12649;e[\"rieulkorean\"]=12601;e[\"rieulmieumkorean\"]=12603;e[\"rieulpansioskorean\"]=12652;e[\"rieulparenkorean\"]=12803;e[\"rieulphieuphkorean\"]=12607;e[\"rieulpieupkorean\"]=12604;e[\"rieulpieupsioskorean\"]=12651;e[\"rieulsioskorean\"]=12605;e[\"rieulthieuthkorean\"]=12606;e[\"rieultikeutkorean\"]=12650;e[\"rieulyeorinhieuhkorean\"]=12653;e[\"rightangle\"]=8735;e[\"righttackbelowcmb\"]=793;e[\"righttriangle\"]=8895;e[\"rihiragana\"]=12426;e[\"rikatakana\"]=12522;e[\"rikatakanahalfwidth\"]=65432;e[\"ring\"]=730;e[\"ringbelowcmb\"]=805;e[\"ringcmb\"]=778;e[\"ringhalfleft\"]=703;e[\"ringhalfleftarmenian\"]=1369;e[\"ringhalfleftbelowcmb\"]=796;e[\"ringhalfleftcentered\"]=723;e[\"ringhalfright\"]=702;e[\"ringhalfrightbelowcmb\"]=825;e[\"ringhalfrightcentered\"]=722;e[\"rinvertedbreve\"]=531;e[\"rittorusquare\"]=13137;e[\"rlinebelow\"]=7775;e[\"rlongleg\"]=636;e[\"rlonglegturned\"]=634;e[\"rmonospace\"]=65362;e[\"rohiragana\"]=12429;e[\"rokatakana\"]=12525;e[\"rokatakanahalfwidth\"]=65435;e[\"roruathai\"]=3619;e[\"rparen\"]=9389;e[\"rrabengali\"]=2524;e[\"rradeva\"]=2353;e[\"rragurmukhi\"]=2652;e[\"rreharabic\"]=1681;e[\"rrehfinalarabic\"]=64397;e[\"rrvocalicbengali\"]=2528;e[\"rrvocalicdeva\"]=2400;e[\"rrvocalicgujarati\"]=2784;e[\"rrvocalicvowelsignbengali\"]=2500;e[\"rrvocalicvowelsigndeva\"]=2372;e[\"rrvocalicvowelsigngujarati\"]=2756;e[\"rsuperior\"]=63217;e[\"rtblock\"]=9616;e[\"rturned\"]=633;e[\"rturnedsuperior\"]=692;e[\"ruhiragana\"]=12427;e[\"rukatakana\"]=12523;e[\"rukatakanahalfwidth\"]=65433;e[\"rupeemarkbengali\"]=2546;e[\"rupeesignbengali\"]=2547;e[\"rupiah\"]=63197;e[\"ruthai\"]=3620;e[\"rvocalicbengali\"]=2443;e[\"rvocalicdeva\"]=2315;e[\"rvocalicgujarati\"]=2699;e[\"rvocalicvowelsignbengali\"]=2499;e[\"rvocalicvowelsigndeva\"]=2371;e[\"rvocalicvowelsigngujarati\"]=2755;e[\"s\"]=115;e[\"sabengali\"]=2488;e[\"sacute\"]=347;e[\"sacutedotaccent\"]=7781;e[\"sadarabic\"]=1589;e[\"sadeva\"]=2360;e[\"sadfinalarabic\"]=65210;e[\"sadinitialarabic\"]=65211;e[\"sadmedialarabic\"]=65212;e[\"sagujarati\"]=2744;e[\"sagurmukhi\"]=2616;e[\"sahiragana\"]=12373;e[\"sakatakana\"]=12469;e[\"sakatakanahalfwidth\"]=65403;e[\"sallallahoualayhewasallamarabic\"]=65018;e[\"samekh\"]=1505;e[\"samekhdagesh\"]=64321;e[\"samekhdageshhebrew\"]=64321;e[\"samekhhebrew\"]=1505;e[\"saraaathai\"]=3634;e[\"saraaethai\"]=3649;e[\"saraaimaimalaithai\"]=3652;e[\"saraaimaimuanthai\"]=3651;e[\"saraamthai\"]=3635;e[\"saraathai\"]=3632;e[\"saraethai\"]=3648;e[\"saraiileftthai\"]=63622;e[\"saraiithai\"]=3637;e[\"saraileftthai\"]=63621;e[\"saraithai\"]=3636;e[\"saraothai\"]=3650;e[\"saraueeleftthai\"]=63624;e[\"saraueethai\"]=3639;e[\"saraueleftthai\"]=63623;e[\"sarauethai\"]=3638;e[\"sarauthai\"]=3640;e[\"sarauuthai\"]=3641;e[\"sbopomofo\"]=12569;e[\"scaron\"]=353;e[\"scarondotaccent\"]=7783;e[\"scedilla\"]=351;e[\"schwa\"]=601;e[\"schwacyrillic\"]=1241;e[\"schwadieresiscyrillic\"]=1243;e[\"schwahook\"]=602;e[\"scircle\"]=9442;e[\"scircumflex\"]=349;e[\"scommaaccent\"]=537;e[\"sdotaccent\"]=7777;e[\"sdotbelow\"]=7779;e[\"sdotbelowdotaccent\"]=7785;e[\"seagullbelowcmb\"]=828;e[\"second\"]=8243;e[\"secondtonechinese\"]=714;e[\"section\"]=167;e[\"seenarabic\"]=1587;e[\"seenfinalarabic\"]=65202;e[\"seeninitialarabic\"]=65203;e[\"seenmedialarabic\"]=65204;e[\"segol\"]=1462;e[\"segol13\"]=1462;e[\"segol1f\"]=1462;e[\"segol2c\"]=1462;e[\"segolhebrew\"]=1462;e[\"segolnarrowhebrew\"]=1462;e[\"segolquarterhebrew\"]=1462;e[\"segoltahebrew\"]=1426;e[\"segolwidehebrew\"]=1462;e[\"seharmenian\"]=1405;e[\"sehiragana\"]=12379;e[\"sekatakana\"]=12475;e[\"sekatakanahalfwidth\"]=65406;e[\"semicolon\"]=59;e[\"semicolonarabic\"]=1563;e[\"semicolonmonospace\"]=65307;e[\"semicolonsmall\"]=65108;e[\"semivoicedmarkkana\"]=12444;e[\"semivoicedmarkkanahalfwidth\"]=65439;e[\"sentisquare\"]=13090;e[\"sentosquare\"]=13091;e[\"seven\"]=55;e[\"sevenarabic\"]=1639;e[\"sevenbengali\"]=2541;e[\"sevencircle\"]=9318;e[\"sevencircleinversesansserif\"]=10128;e[\"sevendeva\"]=2413;e[\"seveneighths\"]=8542;e[\"sevengujarati\"]=2797;e[\"sevengurmukhi\"]=2669;e[\"sevenhackarabic\"]=1639;e[\"sevenhangzhou\"]=12327;e[\"sevenideographicparen\"]=12838;e[\"seveninferior\"]=8327;e[\"sevenmonospace\"]=65303;e[\"sevenoldstyle\"]=63287;e[\"sevenparen\"]=9338;e[\"sevenperiod\"]=9358;e[\"sevenpersian\"]=1783;e[\"sevenroman\"]=8566;e[\"sevensuperior\"]=8311;e[\"seventeencircle\"]=9328;e[\"seventeenparen\"]=9348;e[\"seventeenperiod\"]=9368;e[\"seventhai\"]=3671;e[\"sfthyphen\"]=173;e[\"shaarmenian\"]=1399;e[\"shabengali\"]=2486;e[\"shacyrillic\"]=1096;e[\"shaddaarabic\"]=1617;e[\"shaddadammaarabic\"]=64609;e[\"shaddadammatanarabic\"]=64606;e[\"shaddafathaarabic\"]=64608;e[\"shaddakasraarabic\"]=64610;e[\"shaddakasratanarabic\"]=64607;e[\"shade\"]=9618;e[\"shadedark\"]=9619;e[\"shadelight\"]=9617;e[\"shademedium\"]=9618;e[\"shadeva\"]=2358;e[\"shagujarati\"]=2742;e[\"shagurmukhi\"]=2614;e[\"shalshelethebrew\"]=1427;e[\"shbopomofo\"]=12565;e[\"shchacyrillic\"]=1097;e[\"sheenarabic\"]=1588;e[\"sheenfinalarabic\"]=65206;e[\"sheeninitialarabic\"]=65207;e[\"sheenmedialarabic\"]=65208;e[\"sheicoptic\"]=995;e[\"sheqel\"]=8362;e[\"sheqelhebrew\"]=8362;e[\"sheva\"]=1456;e[\"sheva115\"]=1456;e[\"sheva15\"]=1456;e[\"sheva22\"]=1456;e[\"sheva2e\"]=1456;e[\"shevahebrew\"]=1456;e[\"shevanarrowhebrew\"]=1456;e[\"shevaquarterhebrew\"]=1456;e[\"shevawidehebrew\"]=1456;e[\"shhacyrillic\"]=1211;e[\"shimacoptic\"]=1005;e[\"shin\"]=1513;e[\"shindagesh\"]=64329;e[\"shindageshhebrew\"]=64329;e[\"shindageshshindot\"]=64300;e[\"shindageshshindothebrew\"]=64300;e[\"shindageshsindot\"]=64301;e[\"shindageshsindothebrew\"]=64301;e[\"shindothebrew\"]=1473;e[\"shinhebrew\"]=1513;e[\"shinshindot\"]=64298;e[\"shinshindothebrew\"]=64298;e[\"shinsindot\"]=64299;e[\"shinsindothebrew\"]=64299;e[\"shook\"]=642;e[\"sigma\"]=963;e[\"sigma1\"]=962;e[\"sigmafinal\"]=962;e[\"sigmalunatesymbolgreek\"]=1010;e[\"sihiragana\"]=12375;e[\"sikatakana\"]=12471;e[\"sikatakanahalfwidth\"]=65404;e[\"siluqhebrew\"]=1469;e[\"siluqlefthebrew\"]=1469;e[\"similar\"]=8764;e[\"sindothebrew\"]=1474;e[\"siosacirclekorean\"]=12916;e[\"siosaparenkorean\"]=12820;e[\"sioscieuckorean\"]=12670;e[\"sioscirclekorean\"]=12902;e[\"sioskiyeokkorean\"]=12666;e[\"sioskorean\"]=12613;e[\"siosnieunkorean\"]=12667;e[\"siosparenkorean\"]=12806;e[\"siospieupkorean\"]=12669;e[\"siostikeutkorean\"]=12668;e[\"six\"]=54;e[\"sixarabic\"]=1638;e[\"sixbengali\"]=2540;e[\"sixcircle\"]=9317;e[\"sixcircleinversesansserif\"]=10127;e[\"sixdeva\"]=2412;e[\"sixgujarati\"]=2796;e[\"sixgurmukhi\"]=2668;e[\"sixhackarabic\"]=1638;e[\"sixhangzhou\"]=12326;e[\"sixideographicparen\"]=12837;e[\"sixinferior\"]=8326;e[\"sixmonospace\"]=65302;e[\"sixoldstyle\"]=63286;e[\"sixparen\"]=9337;e[\"sixperiod\"]=9357;e[\"sixpersian\"]=1782;e[\"sixroman\"]=8565;e[\"sixsuperior\"]=8310;e[\"sixteencircle\"]=9327;e[\"sixteencurrencydenominatorbengali\"]=2553;e[\"sixteenparen\"]=9347;e[\"sixteenperiod\"]=9367;e[\"sixthai\"]=3670;e[\"slash\"]=47;e[\"slashmonospace\"]=65295;e[\"slong\"]=383;e[\"slongdotaccent\"]=7835;e[\"smileface\"]=9786;e[\"smonospace\"]=65363;e[\"sofpasuqhebrew\"]=1475;e[\"softhyphen\"]=173;e[\"softsigncyrillic\"]=1100;e[\"sohiragana\"]=12381;e[\"sokatakana\"]=12477;e[\"sokatakanahalfwidth\"]=65407;e[\"soliduslongoverlaycmb\"]=824;e[\"solidusshortoverlaycmb\"]=823;e[\"sorusithai\"]=3625;e[\"sosalathai\"]=3624;e[\"sosothai\"]=3595;e[\"sosuathai\"]=3626;e[\"space\"]=32;e[\"spacehackarabic\"]=32;e[\"spade\"]=9824;e[\"spadesuitblack\"]=9824;e[\"spadesuitwhite\"]=9828;e[\"sparen\"]=9390;e[\"squarebelowcmb\"]=827;e[\"squarecc\"]=13252;e[\"squarecm\"]=13213;e[\"squarediagonalcrosshatchfill\"]=9641;e[\"squarehorizontalfill\"]=9636;e[\"squarekg\"]=13199;e[\"squarekm\"]=13214;e[\"squarekmcapital\"]=13262;e[\"squareln\"]=13265;e[\"squarelog\"]=13266;e[\"squaremg\"]=13198;e[\"squaremil\"]=13269;e[\"squaremm\"]=13212;e[\"squaremsquared\"]=13217;e[\"squareorthogonalcrosshatchfill\"]=9638;e[\"squareupperlefttolowerrightfill\"]=9639;e[\"squareupperrighttolowerleftfill\"]=9640;e[\"squareverticalfill\"]=9637;e[\"squarewhitewithsmallblack\"]=9635;e[\"srsquare\"]=13275;e[\"ssabengali\"]=2487;e[\"ssadeva\"]=2359;e[\"ssagujarati\"]=2743;e[\"ssangcieuckorean\"]=12617;e[\"ssanghieuhkorean\"]=12677;e[\"ssangieungkorean\"]=12672;e[\"ssangkiyeokkorean\"]=12594;e[\"ssangnieunkorean\"]=12645;e[\"ssangpieupkorean\"]=12611;e[\"ssangsioskorean\"]=12614;e[\"ssangtikeutkorean\"]=12600;e[\"ssuperior\"]=63218;e[\"sterling\"]=163;e[\"sterlingmonospace\"]=65505;e[\"strokelongoverlaycmb\"]=822;e[\"strokeshortoverlaycmb\"]=821;e[\"subset\"]=8834;e[\"subsetnotequal\"]=8842;e[\"subsetorequal\"]=8838;e[\"succeeds\"]=8827;e[\"suchthat\"]=8715;e[\"suhiragana\"]=12377;e[\"sukatakana\"]=12473;e[\"sukatakanahalfwidth\"]=65405;e[\"sukunarabic\"]=1618;e[\"summation\"]=8721;e[\"sun\"]=9788;e[\"superset\"]=8835;e[\"supersetnotequal\"]=8843;e[\"supersetorequal\"]=8839;e[\"svsquare\"]=13276;e[\"syouwaerasquare\"]=13180;e[\"t\"]=116;e[\"tabengali\"]=2468;e[\"tackdown\"]=8868;e[\"tackleft\"]=8867;e[\"tadeva\"]=2340;e[\"tagujarati\"]=2724;e[\"tagurmukhi\"]=2596;e[\"taharabic\"]=1591;e[\"tahfinalarabic\"]=65218;e[\"tahinitialarabic\"]=65219;e[\"tahiragana\"]=12383;e[\"tahmedialarabic\"]=65220;e[\"taisyouerasquare\"]=13181;e[\"takatakana\"]=12479;e[\"takatakanahalfwidth\"]=65408;e[\"tatweelarabic\"]=1600;e[\"tau\"]=964;e[\"tav\"]=1514;e[\"tavdages\"]=64330;e[\"tavdagesh\"]=64330;e[\"tavdageshhebrew\"]=64330;e[\"tavhebrew\"]=1514;e[\"tbar\"]=359;e[\"tbopomofo\"]=12554;e[\"tcaron\"]=357;e[\"tccurl\"]=680;e[\"tcedilla\"]=355;e[\"tcheharabic\"]=1670;e[\"tchehfinalarabic\"]=64379;e[\"tchehinitialarabic\"]=64380;e[\"tchehmedialarabic\"]=64381;e[\"tcircle\"]=9443;e[\"tcircumflexbelow\"]=7793;e[\"tcommaaccent\"]=355;e[\"tdieresis\"]=7831;e[\"tdotaccent\"]=7787;e[\"tdotbelow\"]=7789;e[\"tecyrillic\"]=1090;e[\"tedescendercyrillic\"]=1197;e[\"teharabic\"]=1578;e[\"tehfinalarabic\"]=65174;e[\"tehhahinitialarabic\"]=64674;e[\"tehhahisolatedarabic\"]=64524;e[\"tehinitialarabic\"]=65175;e[\"tehiragana\"]=12390;e[\"tehjeeminitialarabic\"]=64673;e[\"tehjeemisolatedarabic\"]=64523;e[\"tehmarbutaarabic\"]=1577;e[\"tehmarbutafinalarabic\"]=65172;e[\"tehmedialarabic\"]=65176;e[\"tehmeeminitialarabic\"]=64676;e[\"tehmeemisolatedarabic\"]=64526;e[\"tehnoonfinalarabic\"]=64627;e[\"tekatakana\"]=12486;e[\"tekatakanahalfwidth\"]=65411;e[\"telephone\"]=8481;e[\"telephoneblack\"]=9742;e[\"telishagedolahebrew\"]=1440;e[\"telishaqetanahebrew\"]=1449;e[\"tencircle\"]=9321;e[\"tenideographicparen\"]=12841;e[\"tenparen\"]=9341;e[\"tenperiod\"]=9361;e[\"tenroman\"]=8569;e[\"tesh\"]=679;e[\"tet\"]=1496;e[\"tetdagesh\"]=64312;e[\"tetdageshhebrew\"]=64312;e[\"tethebrew\"]=1496;e[\"tetsecyrillic\"]=1205;e[\"tevirhebrew\"]=1435;e[\"tevirlefthebrew\"]=1435;e[\"thabengali\"]=2469;e[\"thadeva\"]=2341;e[\"thagujarati\"]=2725;e[\"thagurmukhi\"]=2597;e[\"thalarabic\"]=1584;e[\"thalfinalarabic\"]=65196;e[\"thanthakhatlowleftthai\"]=63640;e[\"thanthakhatlowrightthai\"]=63639;e[\"thanthakhatthai\"]=3660;e[\"thanthakhatupperleftthai\"]=63638;e[\"theharabic\"]=1579;e[\"thehfinalarabic\"]=65178;e[\"thehinitialarabic\"]=65179;e[\"thehmedialarabic\"]=65180;e[\"thereexists\"]=8707;e[\"therefore\"]=8756;e[\"theta\"]=952;e[\"theta1\"]=977;e[\"thetasymbolgreek\"]=977;e[\"thieuthacirclekorean\"]=12921;e[\"thieuthaparenkorean\"]=12825;e[\"thieuthcirclekorean\"]=12907;e[\"thieuthkorean\"]=12620;e[\"thieuthparenkorean\"]=12811;e[\"thirteencircle\"]=9324;e[\"thirteenparen\"]=9344;e[\"thirteenperiod\"]=9364;e[\"thonangmonthothai\"]=3601;e[\"thook\"]=429;e[\"thophuthaothai\"]=3602;e[\"thorn\"]=254;e[\"thothahanthai\"]=3607;e[\"thothanthai\"]=3600;e[\"thothongthai\"]=3608;e[\"thothungthai\"]=3606;e[\"thousandcyrillic\"]=1154;e[\"thousandsseparatorarabic\"]=1644;e[\"thousandsseparatorpersian\"]=1644;e[\"three\"]=51;e[\"threearabic\"]=1635;e[\"threebengali\"]=2537;e[\"threecircle\"]=9314;e[\"threecircleinversesansserif\"]=10124;e[\"threedeva\"]=2409;e[\"threeeighths\"]=8540;e[\"threegujarati\"]=2793;e[\"threegurmukhi\"]=2665;e[\"threehackarabic\"]=1635;e[\"threehangzhou\"]=12323;e[\"threeideographicparen\"]=12834;e[\"threeinferior\"]=8323;e[\"threemonospace\"]=65299;e[\"threenumeratorbengali\"]=2550;e[\"threeoldstyle\"]=63283;e[\"threeparen\"]=9334;e[\"threeperiod\"]=9354;e[\"threepersian\"]=1779;e[\"threequarters\"]=190;e[\"threequartersemdash\"]=63198;e[\"threeroman\"]=8562;e[\"threesuperior\"]=179;e[\"threethai\"]=3667;e[\"thzsquare\"]=13204;e[\"tihiragana\"]=12385;e[\"tikatakana\"]=12481;e[\"tikatakanahalfwidth\"]=65409;e[\"tikeutacirclekorean\"]=12912;e[\"tikeutaparenkorean\"]=12816;e[\"tikeutcirclekorean\"]=12898;e[\"tikeutkorean\"]=12599;e[\"tikeutparenkorean\"]=12802;e[\"tilde\"]=732;e[\"tildebelowcmb\"]=816;e[\"tildecmb\"]=771;e[\"tildecomb\"]=771;e[\"tildedoublecmb\"]=864;e[\"tildeoperator\"]=8764;e[\"tildeoverlaycmb\"]=820;e[\"tildeverticalcmb\"]=830;e[\"timescircle\"]=8855;e[\"tipehahebrew\"]=1430;e[\"tipehalefthebrew\"]=1430;e[\"tippigurmukhi\"]=2672;e[\"titlocyrilliccmb\"]=1155;e[\"tiwnarmenian\"]=1407;e[\"tlinebelow\"]=7791;e[\"tmonospace\"]=65364;e[\"toarmenian\"]=1385;e[\"tohiragana\"]=12392;e[\"tokatakana\"]=12488;e[\"tokatakanahalfwidth\"]=65412;e[\"tonebarextrahighmod\"]=741;e[\"tonebarextralowmod\"]=745;e[\"tonebarhighmod\"]=742;e[\"tonebarlowmod\"]=744;e[\"tonebarmidmod\"]=743;e[\"tonefive\"]=445;e[\"tonesix\"]=389;e[\"tonetwo\"]=424;e[\"tonos\"]=900;e[\"tonsquare\"]=13095;e[\"topatakthai\"]=3599;e[\"tortoiseshellbracketleft\"]=12308;e[\"tortoiseshellbracketleftsmall\"]=65117;e[\"tortoiseshellbracketleftvertical\"]=65081;e[\"tortoiseshellbracketright\"]=12309;e[\"tortoiseshellbracketrightsmall\"]=65118;e[\"tortoiseshellbracketrightvertical\"]=65082;e[\"totaothai\"]=3605;e[\"tpalatalhook\"]=427;e[\"tparen\"]=9391;e[\"trademark\"]=8482;e[\"trademarksans\"]=63722;e[\"trademarkserif\"]=63195;e[\"tretroflexhook\"]=648;e[\"triagdn\"]=9660;e[\"triaglf\"]=9668;e[\"triagrt\"]=9658;e[\"triagup\"]=9650;e[\"ts\"]=678;e[\"tsadi\"]=1510;e[\"tsadidagesh\"]=64326;e[\"tsadidageshhebrew\"]=64326;e[\"tsadihebrew\"]=1510;e[\"tsecyrillic\"]=1094;e[\"tsere\"]=1461;e[\"tsere12\"]=1461;e[\"tsere1e\"]=1461;e[\"tsere2b\"]=1461;e[\"tserehebrew\"]=1461;e[\"tserenarrowhebrew\"]=1461;e[\"tserequarterhebrew\"]=1461;e[\"tserewidehebrew\"]=1461;e[\"tshecyrillic\"]=1115;e[\"tsuperior\"]=63219;e[\"ttabengali\"]=2463;e[\"ttadeva\"]=2335;e[\"ttagujarati\"]=2719;e[\"ttagurmukhi\"]=2591;e[\"tteharabic\"]=1657;e[\"ttehfinalarabic\"]=64359;e[\"ttehinitialarabic\"]=64360;e[\"ttehmedialarabic\"]=64361;e[\"tthabengali\"]=2464;e[\"tthadeva\"]=2336;e[\"tthagujarati\"]=2720;e[\"tthagurmukhi\"]=2592;e[\"tturned\"]=647;e[\"tuhiragana\"]=12388;e[\"tukatakana\"]=12484;e[\"tukatakanahalfwidth\"]=65410;e[\"tusmallhiragana\"]=12387;e[\"tusmallkatakana\"]=12483;e[\"tusmallkatakanahalfwidth\"]=65391;e[\"twelvecircle\"]=9323;e[\"twelveparen\"]=9343;e[\"twelveperiod\"]=9363;e[\"twelveroman\"]=8571;e[\"twentycircle\"]=9331;e[\"twentyhangzhou\"]=21316;e[\"twentyparen\"]=9351;e[\"twentyperiod\"]=9371;e[\"two\"]=50;e[\"twoarabic\"]=1634;e[\"twobengali\"]=2536;e[\"twocircle\"]=9313;e[\"twocircleinversesansserif\"]=10123;e[\"twodeva\"]=2408;e[\"twodotenleader\"]=8229;e[\"twodotleader\"]=8229;e[\"twodotleadervertical\"]=65072;e[\"twogujarati\"]=2792;e[\"twogurmukhi\"]=2664;e[\"twohackarabic\"]=1634;e[\"twohangzhou\"]=12322;e[\"twoideographicparen\"]=12833;e[\"twoinferior\"]=8322;e[\"twomonospace\"]=65298;e[\"twonumeratorbengali\"]=2549;e[\"twooldstyle\"]=63282;e[\"twoparen\"]=9333;e[\"twoperiod\"]=9353;e[\"twopersian\"]=1778;e[\"tworoman\"]=8561;e[\"twostroke\"]=443;e[\"twosuperior\"]=178;e[\"twothai\"]=3666;e[\"twothirds\"]=8532;e[\"u\"]=117;e[\"uacute\"]=250;e[\"ubar\"]=649;e[\"ubengali\"]=2441;e[\"ubopomofo\"]=12584;e[\"ubreve\"]=365;e[\"ucaron\"]=468;e[\"ucircle\"]=9444;e[\"ucircumflex\"]=251;e[\"ucircumflexbelow\"]=7799;e[\"ucyrillic\"]=1091;e[\"udattadeva\"]=2385;e[\"udblacute\"]=369;e[\"udblgrave\"]=533;e[\"udeva\"]=2313;e[\"udieresis\"]=252;e[\"udieresisacute\"]=472;e[\"udieresisbelow\"]=7795;e[\"udieresiscaron\"]=474;e[\"udieresiscyrillic\"]=1265;e[\"udieresisgrave\"]=476;e[\"udieresismacron\"]=470;e[\"udotbelow\"]=7909;e[\"ugrave\"]=249;e[\"ugujarati\"]=2697;e[\"ugurmukhi\"]=2569;e[\"uhiragana\"]=12358;e[\"uhookabove\"]=7911;e[\"uhorn\"]=432;e[\"uhornacute\"]=7913;e[\"uhorndotbelow\"]=7921;e[\"uhorngrave\"]=7915;e[\"uhornhookabove\"]=7917;e[\"uhorntilde\"]=7919;e[\"uhungarumlaut\"]=369;e[\"uhungarumlautcyrillic\"]=1267;e[\"uinvertedbreve\"]=535;e[\"ukatakana\"]=12454;e[\"ukatakanahalfwidth\"]=65395;e[\"ukcyrillic\"]=1145;e[\"ukorean\"]=12636;e[\"umacron\"]=363;e[\"umacroncyrillic\"]=1263;e[\"umacrondieresis\"]=7803;e[\"umatragurmukhi\"]=2625;e[\"umonospace\"]=65365;e[\"underscore\"]=95;e[\"underscoredbl\"]=8215;e[\"underscoremonospace\"]=65343;e[\"underscorevertical\"]=65075;e[\"underscorewavy\"]=65103;e[\"union\"]=8746;e[\"universal\"]=8704;e[\"uogonek\"]=371;e[\"uparen\"]=9392;e[\"upblock\"]=9600;e[\"upperdothebrew\"]=1476;e[\"upsilon\"]=965;e[\"upsilondieresis\"]=971;e[\"upsilondieresistonos\"]=944;e[\"upsilonlatin\"]=650;e[\"upsilontonos\"]=973;e[\"uptackbelowcmb\"]=797;e[\"uptackmod\"]=724;e[\"uragurmukhi\"]=2675;e[\"uring\"]=367;e[\"ushortcyrillic\"]=1118;e[\"usmallhiragana\"]=12357;e[\"usmallkatakana\"]=12453;e[\"usmallkatakanahalfwidth\"]=65385;e[\"ustraightcyrillic\"]=1199;e[\"ustraightstrokecyrillic\"]=1201;e[\"utilde\"]=361;e[\"utildeacute\"]=7801;e[\"utildebelow\"]=7797;e[\"uubengali\"]=2442;e[\"uudeva\"]=2314;e[\"uugujarati\"]=2698;e[\"uugurmukhi\"]=2570;e[\"uumatragurmukhi\"]=2626;e[\"uuvowelsignbengali\"]=2498;e[\"uuvowelsigndeva\"]=2370;e[\"uuvowelsigngujarati\"]=2754;e[\"uvowelsignbengali\"]=2497;e[\"uvowelsigndeva\"]=2369;e[\"uvowelsigngujarati\"]=2753;e[\"v\"]=118;e[\"vadeva\"]=2357;e[\"vagujarati\"]=2741;e[\"vagurmukhi\"]=2613;e[\"vakatakana\"]=12535;e[\"vav\"]=1493;e[\"vavdagesh\"]=64309;e[\"vavdagesh65\"]=64309;e[\"vavdageshhebrew\"]=64309;e[\"vavhebrew\"]=1493;e[\"vavholam\"]=64331;e[\"vavholamhebrew\"]=64331;e[\"vavvavhebrew\"]=1520;e[\"vavyodhebrew\"]=1521;e[\"vcircle\"]=9445;e[\"vdotbelow\"]=7807;e[\"vecyrillic\"]=1074;e[\"veharabic\"]=1700;e[\"vehfinalarabic\"]=64363;e[\"vehinitialarabic\"]=64364;e[\"vehmedialarabic\"]=64365;e[\"vekatakana\"]=12537;e[\"venus\"]=9792;e[\"verticalbar\"]=124;e[\"verticallineabovecmb\"]=781;e[\"verticallinebelowcmb\"]=809;e[\"verticallinelowmod\"]=716;e[\"verticallinemod\"]=712;e[\"vewarmenian\"]=1406;e[\"vhook\"]=651;e[\"vikatakana\"]=12536;e[\"viramabengali\"]=2509;e[\"viramadeva\"]=2381;e[\"viramagujarati\"]=2765;e[\"visargabengali\"]=2435;e[\"visargadeva\"]=2307;e[\"visargagujarati\"]=2691;e[\"vmonospace\"]=65366;e[\"voarmenian\"]=1400;e[\"voicediterationhiragana\"]=12446;e[\"voicediterationkatakana\"]=12542;e[\"voicedmarkkana\"]=12443;e[\"voicedmarkkanahalfwidth\"]=65438;e[\"vokatakana\"]=12538;e[\"vparen\"]=9393;e[\"vtilde\"]=7805;e[\"vturned\"]=652;e[\"vuhiragana\"]=12436;e[\"vukatakana\"]=12532;e[\"w\"]=119;e[\"wacute\"]=7811;e[\"waekorean\"]=12633;e[\"wahiragana\"]=12431;e[\"wakatakana\"]=12527;e[\"wakatakanahalfwidth\"]=65436;e[\"wakorean\"]=12632;e[\"wasmallhiragana\"]=12430;e[\"wasmallkatakana\"]=12526;e[\"wattosquare\"]=13143;e[\"wavedash\"]=12316;e[\"wavyunderscorevertical\"]=65076;e[\"wawarabic\"]=1608;e[\"wawfinalarabic\"]=65262;e[\"wawhamzaabovearabic\"]=1572;e[\"wawhamzaabovefinalarabic\"]=65158;e[\"wbsquare\"]=13277;e[\"wcircle\"]=9446;e[\"wcircumflex\"]=373;e[\"wdieresis\"]=7813;e[\"wdotaccent\"]=7815;e[\"wdotbelow\"]=7817;e[\"wehiragana\"]=12433;e[\"weierstrass\"]=8472;e[\"wekatakana\"]=12529;e[\"wekorean\"]=12638;e[\"weokorean\"]=12637;e[\"wgrave\"]=7809;e[\"whitebullet\"]=9702;e[\"whitecircle\"]=9675;e[\"whitecircleinverse\"]=9689;e[\"whitecornerbracketleft\"]=12302;e[\"whitecornerbracketleftvertical\"]=65091;e[\"whitecornerbracketright\"]=12303;e[\"whitecornerbracketrightvertical\"]=65092;e[\"whitediamond\"]=9671;e[\"whitediamondcontainingblacksmalldiamond\"]=9672;e[\"whitedownpointingsmalltriangle\"]=9663;e[\"whitedownpointingtriangle\"]=9661;e[\"whiteleftpointingsmalltriangle\"]=9667;e[\"whiteleftpointingtriangle\"]=9665;e[\"whitelenticularbracketleft\"]=12310;e[\"whitelenticularbracketright\"]=12311;e[\"whiterightpointingsmalltriangle\"]=9657;e[\"whiterightpointingtriangle\"]=9655;e[\"whitesmallsquare\"]=9643;e[\"whitesmilingface\"]=9786;e[\"whitesquare\"]=9633;e[\"whitestar\"]=9734;e[\"whitetelephone\"]=9743;e[\"whitetortoiseshellbracketleft\"]=12312;e[\"whitetortoiseshellbracketright\"]=12313;e[\"whiteuppointingsmalltriangle\"]=9653;e[\"whiteuppointingtriangle\"]=9651;e[\"wihiragana\"]=12432;e[\"wikatakana\"]=12528;e[\"wikorean\"]=12639;e[\"wmonospace\"]=65367;e[\"wohiragana\"]=12434;e[\"wokatakana\"]=12530;e[\"wokatakanahalfwidth\"]=65382;e[\"won\"]=8361;e[\"wonmonospace\"]=65510;e[\"wowaenthai\"]=3623;e[\"wparen\"]=9394;e[\"wring\"]=7832;e[\"wsuperior\"]=695;e[\"wturned\"]=653;e[\"wynn\"]=447;e[\"x\"]=120;e[\"xabovecmb\"]=829;e[\"xbopomofo\"]=12562;e[\"xcircle\"]=9447;e[\"xdieresis\"]=7821;e[\"xdotaccent\"]=7819;e[\"xeharmenian\"]=1389;e[\"xi\"]=958;e[\"xmonospace\"]=65368;e[\"xparen\"]=9395;e[\"xsuperior\"]=739;e[\"y\"]=121;e[\"yaadosquare\"]=13134;e[\"yabengali\"]=2479;e[\"yacute\"]=253;e[\"yadeva\"]=2351;e[\"yaekorean\"]=12626;e[\"yagujarati\"]=2735;e[\"yagurmukhi\"]=2607;e[\"yahiragana\"]=12420;e[\"yakatakana\"]=12516;e[\"yakatakanahalfwidth\"]=65428;e[\"yakorean\"]=12625;e[\"yamakkanthai\"]=3662;e[\"yasmallhiragana\"]=12419;e[\"yasmallkatakana\"]=12515;e[\"yasmallkatakanahalfwidth\"]=65388;e[\"yatcyrillic\"]=1123;e[\"ycircle\"]=9448;e[\"ycircumflex\"]=375;e[\"ydieresis\"]=255;e[\"ydotaccent\"]=7823;e[\"ydotbelow\"]=7925;e[\"yeharabic\"]=1610;e[\"yehbarreearabic\"]=1746;e[\"yehbarreefinalarabic\"]=64431;e[\"yehfinalarabic\"]=65266;e[\"yehhamzaabovearabic\"]=1574;e[\"yehhamzaabovefinalarabic\"]=65162;e[\"yehhamzaaboveinitialarabic\"]=65163;e[\"yehhamzaabovemedialarabic\"]=65164;e[\"yehinitialarabic\"]=65267;e[\"yehmedialarabic\"]=65268;e[\"yehmeeminitialarabic\"]=64733;e[\"yehmeemisolatedarabic\"]=64600;e[\"yehnoonfinalarabic\"]=64660;e[\"yehthreedotsbelowarabic\"]=1745;e[\"yekorean\"]=12630;e[\"yen\"]=165;e[\"yenmonospace\"]=65509;e[\"yeokorean\"]=12629;e[\"yeorinhieuhkorean\"]=12678;e[\"yerahbenyomohebrew\"]=1450;e[\"yerahbenyomolefthebrew\"]=1450;e[\"yericyrillic\"]=1099;e[\"yerudieresiscyrillic\"]=1273;e[\"yesieungkorean\"]=12673;e[\"yesieungpansioskorean\"]=12675;e[\"yesieungsioskorean\"]=12674;e[\"yetivhebrew\"]=1434;e[\"ygrave\"]=7923;e[\"yhook\"]=436;e[\"yhookabove\"]=7927;e[\"yiarmenian\"]=1397;e[\"yicyrillic\"]=1111;e[\"yikorean\"]=12642;e[\"yinyang\"]=9775;e[\"yiwnarmenian\"]=1410;e[\"ymonospace\"]=65369;e[\"yod\"]=1497;e[\"yoddagesh\"]=64313;e[\"yoddageshhebrew\"]=64313;e[\"yodhebrew\"]=1497;e[\"yodyodhebrew\"]=1522;e[\"yodyodpatahhebrew\"]=64287;e[\"yohiragana\"]=12424;e[\"yoikorean\"]=12681;e[\"yokatakana\"]=12520;e[\"yokatakanahalfwidth\"]=65430;e[\"yokorean\"]=12635;e[\"yosmallhiragana\"]=12423;e[\"yosmallkatakana\"]=12519;e[\"yosmallkatakanahalfwidth\"]=65390;e[\"yotgreek\"]=1011;e[\"yoyaekorean\"]=12680;e[\"yoyakorean\"]=12679;e[\"yoyakthai\"]=3618;e[\"yoyingthai\"]=3597;e[\"yparen\"]=9396;e[\"ypogegrammeni\"]=890;e[\"ypogegrammenigreekcmb\"]=837;e[\"yr\"]=422;e[\"yring\"]=7833;e[\"ysuperior\"]=696;e[\"ytilde\"]=7929;e[\"yturned\"]=654;e[\"yuhiragana\"]=12422;e[\"yuikorean\"]=12684;e[\"yukatakana\"]=12518;e[\"yukatakanahalfwidth\"]=65429;e[\"yukorean\"]=12640;e[\"yusbigcyrillic\"]=1131;e[\"yusbigiotifiedcyrillic\"]=1133;e[\"yuslittlecyrillic\"]=1127;e[\"yuslittleiotifiedcyrillic\"]=1129;e[\"yusmallhiragana\"]=12421;e[\"yusmallkatakana\"]=12517;e[\"yusmallkatakanahalfwidth\"]=65389;e[\"yuyekorean\"]=12683;e[\"yuyeokorean\"]=12682;e[\"yyabengali\"]=2527;e[\"yyadeva\"]=2399;e[\"z\"]=122;e[\"zaarmenian\"]=1382;e[\"zacute\"]=378;e[\"zadeva\"]=2395;e[\"zagurmukhi\"]=2651;e[\"zaharabic\"]=1592;e[\"zahfinalarabic\"]=65222;e[\"zahinitialarabic\"]=65223;e[\"zahiragana\"]=12374;e[\"zahmedialarabic\"]=65224;e[\"zainarabic\"]=1586;e[\"zainfinalarabic\"]=65200;e[\"zakatakana\"]=12470;e[\"zaqefgadolhebrew\"]=1429;e[\"zaqefqatanhebrew\"]=1428;e[\"zarqahebrew\"]=1432;e[\"zayin\"]=1494;e[\"zayindagesh\"]=64310;e[\"zayindageshhebrew\"]=64310;e[\"zayinhebrew\"]=1494;e[\"zbopomofo\"]=12567;e[\"zcaron\"]=382;e[\"zcircle\"]=9449;e[\"zcircumflex\"]=7825;e[\"zcurl\"]=657;e[\"zdot\"]=380;e[\"zdotaccent\"]=380;e[\"zdotbelow\"]=7827;e[\"zecyrillic\"]=1079;e[\"zedescendercyrillic\"]=1177;e[\"zedieresiscyrillic\"]=1247;e[\"zehiragana\"]=12380;e[\"zekatakana\"]=12476;e[\"zero\"]=48;e[\"zeroarabic\"]=1632;e[\"zerobengali\"]=2534;e[\"zerodeva\"]=2406;e[\"zerogujarati\"]=2790;e[\"zerogurmukhi\"]=2662;e[\"zerohackarabic\"]=1632;e[\"zeroinferior\"]=8320;e[\"zeromonospace\"]=65296;e[\"zerooldstyle\"]=63280;e[\"zeropersian\"]=1776;e[\"zerosuperior\"]=8304;e[\"zerothai\"]=3664;e[\"zerowidthjoiner\"]=65279;e[\"zerowidthnonjoiner\"]=8204;e[\"zerowidthspace\"]=8203;e[\"zeta\"]=950;e[\"zhbopomofo\"]=12563;e[\"zhearmenian\"]=1386;e[\"zhebrevecyrillic\"]=1218;e[\"zhecyrillic\"]=1078;e[\"zhedescendercyrillic\"]=1175;e[\"zhedieresiscyrillic\"]=1245;e[\"zihiragana\"]=12376;e[\"zikatakana\"]=12472;e[\"zinorhebrew\"]=1454;e[\"zlinebelow\"]=7829;e[\"zmonospace\"]=65370;e[\"zohiragana\"]=12382;e[\"zokatakana\"]=12478;e[\"zparen\"]=9397;e[\"zretroflexhook\"]=656;e[\"zstroke\"]=438;e[\"zuhiragana\"]=12378;e[\"zukatakana\"]=12474;e[\".notdef\"]=0;e[\"angbracketleftbig\"]=9001;e[\"angbracketleftBig\"]=9001;e[\"angbracketleftbigg\"]=9001;e[\"angbracketleftBigg\"]=9001;e[\"angbracketrightBig\"]=9002;e[\"angbracketrightbig\"]=9002;e[\"angbracketrightBigg\"]=9002;e[\"angbracketrightbigg\"]=9002;e[\"arrowhookleft\"]=8618;e[\"arrowhookright\"]=8617;e[\"arrowlefttophalf\"]=8636;e[\"arrowleftbothalf\"]=8637;e[\"arrownortheast\"]=8599;e[\"arrownorthwest\"]=8598;e[\"arrowrighttophalf\"]=8640;e[\"arrowrightbothalf\"]=8641;e[\"arrowsoutheast\"]=8600;e[\"arrowsouthwest\"]=8601;e[\"backslashbig\"]=8726;e[\"backslashBig\"]=8726;e[\"backslashBigg\"]=8726;e[\"backslashbigg\"]=8726;e[\"bardbl\"]=8214;e[\"bracehtipdownleft\"]=65079;e[\"bracehtipdownright\"]=65079;e[\"bracehtipupleft\"]=65080;e[\"bracehtipupright\"]=65080;e[\"braceleftBig\"]=123;e[\"braceleftbig\"]=123;e[\"braceleftbigg\"]=123;e[\"braceleftBigg\"]=123;e[\"bracerightBig\"]=125;e[\"bracerightbig\"]=125;e[\"bracerightbigg\"]=125;e[\"bracerightBigg\"]=125;e[\"bracketleftbig\"]=91;e[\"bracketleftBig\"]=91;e[\"bracketleftbigg\"]=91;e[\"bracketleftBigg\"]=91;e[\"bracketrightBig\"]=93;e[\"bracketrightbig\"]=93;e[\"bracketrightbigg\"]=93;e[\"bracketrightBigg\"]=93;e[\"ceilingleftbig\"]=8968;e[\"ceilingleftBig\"]=8968;e[\"ceilingleftBigg\"]=8968;e[\"ceilingleftbigg\"]=8968;e[\"ceilingrightbig\"]=8969;e[\"ceilingrightBig\"]=8969;e[\"ceilingrightbigg\"]=8969;e[\"ceilingrightBigg\"]=8969;e[\"circledotdisplay\"]=8857;e[\"circledottext\"]=8857;e[\"circlemultiplydisplay\"]=8855;e[\"circlemultiplytext\"]=8855;e[\"circleplusdisplay\"]=8853;e[\"circleplustext\"]=8853;e[\"contintegraldisplay\"]=8750;e[\"contintegraltext\"]=8750;e[\"coproductdisplay\"]=8720;e[\"coproducttext\"]=8720;e[\"floorleftBig\"]=8970;e[\"floorleftbig\"]=8970;e[\"floorleftbigg\"]=8970;e[\"floorleftBigg\"]=8970;e[\"floorrightbig\"]=8971;e[\"floorrightBig\"]=8971;e[\"floorrightBigg\"]=8971;e[\"floorrightbigg\"]=8971;e[\"hatwide\"]=770;e[\"hatwider\"]=770;e[\"hatwidest\"]=770;e[\"intercal\"]=7488;e[\"integraldisplay\"]=8747;e[\"integraltext\"]=8747;e[\"intersectiondisplay\"]=8898;e[\"intersectiontext\"]=8898;e[\"logicalanddisplay\"]=8743;e[\"logicalandtext\"]=8743;e[\"logicalordisplay\"]=8744;e[\"logicalortext\"]=8744;e[\"parenleftBig\"]=40;e[\"parenleftbig\"]=40;e[\"parenleftBigg\"]=40;e[\"parenleftbigg\"]=40;e[\"parenrightBig\"]=41;e[\"parenrightbig\"]=41;e[\"parenrightBigg\"]=41;e[\"parenrightbigg\"]=41;e[\"prime\"]=8242;e[\"productdisplay\"]=8719;e[\"producttext\"]=8719;e[\"radicalbig\"]=8730;e[\"radicalBig\"]=8730;e[\"radicalBigg\"]=8730;e[\"radicalbigg\"]=8730;e[\"radicalbt\"]=8730;e[\"radicaltp\"]=8730;e[\"radicalvertex\"]=8730;e[\"slashbig\"]=47;e[\"slashBig\"]=47;e[\"slashBigg\"]=47;e[\"slashbigg\"]=47;e[\"summationdisplay\"]=8721;e[\"summationtext\"]=8721;e[\"tildewide\"]=732;e[\"tildewider\"]=732;e[\"tildewidest\"]=732;e[\"uniondisplay\"]=8899;e[\"unionmultidisplay\"]=8846;e[\"unionmultitext\"]=8846;e[\"unionsqdisplay\"]=8852;e[\"unionsqtext\"]=8852;e[\"uniontext\"]=8899;e[\"vextenddouble\"]=8741;e[\"vextendsingle\"]=8739});var i=r(function(e){e[\"space\"]=32;e[\"a1\"]=9985;e[\"a2\"]=9986;e[\"a202\"]=9987;e[\"a3\"]=9988;e[\"a4\"]=9742;e[\"a5\"]=9990;e[\"a119\"]=9991;e[\"a118\"]=9992;e[\"a117\"]=9993;e[\"a11\"]=9755;e[\"a12\"]=9758;e[\"a13\"]=9996;e[\"a14\"]=9997;e[\"a15\"]=9998;e[\"a16\"]=9999;e[\"a105\"]=1e4;e[\"a17\"]=10001;e[\"a18\"]=10002;e[\"a19\"]=10003;e[\"a20\"]=10004;e[\"a21\"]=10005;e[\"a22\"]=10006;e[\"a23\"]=10007;e[\"a24\"]=10008;e[\"a25\"]=10009;e[\"a26\"]=10010;e[\"a27\"]=10011;e[\"a28\"]=10012;e[\"a6\"]=10013;e[\"a7\"]=10014;e[\"a8\"]=10015;e[\"a9\"]=10016;e[\"a10\"]=10017;e[\"a29\"]=10018;e[\"a30\"]=10019;e[\"a31\"]=10020;e[\"a32\"]=10021;e[\"a33\"]=10022;e[\"a34\"]=10023;e[\"a35\"]=9733;e[\"a36\"]=10025;e[\"a37\"]=10026;e[\"a38\"]=10027;e[\"a39\"]=10028;e[\"a40\"]=10029;e[\"a41\"]=10030;e[\"a42\"]=10031;e[\"a43\"]=10032;e[\"a44\"]=10033;e[\"a45\"]=10034;e[\"a46\"]=10035;e[\"a47\"]=10036;e[\"a48\"]=10037;e[\"a49\"]=10038;e[\"a50\"]=10039;e[\"a51\"]=10040;e[\"a52\"]=10041;e[\"a53\"]=10042;e[\"a54\"]=10043;e[\"a55\"]=10044;e[\"a56\"]=10045;e[\"a57\"]=10046;e[\"a58\"]=10047;e[\"a59\"]=10048;e[\"a60\"]=10049;e[\"a61\"]=10050;e[\"a62\"]=10051;e[\"a63\"]=10052;e[\"a64\"]=10053;e[\"a65\"]=10054;e[\"a66\"]=10055;e[\"a67\"]=10056;e[\"a68\"]=10057;e[\"a69\"]=10058;e[\"a70\"]=10059;e[\"a71\"]=9679;e[\"a72\"]=10061;e[\"a73\"]=9632;e[\"a74\"]=10063;e[\"a203\"]=10064;e[\"a75\"]=10065;e[\"a204\"]=10066;e[\"a76\"]=9650;e[\"a77\"]=9660;e[\"a78\"]=9670;e[\"a79\"]=10070;e[\"a81\"]=9687;e[\"a82\"]=10072;e[\"a83\"]=10073;e[\"a84\"]=10074;e[\"a97\"]=10075;e[\"a98\"]=10076;e[\"a99\"]=10077;e[\"a100\"]=10078;e[\"a101\"]=10081;e[\"a102\"]=10082;e[\"a103\"]=10083;e[\"a104\"]=10084;e[\"a106\"]=10085;e[\"a107\"]=10086;e[\"a108\"]=10087;e[\"a112\"]=9827;e[\"a111\"]=9830;e[\"a110\"]=9829;e[\"a109\"]=9824;e[\"a120\"]=9312;e[\"a121\"]=9313;e[\"a122\"]=9314;e[\"a123\"]=9315;e[\"a124\"]=9316;e[\"a125\"]=9317;e[\"a126\"]=9318;e[\"a127\"]=9319;e[\"a128\"]=9320;e[\"a129\"]=9321;e[\"a130\"]=10102;e[\"a131\"]=10103;e[\"a132\"]=10104;e[\"a133\"]=10105;e[\"a134\"]=10106;e[\"a135\"]=10107;e[\"a136\"]=10108;e[\"a137\"]=10109;e[\"a138\"]=10110;e[\"a139\"]=10111;e[\"a140\"]=10112;e[\"a141\"]=10113;e[\"a142\"]=10114;e[\"a143\"]=10115;e[\"a144\"]=10116;e[\"a145\"]=10117;e[\"a146\"]=10118;e[\"a147\"]=10119;e[\"a148\"]=10120;e[\"a149\"]=10121;e[\"a150\"]=10122;e[\"a151\"]=10123;e[\"a152\"]=10124;e[\"a153\"]=10125;e[\"a154\"]=10126;e[\"a155\"]=10127;e[\"a156\"]=10128;e[\"a157\"]=10129;e[\"a158\"]=10130;e[\"a159\"]=10131;e[\"a160\"]=10132;e[\"a161\"]=8594;e[\"a163\"]=8596;e[\"a164\"]=8597;e[\"a196\"]=10136;e[\"a165\"]=10137;e[\"a192\"]=10138;e[\"a166\"]=10139;e[\"a167\"]=10140;e[\"a168\"]=10141;e[\"a169\"]=10142;e[\"a170\"]=10143;e[\"a171\"]=10144;e[\"a172\"]=10145;e[\"a173\"]=10146;e[\"a162\"]=10147;e[\"a174\"]=10148;e[\"a175\"]=10149;e[\"a176\"]=10150;e[\"a177\"]=10151;e[\"a178\"]=10152;e[\"a179\"]=10153;e[\"a193\"]=10154;e[\"a180\"]=10155;e[\"a199\"]=10156;e[\"a181\"]=10157;e[\"a200\"]=10158;e[\"a182\"]=10159;e[\"a201\"]=10161;e[\"a183\"]=10162;e[\"a184\"]=10163;e[\"a197\"]=10164;e[\"a185\"]=10165;e[\"a194\"]=10166;e[\"a198\"]=10167;e[\"a186\"]=10168;e[\"a195\"]=10169;e[\"a187\"]=10170;e[\"a188\"]=10171;e[\"a189\"]=10172;e[\"a190\"]=10173;e[\"a191\"]=10174;e[\"a89\"]=10088;e[\"a90\"]=10089;e[\"a93\"]=10090;e[\"a94\"]=10091;e[\"a91\"]=10092;e[\"a92\"]=10093;e[\"a205\"]=10094;e[\"a85\"]=10095;e[\"a206\"]=10096;e[\"a86\"]=10097;e[\"a87\"]=10098;e[\"a88\"]=10099;e[\"a95\"]=10100;e[\"a96\"]=10101;e[\".notdef\"]=0});e.getGlyphsUnicode=a;e.getDingbatsGlyphsUnicode=i});(function(e,t){t(e.pdfjsCoreJbig2={},e.pdfjsSharedUtil,e.pdfjsCoreArithmeticDecoder)})(this,function(e,t,r){var a=t.error;var i=t.log2;var n=t.readInt8;var s=t.readUint16;var o=t.readUint32;var l=t.shadow;var c=r.ArithmeticDecoder;var h=function e(){function t(){}t.prototype={getContexts:function(e){if(e in this){return this[e]}return this[e]=new Int8Array(1<<16)}};function r(e,t,r){this.data=e;this.start=t;this.end=r}r.prototype={get decoder(){var e=new c(this.data,this.start,this.end);return l(this,\"decoder\",e)},get contextCache(){var e=new t;return l(this,\"contextCache\",e)}};function h(e,t,r){var a=e.getContexts(t);var i=1;function n(e){var t=0;for(var n=0;n<e;n++){var s=r.readBit(a,i);i=i<256?i<<1|s:(i<<1|s)&511|256;t=t<<1|s}return t>>>0}var s=n(1);var o=n(1)?n(1)?n(1)?n(1)?n(1)?n(32)+4436:n(12)+340:n(8)+84:n(6)+20:n(4)+4:n(2);return s===0?o:o>0?-o:null}function u(e,t,r){var a=e.getContexts(\"IAID\");var i=1;for(var n=0;n<r;n++){var s=t.readBit(a,i);i=i<<1|s}if(r<31){return i&(1<<r)-1}return i&2147483647}var f=[\"SymbolDictionary\",null,null,null,\"IntermediateTextRegion\",null,\"ImmediateTextRegion\",\"ImmediateLosslessTextRegion\",null,null,null,null,null,null,null,null,\"patternDictionary\",null,null,null,\"IntermediateHalftoneRegion\",null,\"ImmediateHalftoneRegion\",\"ImmediateLosslessHalftoneRegion\",null,null,null,null,null,null,null,null,null,null,null,null,\"IntermediateGenericRegion\",null,\"ImmediateGenericRegion\",\"ImmediateLosslessGenericRegion\",\"IntermediateGenericRefinementRegion\",null,\"ImmediateGenericRefinementRegion\",\"ImmediateLosslessGenericRefinementRegion\",null,null,null,null,\"PageInformation\",\"EndOfPage\",\"EndOfStripe\",\"EndOfFile\",\"Profiles\",\"Tables\",null,null,null,null,null,null,null,null,\"Extension\"];var d=[[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:2,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-2,y:0},{x:-1,y:0}],[{x:-3,y:-1},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}]];var g=[{coding:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:-1,y:1},{x:0,y:1},{x:1,y:1}]},{coding:[{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}]}];var v=[39717,1941,229,405];var p=[32,8];function m(e,t,r){var a=r.decoder;var i=r.contextCache.getContexts(\"GB\");var n,s,o,l,c,h,u,f=[];var d=31735;for(s=0;s<t;s++){c=f[s]=new Uint8Array(e);h=s<1?c:f[s-1];u=s<2?c:f[s-2];n=u[0]<<13|u[1]<<12|u[2]<<11|h[0]<<7|h[1]<<6|h[2]<<5|h[3]<<4;for(o=0;o<e;o++){c[o]=l=a.readBit(i,n);n=(n&d)<<1|(o+3<e?u[o+3]<<11:0)|(o+4<e?h[o+4]<<4:0)|l}}return f}function b(e,t,r,i,n,s,o,l){if(e){a(\"JBIG2 error: MMR encoding is not supported\")}if(i===0&&!s&&!n&&o.length===4&&o[0].x===3&&o[0].y===-1&&o[1].x===-3&&o[1].y===-1&&o[2].x===2&&o[2].y===-2&&o[3].x===-2&&o[3].y===-2){return m(t,r,l)}var c=!!s;var h=d[i].concat(o);h.sort(function(e,t){return e.y-t.y||e.x-t.x});var u=h.length;var f=new Int8Array(u);var g=new Int8Array(u);var p=[];var b=0,y=0,k=0,w=0;var C,x;for(x=0;x<u;x++){f[x]=h[x].x;g[x]=h[x].y;y=Math.min(y,h[x].x);k=Math.max(k,h[x].x);w=Math.min(w,h[x].y);if(x<u-1&&h[x].y===h[x+1].y&&h[x].x===h[x+1].x-1){b|=1<<u-1-x}else{p.push(x)}}var S=p.length;var A=new Int8Array(S);var I=new Int8Array(S);var B=new Uint16Array(S);for(C=0;C<S;C++){x=p[C];A[C]=h[x].x;I[C]=h[x].y;B[C]=1<<u-1-x}var R=-y;var T=-w;var O=t-k;var P=v[i];var E=new Uint8Array(t);var M=[];var L=l.decoder;var D=l.contextCache.getContexts(\"GB\");var F=0,U,j,q,N=0,_,z;for(var H=0;H<r;H++){if(n){var G=L.readBit(D,P);F^=G;if(F){M.push(E);continue}}E=new Uint8Array(E);M.push(E);for(U=0;U<t;U++){if(c&&s[H][U]){E[U]=0;continue}if(U>=R&&U<O&&H>=T){N=N<<1&b;for(x=0;x<S;x++){j=H+I[x];q=U+A[x];_=M[j][q];if(_){_=B[x];N|=_}}}else{N=0;z=u-1;for(x=0;x<u;x++,z--){q=U+f[x];if(q>=0&&q<t){j=H+g[x];if(j>=0){_=M[j][q];if(_){N|=_<<z}}}}}var X=L.readBit(D,N);E[U]=X}}return M}function y(e,t,r,i,n,s,o,l,c){var h=g[r].coding;if(r===0){h=h.concat([l[0]])}var u=h.length;var f=new Int32Array(u);var d=new Int32Array(u);var v;for(v=0;v<u;v++){f[v]=h[v].x;d[v]=h[v].y}var m=g[r].reference;if(r===0){m=m.concat([l[1]])}var b=m.length;var y=new Int32Array(b);var k=new Int32Array(b);for(v=0;v<b;v++){y[v]=m[v].x;k[v]=m[v].y}var w=i[0].length;var C=i.length;var x=p[r];var S=[];var A=c.decoder;var I=c.contextCache.getContexts(\"GR\");var B=0;for(var R=0;R<t;R++){if(o){var T=A.readBit(I,x);B^=T;if(B){a(\"JBIG2 error: prediction is not supported\")}}var O=new Uint8Array(e);S.push(O);for(var P=0;P<e;P++){var E,M;var L=0;for(v=0;v<u;v++){E=R+d[v];M=P+f[v];if(E<0||M<0||M>=e){L<<=1}else{L=L<<1|S[E][M]}}for(v=0;v<b;v++){E=R+k[v]+s;M=P+y[v]+n;if(E<0||E>=C||M<0||M>=w){L<<=1}else{L=L<<1|i[E][M]}}var D=A.readBit(I,L);O[P]=D}}return S}function k(e,t,r,n,s,o,l,c,f,d,g){if(e){a(\"JBIG2 error: huffman is not supported\")}var v=[];var p=0;var m=i(r.length+n);var k=g.decoder;var C=g.contextCache;while(v.length<n){var x=h(C,\"IADH\",k);p+=x;var S=0;var A=0;while(true){var I=h(C,\"IADW\",k);if(I===null){break}S+=I;A+=S;var B;if(t){var R=h(C,\"IAAI\",k);if(R>1){B=w(e,t,S,p,0,R,1,r.concat(v),m,0,0,1,0,o,f,d,g)}else{var T=u(C,k,m);var O=h(C,\"IARDX\",k);var P=h(C,\"IARDY\",k);var E=T<r.length?r[T]:v[T-r.length];B=y(S,p,f,E,O,P,false,d,g)}}else{B=b(false,S,p,l,false,null,c,g)}v.push(B)}}var M=[];var L=[],D=false;var F=r.length+n;while(L.length<F){var U=h(C,\"IAEX\",k);while(U--){L.push(D)}D=!D}for(var j=0,q=r.length;j<q;j++){if(L[j]){M.push(r[j])}}for(var N=0;N<n;j++,N++){if(L[j]){M.push(v[N])}}return M}function w(e,t,r,i,n,s,o,l,c,f,d,g,v,p,m,b,k){if(e){a(\"JBIG2 error: huffman is not supported\")}var w=[];var C,x;for(C=0;C<i;C++){x=new Uint8Array(r);if(n){for(var S=0;S<r;S++){x[S]=n}}w.push(x)}var A=k.decoder;var I=k.contextCache;var B=-h(I,\"IADT\",A);var R=0;C=0;while(C<s){var T=h(I,\"IADT\",A);B+=T;var O=h(I,\"IAFS\",A);R+=O;var P=R;do{var E=o===1?0:h(I,\"IAIT\",A);var M=o*B+E;var L=u(I,A,c);var D=t&&h(I,\"IARI\",A);var F=l[L];var U=F[0].length;var j=F.length;if(D){var q=h(I,\"IARDW\",A);var N=h(I,\"IARDH\",A);var _=h(I,\"IARDX\",A);var z=h(I,\"IARDY\",A);U+=q;j+=N;F=y(U,j,m,F,(q>>1)+_,(N>>1)+z,false,b,k)}var H=M-(g&1?0:j);var G=P-(g&2?U:0);var X,W,V;if(f){for(X=0;X<j;X++){x=w[G+X];if(!x){continue}V=F[X];var K=Math.min(r-H,U);switch(v){case 0:for(W=0;W<K;W++){x[H+W]|=V[W]}break;case 2:for(W=0;W<K;W++){x[H+W]^=V[W]}break;default:a(\"JBIG2 error: operator \"+v+\" is not supported\")}}P+=j-1}else{for(W=0;W<j;W++){x=w[H+W];if(!x){continue}V=F[W];switch(v){case 0:for(X=0;X<U;X++){x[G+X]|=V[X]}break;case 2:for(X=0;X<U;X++){x[G+X]^=V[X]}break;default:a(\"JBIG2 error: operator \"+v+\" is not supported\")}}P+=U-1}C++;var Y=h(I,\"IADS\",A);if(Y===null){break}P+=Y+d}while(true)}return w}function C(e,t){var r={};r.number=o(e,t);var i=e[t+4];var n=i&63;if(!f[n]){a(\"JBIG2 error: invalid segment type: \"+n)}r.type=n;r.typeName=f[n];r.deferredNonRetain=!!(i&128);var l=!!(i&64);var c=e[t+5];var h=c>>5&7;var u=[c&31];var d=t+6;if(c===7){h=o(e,d-1)&536870911;d+=3;var g=h+7>>3;u[0]=e[d++];while(--g>0){u.push(e[d++])}}else if(c===5||c===6){a(\"JBIG2 error: invalid referred-to flags\")}r.retainBits=u;var v=r.number<=256?1:r.number<=65536?2:4;var p=[];var m,b;for(m=0;m<h;m++){var y=v===1?e[d]:v===2?s(e,d):o(e,d);p.push(y);d+=v}r.referredTo=p;if(!l){r.pageAssociation=e[d++]}else{r.pageAssociation=o(e,d);d+=4}r.length=o(e,d);d+=4;if(r.length===4294967295){if(n===38){var k=S(e,d);var w=e[d+A];var C=!!(w&1);var x=6;var I=new Uint8Array(x);if(!C){I[0]=255;I[1]=172}I[2]=k.height>>>24&255;I[3]=k.height>>16&255;I[4]=k.height>>8&255;I[5]=k.height&255;for(m=d,b=e.length;m<b;m++){var B=0;while(B<x&&I[B]===e[m+B]){B++}if(B===x){r.length=m+x;break}}if(r.length===4294967295){a(\"JBIG2 error: segment end was not found\")}}else{a(\"JBIG2 error: invalid unknown segment length\")}}r.headerEnd=d;return r}function x(e,t,r,a){var i=[];var n=r;while(n<a){var s=C(t,n);n=s.headerEnd;var o={header:s,data:t};if(!e.randomAccess){o.start=n;n+=s.length;o.end=n}i.push(o);if(s.type===51){break}}if(e.randomAccess){for(var l=0,c=i.length;l<c;l++){i[l].start=n;n+=i[l].header.length;i[l].end=n}}return i}function S(e,t){return{width:o(e,t),height:o(e,t+4),x:o(e,t+8),y:o(e,t+12),combinationOperator:e[t+16]&7}}var A=17;function I(e,t){var r=e.header;var i=e.data,l=e.start,c=e.end;var h,u,f,d;switch(r.type){case 0:var g={};var v=s(i,l);g.huffman=!!(v&1);g.refinement=!!(v&2);g.huffmanDHSelector=v>>2&3;g.huffmanDWSelector=v>>4&3;g.bitmapSizeSelector=v>>6&1;g.aggregationInstancesSelector=v>>7&1;g.bitmapCodingContextUsed=!!(v&256);g.bitmapCodingContextRetained=!!(v&512);g.template=v>>10&3;g.refinementTemplate=v>>12&1;l+=2;if(!g.huffman){d=g.template===0?4:1;u=[];for(f=0;f<d;f++){u.push({x:n(i,l),y:n(i,l+1)});l+=2}g.at=u}if(g.refinement&&!g.refinementTemplate){u=[];for(f=0;f<2;f++){u.push({x:n(i,l),y:n(i,l+1)});l+=2}g.refinementAt=u}g.numberOfExportedSymbols=o(i,l);l+=4;g.numberOfNewSymbols=o(i,l);l+=4;h=[g,r.number,r.referredTo,i,l,c];break;case 6:case 7:var p={};p.info=S(i,l);l+=A;var m=s(i,l);l+=2;p.huffman=!!(m&1);p.refinement=!!(m&2);p.stripSize=1<<(m>>2&3);p.referenceCorner=m>>4&3;p.transposed=!!(m&64);p.combinationOperator=m>>7&3;p.defaultPixelValue=m>>9&1;p.dsOffset=m<<17>>27;p.refinementTemplate=m>>15&1;if(p.huffman){var b=s(i,l);l+=2;p.huffmanFS=b&3;p.huffmanDS=b>>2&3;p.huffmanDT=b>>4&3;p.huffmanRefinementDW=b>>6&3;p.huffmanRefinementDH=b>>8&3;p.huffmanRefinementDX=b>>10&3;p.huffmanRefinementDY=b>>12&3;p.huffmanRefinementSizeSelector=!!(b&14)}if(p.refinement&&!p.refinementTemplate){u=[];for(f=0;f<2;f++){u.push({x:n(i,l),y:n(i,l+1)});l+=2}p.refinementAt=u}p.numberOfSymbolInstances=o(i,l);l+=4;if(p.huffman){a(\"JBIG2 error: huffman is not supported\")}h=[p,r.referredTo,i,l,c];break;case 38:case 39:var y={};y.info=S(i,l);l+=A;var k=i[l++];y.mmr=!!(k&1);y.template=k>>1&3;y.prediction=!!(k&8);if(!y.mmr){d=y.template===0?4:1;u=[];for(f=0;f<d;f++){u.push({x:n(i,l),y:n(i,l+1)});l+=2}y.at=u}h=[y,i,l,c];break;case 48:var w={width:o(i,l),height:o(i,l+4),resolutionX:o(i,l+8),resolutionY:o(i,l+12)};if(w.height===4294967295){delete w.height}var C=i[l+16];var x=s(i,l+17);w.lossless=!!(C&1);w.refinement=!!(C&2);w.defaultPixelValue=C>>2&1;w.combinationOperator=C>>3&3;w.requiresBuffer=!!(C&32);w.combinationOperatorOverride=!!(C&64);h=[w];break;case 49:break;case 50:break;case 51:break;case 62:break;default:a(\"JBIG2 error: segment type \"+r.typeName+\"(\"+r.type+\") is not implemented\")}var I=\"on\"+r.typeName;if(I in t){t[I].apply(t,h)}}function B(e,t){for(var r=0,a=e.length;r<a;r++){I(e[r],t)}}function R(e,t,r){var i=t;if(e[i]!==151||e[i+1]!==74||e[i+2]!==66||e[i+3]!==50||e[i+4]!==13||e[i+5]!==10||e[i+6]!==26||e[i+7]!==10){a(\"JBIG2 error: invalid header\")}var n={};i+=8;var s=e[i++];n.randomAccess=!(s&1);if(!(s&2)){n.numberOfPages=o(e,i);i+=4}var l=x(n,e,i,r);a(\"Not implemented\")}function T(e){var t=new O;for(var r=0,a=e.length;r<a;r++){var i=e[r];var n=x({},i.data,i.start,i.end);B(n,t)}return t.buffer}function O(){}O.prototype={onPageInformation:function e(t){this.currentPageInfo=t;var r=t.width+7>>3;var a=new Uint8Array(r*t.height);if(t.defaultPixelValue){for(var i=0,n=a.length;i<n;i++){a[i]=255}}this.buffer=a},drawBitmap:function e(t,r){var i=this.currentPageInfo;var n=t.width,s=t.height;var o=i.width+7>>3;var l=i.combinationOperatorOverride?t.combinationOperator:i.combinationOperator;var c=this.buffer;var h=128>>(t.x&7);var u=t.y*o+(t.x>>3);var f,d,g,v;switch(l){case 0:for(f=0;f<s;f++){g=h;v=u;for(d=0;d<n;d++){if(r[f][d]){c[v]|=g}g>>=1;if(!g){g=128;v++}}u+=o}break;case 2:for(f=0;f<s;f++){g=h;v=u;for(d=0;d<n;d++){if(r[f][d]){c[v]^=g}g>>=1;if(!g){g=128;v++}}u+=o}break;default:a(\"JBIG2 error: operator \"+l+\" is not supported\")}},onImmediateGenericRegion:function e(t,a,i,n){var s=t.info;var o=new r(a,i,n);var l=b(t.mmr,s.width,s.height,t.template,t.prediction,null,t.at,o);this.drawBitmap(s,l)},onImmediateLosslessGenericRegion:function e(){this.onImmediateGenericRegion.apply(this,arguments)},onSymbolDictionary:function e(t,i,n,s,o,l){var c;if(t.huffman){a(\"JBIG2 error: huffman is not supported\")}var h=this.symbols;if(!h){this.symbols=h={}}var u=[];for(var f=0,d=n.length;f<d;f++){u=u.concat(h[n[f]])}var g=new r(s,o,l);h[i]=k(t.huffman,t.refinement,u,t.numberOfNewSymbols,t.numberOfExportedSymbols,c,t.template,t.at,t.refinementTemplate,t.refinementAt,g)},onImmediateTextRegion:function e(t,a,n,s,o){var l=t.info;var c;var h=this.symbols;var u=[];for(var f=0,d=a.length;f<d;f++){u=u.concat(h[a[f]])}var g=i(u.length);var v=new r(n,s,o);var p=w(t.huffman,t.refinement,l.width,l.height,t.defaultPixelValue,t.numberOfSymbolInstances,t.stripSize,u,g,t.transposed,t.dsOffset,t.referenceCorner,t.combinationOperator,c,t.refinementTemplate,t.refinementAt,v);this.drawBitmap(l,p)},onImmediateLosslessTextRegion:function e(){this.onImmediateTextRegion.apply(this,arguments)}};function P(){}P.prototype={parseChunks:function e(t){return T(t)}};return P}();e.Jbig2Image=h});(function(e,t){t(e.pdfjsCoreJpg={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.error;var a=function e(){var t=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]);var a=4017;var i=799;var n=3406;var s=2276;var o=1567;var l=3784;var c=5793;var h=2896;function u(){this.decodeTransform=null;this.colorTransform=-1}function f(e,t){var r=0,a=[],i,n,s=16;while(s>0&&!e[s-1]){s--}a.push({children:[],index:0});var o=a[0],l;for(i=0;i<s;i++){for(n=0;n<e[i];n++){o=a.pop();o.children[o.index]=t[r];while(o.index>0){o=a.pop()}o.index++;a.push(o);while(a.length<=i){a.push(l={children:[],index:0});o.children[o.index]=l.children;o=l}r++}if(i+1<s){a.push(l={children:[],index:0});o.children[o.index]=l.children;o=l}}return a[0].children}function d(e,t,r){return 64*((e.blocksPerLine+1)*t+r)}function g(e,a,i,n,s,o,l,c,h){var u=i.mcusPerLine;var f=i.progressive;var g=a,v=0,p=0;function m(){if(p>0){p--;return v>>p&1}v=e[a++];if(v===255){var t=e[a++];if(t){r(\"JPEG error: unexpected marker \"+(v<<8|t).toString(16))}}p=7;return v>>>7}function b(e){var t=e;while(true){t=t[m()];if(typeof t===\"number\"){return t}if(typeof t!==\"object\"){r(\"JPEG error: invalid huffman sequence\")}}}function y(e){var t=0;while(e>0){t=t<<1|m();e--}return t}function k(e){if(e===1){return m()===1?1:-1}var t=y(e);if(t>=1<<e-1){return t}return t+(-1<<e)+1}function w(e,r){var a=b(e.huffmanTableDC);var i=a===0?0:k(a);e.blockData[r]=e.pred+=i;var n=1;while(n<64){var s=b(e.huffmanTableAC);var o=s&15,l=s>>4;if(o===0){if(l<15){break}n+=16;continue}n+=l;var c=t[n];e.blockData[r+c]=k(o);n++}}function C(e,t){var r=b(e.huffmanTableDC);var a=r===0?0:k(r)<<h;e.blockData[t]=e.pred+=a}function x(e,t){e.blockData[t]|=m()<<h}var S=0;function A(e,r){if(S>0){S--;return}var a=o,i=l;while(a<=i){var n=b(e.huffmanTableAC);var s=n&15,c=n>>4;if(s===0){if(c<15){S=y(c)+(1<<c)-1;break}a+=16;continue}a+=c;var u=t[a];e.blockData[r+u]=k(s)*(1<<h);a++}}var I=0,B;function R(e,a){var i=o;var n=l;var s=0;var c;var u;while(i<=n){var f=t[i];switch(I){case 0:u=b(e.huffmanTableAC);c=u&15;s=u>>4;if(c===0){if(s<15){S=y(s)+(1<<s);I=4}else{s=16;I=1}}else{if(c!==1){r(\"JPEG error: invalid ACn encoding\")}B=k(c);I=s?2:3}continue;case 1:case 2:if(e.blockData[a+f]){e.blockData[a+f]+=m()<<h}else{s--;if(s===0){I=I===2?3:0}}break;case 3:if(e.blockData[a+f]){e.blockData[a+f]+=m()<<h}else{e.blockData[a+f]=B<<h;I=0}break;case 4:if(e.blockData[a+f]){e.blockData[a+f]+=m()<<h}break}i++}if(I===4){S--;if(S===0){I=0}}}function T(e,t,r,a,i){var n=r/u|0;var s=r%u;var o=n*e.v+a;var l=s*e.h+i;var c=d(e,o,l);t(e,c)}function O(e,t,r){var a=r/e.blocksPerLine|0;var i=r%e.blocksPerLine;var n=d(e,a,i);t(e,n)}var P=n.length;var E,M,L,D,F;var U;if(f){if(o===0){U=c===0?C:x}else{U=c===0?A:R}}else{U=w}var j=0,q;var N;if(P===1){N=n[0].blocksPerLine*n[0].blocksPerColumn}else{N=u*i.mcusPerColumn}if(!s){s=N}var _,z;while(j<N){for(M=0;M<P;M++){n[M].pred=0}S=0;if(P===1){E=n[0];for(F=0;F<s;F++){O(E,U,j);j++}}else{for(F=0;F<s;F++){for(M=0;M<P;M++){E=n[M];_=E.h;z=E.v;for(L=0;L<z;L++){for(D=0;D<_;D++){T(E,U,j,L,D)}}}j++}}p=0;q=e[a]<<8|e[a+1];while(e[a]===0&&a<e.length-1){a++;q=e[a]<<8|e[a+1]}if(q<=65280){r(\"JPEG error: marker was not found\")}if(q>=65488&&q<=65495){a+=2}else{break}}return a-g}function v(e,t,u){var f=e.quantizationTable,d=e.blockData;var g,v,p,m,b,y,k,w;var C,x,S,A,I,B,R,T;var O;if(!f){r(\"JPEG error: missing required Quantization Table.\")}for(var P=0;P<64;P+=8){C=d[t+P];x=d[t+P+1];S=d[t+P+2];A=d[t+P+3];I=d[t+P+4];B=d[t+P+5];R=d[t+P+6];T=d[t+P+7];C*=f[P];if((x|S|A|I|B|R|T)===0){O=c*C+512>>10;u[P]=O;u[P+1]=O;u[P+2]=O;u[P+3]=O;u[P+4]=O;u[P+5]=O;u[P+6]=O;u[P+7]=O;continue}x*=f[P+1];S*=f[P+2];A*=f[P+3];I*=f[P+4];B*=f[P+5];R*=f[P+6];T*=f[P+7];g=c*C+128>>8;v=c*I+128>>8;p=S;m=R;b=h*(x-T)+128>>8;w=h*(x+T)+128>>8;y=A<<4;k=B<<4;g=g+v+1>>1;v=g-v;O=p*l+m*o+128>>8;p=p*o-m*l+128>>8;m=O;b=b+k+1>>1;k=b-k;w=w+y+1>>1;y=w-y;g=g+m+1>>1;m=g-m;v=v+p+1>>1;p=v-p;O=b*s+w*n+2048>>12;b=b*n-w*s+2048>>12;w=O;O=y*i+k*a+2048>>12;y=y*a-k*i+2048>>12;k=O;u[P]=g+w;u[P+7]=g-w;u[P+1]=v+k;u[P+6]=v-k;u[P+2]=p+y;u[P+5]=p-y;u[P+3]=m+b;u[P+4]=m-b}for(var E=0;E<8;++E){C=u[E];x=u[E+8];S=u[E+16];A=u[E+24];I=u[E+32];B=u[E+40];R=u[E+48];T=u[E+56];if((x|S|A|I|B|R|T)===0){O=c*C+8192>>14;O=O<-2040?0:O>=2024?255:O+2056>>4;d[t+E]=O;d[t+E+8]=O;d[t+E+16]=O;d[t+E+24]=O;d[t+E+32]=O;d[t+E+40]=O;d[t+E+48]=O;d[t+E+56]=O;continue}g=c*C+2048>>12;v=c*I+2048>>12;p=S;m=R;b=h*(x-T)+2048>>12;w=h*(x+T)+2048>>12;y=A;k=B;g=(g+v+1>>1)+4112;v=g-v;O=p*l+m*o+2048>>12;p=p*o-m*l+2048>>12;m=O;b=b+k+1>>1;k=b-k;w=w+y+1>>1;y=w-y;g=g+m+1>>1;m=g-m;v=v+p+1>>1;p=v-p;O=b*s+w*n+2048>>12;b=b*n-w*s+2048>>12;w=O;O=y*i+k*a+2048>>12;y=y*a-k*i+2048>>12;k=O;C=g+w;T=g-w;x=v+k;R=v-k;S=p+y;B=p-y;A=m+b;I=m-b;C=C<16?0:C>=4080?255:C>>4;x=x<16?0:x>=4080?255:x>>4;S=S<16?0:S>=4080?255:S>>4;A=A<16?0:A>=4080?255:A>>4;I=I<16?0:I>=4080?255:I>>4;B=B<16?0:B>=4080?255:B>>4;R=R<16?0:R>=4080?255:R>>4;T=T<16?0:T>=4080?255:T>>4;d[t+E]=C;d[t+E+8]=x;d[t+E+16]=S;d[t+E+24]=A;d[t+E+32]=I;d[t+E+40]=B;d[t+E+48]=R;d[t+E+56]=T}}function p(e,t){var r=t.blocksPerLine;var a=t.blocksPerColumn;var i=new Int16Array(64);for(var n=0;n<a;n++){for(var s=0;s<r;s++){var o=d(t,n,s);v(t,o,i)}}return t.blockData}function m(e){return e<=0?0:e>=255?255:e}u.prototype={parse:function e(a){function i(){var e=a[o]<<8|a[o+1];o+=2;return e}function n(){var e=i();var t=a.subarray(o,o+e-2);o+=t.length;return t}function s(e){var t=Math.ceil(e.samplesPerLine/8/e.maxH);var r=Math.ceil(e.scanLines/8/e.maxV);for(var a=0;a<e.components.length;a++){H=e.components[a];var i=Math.ceil(Math.ceil(e.samplesPerLine/8)*H.h/e.maxH);var n=Math.ceil(Math.ceil(e.scanLines/8)*H.v/e.maxV);var s=t*H.h;var o=r*H.v;var l=64*o*(s+1);H.blockData=new Int16Array(l);H.blocksPerLine=i;H.blocksPerColumn=n}e.mcusPerLine=t;e.mcusPerColumn=r}var o=0;var l=null;var c=null;var h,u;var d=[];var v=[],m=[];var b=i();if(b!==65496){r(\"JPEG error: SOI not found\")}b=i();while(b!==65497){var y,k,w;switch(b){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var C=n();if(b===65504){if(C[0]===74&&C[1]===70&&C[2]===73&&C[3]===70&&C[4]===0){l={version:{major:C[5],minor:C[6]},densityUnits:C[7],xDensity:C[8]<<8|C[9],yDensity:C[10]<<8|C[11],thumbWidth:C[12],thumbHeight:C[13],thumbData:C.subarray(14,14+3*C[12]*C[13])}}}if(b===65518){if(C[0]===65&&C[1]===100&&C[2]===111&&C[3]===98&&C[4]===101){c={version:C[5]<<8|C[6],flags0:C[7]<<8|C[8],flags1:C[9]<<8|C[10],transformCode:C[11]}}}break;case 65499:var x=i();var S=x+o-2;var A;while(o<S){var I=a[o++];var B=new Uint16Array(64);if(I>>4===0){for(k=0;k<64;k++){A=t[k];B[A]=a[o++]}}else if(I>>4===1){for(k=0;k<64;k++){A=t[k];B[A]=i()}}else{r(\"JPEG error: DQT - invalid table spec\")}d[I&15]=B}break;case 65472:case 65473:case 65474:if(h){r(\"JPEG error: Only single frame JPEGs supported\")}i();h={};h.extended=b===65473;h.progressive=b===65474;h.precision=a[o++];h.scanLines=i();h.samplesPerLine=i();h.components=[];h.componentIds={};var R=a[o++],T;var O=0,P=0;for(y=0;y<R;y++){T=a[o];var E=a[o+1]>>4;var M=a[o+1]&15;if(O<E){O=E}if(P<M){P=M}var L=a[o+2];w=h.components.push({h:E,v:M,quantizationId:L,quantizationTable:null});h.componentIds[T]=w-1;o+=3}h.maxH=O;h.maxV=P;s(h);break;case 65476:var D=i();for(y=2;y<D;){var F=a[o++];var U=new Uint8Array(16);var j=0;for(k=0;k<16;k++,o++){j+=U[k]=a[o]}var q=new Uint8Array(j);for(k=0;k<j;k++,o++){q[k]=a[o]}y+=17+j;(F>>4===0?m:v)[F&15]=f(U,q)}break;case 65501:i();u=i();break;case 65498:var N=i();var _=a[o++];var z=[],H;for(y=0;y<_;y++){var G=h.componentIds[a[o++]];H=h.components[G];var X=a[o++];H.huffmanTableDC=m[X>>4];H.huffmanTableAC=v[X&15];z.push(H)}var W=a[o++];var V=a[o++];var K=a[o++];var Y=g(a,o,h,z,u,W,V,K>>4,K&15);o+=Y;break;case 65535:if(a[o]!==255){o--}break;default:if(a[o-3]===255&&a[o-2]>=192&&a[o-2]<=254){o-=3;break}r(\"JPEG error: unknown marker \"+b.toString(16))}b=i()}this.width=h.samplesPerLine;this.height=h.scanLines;this.jfif=l;this.adobe=c;this.components=[];for(y=0;y<h.components.length;y++){H=h.components[y];var J=d[H.quantizationId];if(J){H.quantizationTable=J}this.components.push({output:p(h,H),scaleX:H.h/h.maxH,scaleY:H.v/h.maxV,blocksPerLine:H.blocksPerLine,blocksPerColumn:H.blocksPerColumn})}this.numComponents=this.components.length},_getLinearizedBlockData:function e(t,r){var a=this.width/t,i=this.height/r;var n,s,o,l;var c,h,u,f,d;var g;var v=0;var p;var m=this.components.length;var b=t*r*m;var y=new Uint8Array(b);var k=new Uint32Array(t);var w=4294967288;for(u=0;u<m;u++){n=this.components[u];s=n.scaleX*a;o=n.scaleY*i;v=u;p=n.output;l=n.blocksPerLine+1<<3;for(c=0;c<t;c++){f=0|c*s;k[c]=(f&w)<<3|f&7}for(h=0;h<r;h++){f=0|h*o;g=l*(f&w)|(f&7)<<3;for(c=0;c<t;c++){y[v]=p[g+k[c]];v+=m}}}var C=this.decodeTransform;if(C){for(u=0;u<b;){for(f=0,d=0;f<m;f++,u++,d+=2){y[u]=(y[u]*C[d]>>8)+C[d+1]}}}return y},_isColorConversionNeeded:function e(){if(this.adobe&&this.adobe.transformCode){return true}else if(this.numComponents===3){if(!this.adobe&&this.colorTransform===0){return false}return true}if(!this.adobe&&this.colorTransform===1){return true}return false},_convertYccToRgb:function e(t){var r,a,i;for(var n=0,s=t.length;n<s;n+=3){r=t[n];a=t[n+1];i=t[n+2];t[n]=m(r-179.456+1.402*i);t[n+1]=m(r+135.459-.344*a-.714*i);t[n+2]=m(r-226.816+1.772*a)}return t},_convertYcckToRgb:function e(t){var r,a,i,n;var s=0;for(var o=0,l=t.length;o<l;o+=4){r=t[o];a=t[o+1];i=t[o+2];n=t[o+3];var c=-122.67195406894+a*(-660635669420364e-19*a+.000437130475926232*i-54080610064599e-18*r+.00048449797120281*n-.154362151871126)+i*(-.000957964378445773*i+.000817076911346625*r-.00477271405408747*n+1.53380253221734)+r*(.000961250184130688*r-.00266257332283933*n+.48357088451265)+n*(-.000336197177618394*n+.484791561490776);var h=107.268039397724+a*(219927104525741e-19*a-.000640992018297945*i+.000659397001245577*r+.000426105652938837*n-.176491792462875)+i*(-.000778269941513683*i+.00130872261408275*r+.000770482631801132*n-.151051492775562)+r*(.00126935368114843*r-.00265090189010898*n+.25802910206845)+n*(-.000318913117588328*n-.213742400323665);var u=-20.810012546947+a*(-.000570115196973677*a-263409051004589e-19*i+.0020741088115012*r-.00288260236853442*n+.814272968359295)+i*(-153496057440975e-19*i-.000132689043961446*r+.000560833691242812*n-.195152027534049)+r*(.00174418132927582*r-.00255243321439347*n+.116935020465145)+n*(-.000343531996510555*n+.24165260232407);t[s++]=m(c);t[s++]=m(h);t[s++]=m(u)}return t},_convertYcckToCmyk:function e(t){var r,a,i;for(var n=0,s=t.length;n<s;n+=4){r=t[n];a=t[n+1];i=t[n+2];t[n]=m(434.456-r-1.402*i);t[n+1]=m(119.541-r+.344*a+.714*i);t[n+2]=m(481.816-r-1.772*a)}return t},_convertCmykToRgb:function e(t){var r,a,i,n;var s=0;var o=-255*255*255;var l=1/255/255;for(var c=0,h=t.length;c<h;c+=4){r=t[c];a=t[c+1];i=t[c+2];n=t[c+3];var u=r*(-4.387332384609988*r+54.48615194189176*a+18.82290502165302*i+212.25662451639585*n-72734.4411664936)+a*(1.7149763477362134*a-5.6096736904047315*i-17.873870861415444*n-1401.7366389350734)+i*(-2.5217340131683033*i-21.248923337353073*n+4465.541406466231)-n*(21.86122147463605*n+48317.86113160301);var f=r*(8.841041422036149*r+60.118027045597366*a+6.871425592049007*i+31.159100130055922*n-20220.756542821975)+a*(-15.310361306967817*a+17.575251261109482*i+131.35250912493976*n-48691.05921601825)+i*(4.444339102852739*i+9.8632861493405*n-6341.191035517494)-n*(20.737325471181034*n+47890.15695978492);var d=r*(.8842522430003296*r+8.078677503112928*a+30.89978309703729*i-.23883238689178934*n-3616.812083916688)+a*(10.49593273432072*a+63.02378494754052*i+50.606957656360734*n-28620.90484698408)+i*(.03296041114873217*i+115.60384449646641*n-49363.43385999684)-n*(22.33816807309886*n+45932.16563550634);t[s++]=u>=0?255:u<=o?0:255+u*l|0;t[s++]=f>=0?255:f<=o?0:255+f*l|0;t[s++]=d>=0?255:d<=o?0:255+d*l|0}return t},getData:function e(t,a,i){if(this.numComponents>4){r(\"JPEG error: Unsupported color mode\")}var n=this._getLinearizedBlockData(t,a);if(this.numComponents===1&&i){var s=n.length;var o=new Uint8Array(s*3);var l=0;for(var c=0;c<s;c++){var h=n[c];o[l++]=h;o[l++]=h;o[l++]=h}return o}else if(this.numComponents===3&&this._isColorConversionNeeded()){return this._convertYccToRgb(n)}else if(this.numComponents===4){if(this._isColorConversionNeeded()){if(i){return this._convertYcckToRgb(n)}return this._convertYcckToCmyk(n)}else if(i){return this._convertCmykToRgb(n)}}return n}};return u}();e.JpegImage=a});(function(e,t){t(e.pdfjsCoreJpx={},e.pdfjsSharedUtil,e.pdfjsCoreArithmeticDecoder)})(this,function(e,t,r){var a=t.info;var i=t.warn;var n=t.error;var s=t.log2;var o=t.readUint16;var l=t.readUint32;var c=r.ArithmeticDecoder;var h=function e(){var t={LL:0,LH:1,HL:1,HH:2};function r(){this.failOnCorruptedImage=false}r.prototype={parse:function e(t){var r=o(t,0);if(r===65359){this.parseCodestream(t,0,t.length);return}var s=0,c=t.length;while(s<c){var h=8;var u=l(t,s);var f=l(t,s+4);s+=h;if(u===1){u=l(t,s)*4294967296+l(t,s+4);s+=8;h+=8}if(u===0){u=c-s+h}if(u<h){n(\"JPX Error: Invalid box field size\")}var d=u-h;var g=true;switch(f){case 1785737832:g=false;break;case 1668246642:var v=t[s];if(v===1){var p=l(t,s+3);switch(p){case 16:case 17:case 18:break;default:i(\"Unknown colorspace \"+p);break}}else if(v===2){a(\"ICC profile not supported\")}break;case 1785737827:this.parseCodestream(t,s,s+d);break;case 1783636e3:if(218793738!==l(t,s)){i(\"Invalid JP2 signature\")}break;case 1783634458:case 1718909296:case 1920099697:case 1919251232:case 1768449138:break;default:var m=String.fromCharCode(f>>24&255,f>>16&255,f>>8&255,f&255);i(\"Unsupported header type \"+f+\" (\"+m+\")\");break}if(g){s+=d}}},parseImageProperties:function e(t){var r=t.getByte();while(r>=0){var a=r;r=t.getByte();var i=a<<8|r;if(i===65361){t.skip(4);var s=t.getInt32()>>>0;var o=t.getInt32()>>>0;var l=t.getInt32()>>>0;var c=t.getInt32()>>>0;t.skip(16);var h=t.getUint16();this.width=s-l;this.height=o-c;this.componentsCount=h;this.bitsPerComponent=8;return}}n(\"JPX Error: No size marker found in JPX stream\")},parseCodestream:function e(t,r,a){var s={};var c=false;try{var f=r;while(f+1<a){var d=o(t,f);f+=2;var g=0,v,p,m,b,y,k;switch(d){case 65359:s.mainHeader=true;break;case 65497:break;case 65361:g=o(t,f);var w={};w.Xsiz=l(t,f+4);w.Ysiz=l(t,f+8);w.XOsiz=l(t,f+12);w.YOsiz=l(t,f+16);w.XTsiz=l(t,f+20);w.YTsiz=l(t,f+24);w.XTOsiz=l(t,f+28);w.YTOsiz=l(t,f+32);var C=o(t,f+36);w.Csiz=C;var A=[];v=f+38;for(var I=0;I<C;I++){var T={precision:(t[v]&127)+1,isSigned:!!(t[v]&128),XRsiz:t[v+1],YRsiz:t[v+1]};h(T,w);A.push(T)}s.SIZ=w;s.components=A;u(s,A);s.QCC=[];s.COC=[];break;case 65372:g=o(t,f);var O={};v=f+2;p=t[v++];switch(p&31){case 0:b=8;y=true;break;case 1:b=16;y=false;break;case 2:b=16;y=true;break;default:throw new Error(\"Invalid SQcd value \"+p)}O.noQuantization=b===8;O.scalarExpounded=y;O.guardBits=p>>5;m=[];while(v<g+f){var P={};if(b===8){P.epsilon=t[v++]>>3;P.mu=0}else{P.epsilon=t[v]>>3;P.mu=(t[v]&7)<<8|t[v+1];v+=2}m.push(P)}O.SPqcds=m;if(s.mainHeader){s.QCD=O}else{s.currentTile.QCD=O;s.currentTile.QCC=[]}break;case 65373:g=o(t,f);var E={};v=f+2;var M;if(s.SIZ.Csiz<257){M=t[v++]}else{M=o(t,v);v+=2}p=t[v++];switch(p&31){case 0:b=8;y=true;break;case 1:b=16;y=false;break;case 2:b=16;y=true;break;default:throw new Error(\"Invalid SQcd value \"+p)}E.noQuantization=b===8;E.scalarExpounded=y;E.guardBits=p>>5;m=[];while(v<g+f){P={};if(b===8){P.epsilon=t[v++]>>3;P.mu=0}else{P.epsilon=t[v]>>3;P.mu=(t[v]&7)<<8|t[v+1];v+=2}m.push(P)}E.SPqcds=m;if(s.mainHeader){s.QCC[M]=E}else{s.currentTile.QCC[M]=E}break;case 65362:g=o(t,f);var L={};v=f+2;var D=t[v++];L.entropyCoderWithCustomPrecincts=!!(D&1);L.sopMarkerUsed=!!(D&2);L.ephMarkerUsed=!!(D&4);L.progressionOrder=t[v++];L.layersCount=o(t,v);v+=2;L.multipleComponentTransform=t[v++];L.decompositionLevelsCount=t[v++];L.xcb=(t[v++]&15)+2;L.ycb=(t[v++]&15)+2;var F=t[v++];L.selectiveArithmeticCodingBypass=!!(F&1);L.resetContextProbabilities=!!(F&2);L.terminationOnEachCodingPass=!!(F&4);L.verticalyStripe=!!(F&8);L.predictableTermination=!!(F&16);L.segmentationSymbolUsed=!!(F&32);L.reversibleTransformation=t[v++];if(L.entropyCoderWithCustomPrecincts){var U=[];while(v<g+f){var j=t[v++];U.push({PPx:j&15,PPy:j>>4})}L.precinctsSizes=U}var q=[];if(L.selectiveArithmeticCodingBypass){q.push(\"selectiveArithmeticCodingBypass\")}if(L.resetContextProbabilities){q.push(\"resetContextProbabilities\")}if(L.terminationOnEachCodingPass){q.push(\"terminationOnEachCodingPass\")}if(L.verticalyStripe){q.push(\"verticalyStripe\")}if(L.predictableTermination){q.push(\"predictableTermination\")}if(q.length>0){c=true;throw new Error(\"Unsupported COD options (\"+q.join(\", \")+\")\")}if(s.mainHeader){s.COD=L}else{s.currentTile.COD=L;s.currentTile.COC=[]}break;case 65424:g=o(t,f);k={};k.index=o(t,f+2);k.length=l(t,f+4);k.dataEnd=k.length+f-2;k.partIndex=t[f+8];k.partsCount=t[f+9];s.mainHeader=false;if(k.partIndex===0){k.COD=s.COD;k.COC=s.COC.slice(0);k.QCD=s.QCD;k.QCC=s.QCC.slice(0)}s.currentTile=k;break;case 65427:k=s.currentTile;if(k.partIndex===0){R(s,k.index);x(s)}g=k.dataEnd-f;S(s,t,f,g);break;case 65365:case 65367:case 65368:case 65380:g=o(t,f);break;case 65363:throw new Error(\"Codestream code 0xFF53 (COC) is \"+\"not implemented\");default:throw new Error(\"Unknown codestream code: \"+d.toString(16))}f+=g}}catch(e){if(c||this.failOnCorruptedImage){n(\"JPX Error: \"+e.message)}else{i(\"JPX: Trying to recover from: \"+e.message)}}this.tiles=B(s);this.width=s.SIZ.Xsiz-s.SIZ.XOsiz;this.height=s.SIZ.Ysiz-s.SIZ.YOsiz;this.componentsCount=s.SIZ.Csiz}};function h(e,t){e.x0=Math.ceil(t.XOsiz/e.XRsiz);e.x1=Math.ceil(t.Xsiz/e.XRsiz);e.y0=Math.ceil(t.YOsiz/e.YRsiz);e.y1=Math.ceil(t.Ysiz/e.YRsiz);e.width=e.x1-e.x0;e.height=e.y1-e.y0}function u(e,t){var r=e.SIZ;var a,i=[];var n=Math.ceil((r.Xsiz-r.XTOsiz)/r.XTsiz);var s=Math.ceil((r.Ysiz-r.YTOsiz)/r.YTsiz);for(var o=0;o<s;o++){for(var l=0;l<n;l++){a={};a.tx0=Math.max(r.XTOsiz+l*r.XTsiz,r.XOsiz);a.ty0=Math.max(r.YTOsiz+o*r.YTsiz,r.YOsiz);a.tx1=Math.min(r.XTOsiz+(l+1)*r.XTsiz,r.Xsiz);a.ty1=Math.min(r.YTOsiz+(o+1)*r.YTsiz,r.Ysiz);a.width=a.tx1-a.tx0;a.height=a.ty1-a.ty0;a.components=[];i.push(a)}}e.tiles=i;var c=r.Csiz;for(var h=0,u=c;h<u;h++){var f=t[h];for(var d=0,g=i.length;d<g;d++){var v={};a=i[d];v.tcx0=Math.ceil(a.tx0/f.XRsiz);v.tcy0=Math.ceil(a.ty0/f.YRsiz);v.tcx1=Math.ceil(a.tx1/f.XRsiz);v.tcy1=Math.ceil(a.ty1/f.YRsiz);v.width=v.tcx1-v.tcx0;v.height=v.tcy1-v.tcy0;a.components[h]=v}}}function f(e,t,r){var a=t.codingStyleParameters;var i={};if(!a.entropyCoderWithCustomPrecincts){i.PPx=15;i.PPy=15}else{i.PPx=a.precinctsSizes[r].PPx;i.PPy=a.precinctsSizes[r].PPy}i.xcb_=r>0?Math.min(a.xcb,i.PPx-1):Math.min(a.xcb,i.PPx);i.ycb_=r>0?Math.min(a.ycb,i.PPy-1):Math.min(a.ycb,i.PPy);return i}function d(e,t,r){var a=1<<r.PPx;var i=1<<r.PPy;var n=t.resLevel===0;var s=1<<r.PPx+(n?0:-1);var o=1<<r.PPy+(n?0:-1);var l=t.trx1>t.trx0?Math.ceil(t.trx1/a)-Math.floor(t.trx0/a):0;var c=t.try1>t.try0?Math.ceil(t.try1/i)-Math.floor(t.try0/i):0;var h=l*c;t.precinctParameters={precinctWidth:a,precinctHeight:i,numprecinctswide:l,numprecinctshigh:c,numprecincts:h,precinctWidthInSubband:s,precinctHeightInSubband:o}}function g(e,t,r){var a=r.xcb_;var i=r.ycb_;var n=1<<a;var s=1<<i;var o=t.tbx0>>a;var l=t.tby0>>i;var c=t.tbx1+n-1>>a;var h=t.tby1+s-1>>i;var u=t.resolution.precinctParameters;var f=[];var d=[];var g,v,p,m;for(v=l;v<h;v++){for(g=o;g<c;g++){p={cbx:g,cby:v,tbx0:n*g,tby0:s*v,tbx1:n*(g+1),tby1:s*(v+1)};p.tbx0_=Math.max(t.tbx0,p.tbx0);p.tby0_=Math.max(t.tby0,p.tby0);p.tbx1_=Math.min(t.tbx1,p.tbx1);p.tby1_=Math.min(t.tby1,p.tby1);var b=Math.floor((p.tbx0_-t.tbx0)/u.precinctWidthInSubband);var y=Math.floor((p.tby0_-t.tby0)/u.precinctHeightInSubband);m=b+y*u.numprecinctswide;p.precinctNumber=m;p.subbandType=t.type;p.Lblock=3;if(p.tbx1_<=p.tbx0_||p.tby1_<=p.tby0_){continue}f.push(p);var k=d[m];if(k!==undefined){if(g<k.cbxMin){k.cbxMin=g}else if(g>k.cbxMax){k.cbxMax=g}if(v<k.cbyMin){k.cbxMin=v}else if(v>k.cbyMax){k.cbyMax=v}}else{d[m]=k={cbxMin:g,cbyMin:v,cbxMax:g,cbyMax:v}}p.precinct=k}}t.codeblockParameters={codeblockWidth:a,codeblockHeight:i,numcodeblockwide:c-o+1,numcodeblockhigh:h-l+1};t.codeblocks=f;t.precincts=d}function v(e,t,r){var a=[];var i=e.subbands;for(var n=0,s=i.length;n<s;n++){var o=i[n];var l=o.codeblocks;for(var c=0,h=l.length;c<h;c++){var u=l[c];if(u.precinctNumber!==t){continue}a.push(u)}}return{layerNumber:r,codeblocks:a}}function p(e){var t=e.SIZ;var r=e.currentTile.index;var a=e.tiles[r];var i=a.codingStyleDefaultParameters.layersCount;var s=t.Csiz;var o=0;for(var l=0;l<s;l++){o=Math.max(o,a.components[l].codingStyleParameters.decompositionLevelsCount)}var c=0,h=0,u=0,f=0;this.nextPacket=function e(){for(;c<i;c++){for(;h<=o;h++){for(;u<s;u++){var t=a.components[u];if(h>t.codingStyleParameters.decompositionLevelsCount){continue}var r=t.resolutions[h];var l=r.precinctParameters.numprecincts;for(;f<l;){var d=v(r,f,c);f++;return d}f=0}u=0}h=0}n(\"JPX Error: Out of packets\")}}function m(e){var t=e.SIZ;var r=e.currentTile.index;var a=e.tiles[r];var i=a.codingStyleDefaultParameters.layersCount;var s=t.Csiz;var o=0;for(var l=0;l<s;l++){o=Math.max(o,a.components[l].codingStyleParameters.decompositionLevelsCount)}var c=0,h=0,u=0,f=0;this.nextPacket=function e(){for(;c<=o;c++){for(;h<i;h++){for(;u<s;u++){var t=a.components[u];if(c>t.codingStyleParameters.decompositionLevelsCount){continue}var r=t.resolutions[c];var l=r.precinctParameters.numprecincts;for(;f<l;){var d=v(r,f,h);f++;return d}f=0}u=0}h=0}n(\"JPX Error: Out of packets\")}}function b(e){var t=e.SIZ;var r=e.currentTile.index;var a=e.tiles[r];var i=a.codingStyleDefaultParameters.layersCount;var s=t.Csiz;var o,l,c,h;var u=0;for(c=0;c<s;c++){var f=a.components[c];u=Math.max(u,f.codingStyleParameters.decompositionLevelsCount)}var d=new Int32Array(u+1);for(l=0;l<=u;++l){var g=0;for(c=0;c<s;++c){var p=a.components[c].resolutions;if(l<p.length){g=Math.max(g,p[l].precinctParameters.numprecincts)}}d[l]=g}o=0;l=0;c=0;h=0;this.nextPacket=function e(){for(;l<=u;l++){for(;h<d[l];h++){for(;c<s;c++){var t=a.components[c];if(l>t.codingStyleParameters.decompositionLevelsCount){continue}var r=t.resolutions[l];var f=r.precinctParameters.numprecincts;if(h>=f){continue}for(;o<i;){var g=v(r,h,o);o++;return g}o=0}c=0}h=0}n(\"JPX Error: Out of packets\")}}function y(e){var t=e.SIZ;var r=e.currentTile.index;var a=e.tiles[r];var i=a.codingStyleDefaultParameters.layersCount;var s=t.Csiz;var o=C(a);var l=o;var c=0,h=0,u=0,f=0,d=0;this.nextPacket=function e(){for(;d<l.maxNumHigh;d++){for(;f<l.maxNumWide;f++){for(;u<s;u++){var t=a.components[u];var r=t.codingStyleParameters.decompositionLevelsCount;for(;h<=r;h++){var g=t.resolutions[h];var p=o.components[u].resolutions[h];var m=w(f,d,p,l,g);if(m===null){continue}for(;c<i;){var b=v(g,m,c);c++;return b}c=0}h=0}u=0}f=0}n(\"JPX Error: Out of packets\")}}function k(e){var t=e.SIZ;var r=e.currentTile.index;var a=e.tiles[r];var i=a.codingStyleDefaultParameters.layersCount;var s=t.Csiz;var o=C(a);var l=0,c=0,h=0,u=0,f=0;this.nextPacket=function e(){for(;h<s;++h){var t=a.components[h];var r=o.components[h];var d=t.codingStyleParameters.decompositionLevelsCount;for(;f<r.maxNumHigh;f++){for(;u<r.maxNumWide;u++){for(;c<=d;c++){var g=t.resolutions[c];var p=r.resolutions[c];var m=w(u,f,p,r,g);if(m===null){continue}for(;l<i;){var b=v(g,m,l);l++;return b}l=0}c=0}u=0}f=0}n(\"JPX Error: Out of packets\")}}function w(e,t,r,a,i){var n=e*a.minWidth;var s=t*a.minHeight;if(n%r.width!==0||s%r.height!==0){return null}var o=s/r.width*i.precinctParameters.numprecinctswide;return n/r.height+o}function C(e){var t=e.components.length;var r=Number.MAX_VALUE;var a=Number.MAX_VALUE;var i=0;var n=0;var s=new Array(t);for(var o=0;o<t;o++){var l=e.components[o];var c=l.codingStyleParameters.decompositionLevelsCount;var h=new Array(c+1);var u=Number.MAX_VALUE;var f=Number.MAX_VALUE;var d=0;var g=0;var v=1;for(var p=c;p>=0;--p){var m=l.resolutions[p];var b=v*m.precinctParameters.precinctWidth;var y=v*m.precinctParameters.precinctHeight;u=Math.min(u,b);f=Math.min(f,y);d=Math.max(d,m.precinctParameters.numprecinctswide);g=Math.max(g,m.precinctParameters.numprecinctshigh);h[p]={width:b,height:y};v<<=1}r=Math.min(r,u);a=Math.min(a,f);i=Math.max(i,d);n=Math.max(n,g);s[o]={resolutions:h,minWidth:u,minHeight:f,maxNumWide:d,maxNumHigh:g}}return{components:s,minWidth:r,minHeight:a,maxNumWide:i,maxNumHigh:n}}function x(e){var t=e.SIZ;var r=e.currentTile.index;var a=e.tiles[r];var i=t.Csiz;for(var s=0;s<i;s++){var o=a.components[s];var l=o.codingStyleParameters.decompositionLevelsCount;var c=[];var h=[];for(var u=0;u<=l;u++){var v=f(e,o,u);var w={};var C=1<<l-u;w.trx0=Math.ceil(o.tcx0/C);w.try0=Math.ceil(o.tcy0/C);w.trx1=Math.ceil(o.tcx1/C);w.try1=Math.ceil(o.tcy1/C);w.resLevel=u;d(e,w,v);c.push(w);var x;if(u===0){x={};x.type=\"LL\";x.tbx0=Math.ceil(o.tcx0/C);x.tby0=Math.ceil(o.tcy0/C);x.tbx1=Math.ceil(o.tcx1/C);x.tby1=Math.ceil(o.tcy1/C);x.resolution=w;g(e,x,v);h.push(x);w.subbands=[x]}else{var S=1<<l-u+1;var A=[];x={};x.type=\"HL\";x.tbx0=Math.ceil(o.tcx0/S-.5);x.tby0=Math.ceil(o.tcy0/S);x.tbx1=Math.ceil(o.tcx1/S-.5);x.tby1=Math.ceil(o.tcy1/S);x.resolution=w;g(e,x,v);h.push(x);A.push(x);x={};x.type=\"LH\";x.tbx0=Math.ceil(o.tcx0/S);x.tby0=Math.ceil(o.tcy0/S-.5);x.tbx1=Math.ceil(o.tcx1/S);x.tby1=Math.ceil(o.tcy1/S-.5);x.resolution=w;g(e,x,v);h.push(x);A.push(x);x={};x.type=\"HH\";x.tbx0=Math.ceil(o.tcx0/S-.5);x.tby0=Math.ceil(o.tcy0/S-.5);x.tbx1=Math.ceil(o.tcx1/S-.5);x.tby1=Math.ceil(o.tcy1/S-.5);x.resolution=w;g(e,x,v);h.push(x);A.push(x);w.subbands=A}}o.resolutions=c;o.subbands=h}var I=a.codingStyleDefaultParameters.progressionOrder;switch(I){case 0:a.packetsIterator=new p(e);break;case 1:a.packetsIterator=new m(e);break;case 2:a.packetsIterator=new b(e);break;case 3:a.packetsIterator=new y(e);break;case 4:a.packetsIterator=new k(e);break;default:n(\"JPX Error: Unsupported progression order \"+I)}}function S(e,t,r,a){var i=0;var n,o=0,l=false;function c(e){while(o<e){var a=t[r+i];i++;if(l){n=n<<7|a;o+=7;l=false}else{n=n<<8|a;o+=8}if(a===255){l=true}}o-=e;return n>>>o&(1<<e)-1}function h(e){if(t[r+i-1]===255&&t[r+i]===e){u(1);return true}else if(t[r+i]===255&&t[r+i+1]===e){u(2);return true}return false}function u(e){i+=e}function f(){o=0;if(l){i++;l=false}}function d(){if(c(1)===0){return 1}if(c(1)===0){return 2}var e=c(2);if(e<3){return e+3}e=c(5);if(e<31){return e+6}e=c(7);return e+37}var g=e.currentTile.index;var v=e.tiles[g];var p=e.COD.sopMarkerUsed;var m=e.COD.ephMarkerUsed;var b=v.packetsIterator;while(i<a){f();if(p&&h(145)){u(4)}var y=b.nextPacket();if(!c(1)){continue}var k=y.layerNumber;var w=[],C;for(var x=0,S=y.codeblocks.length;x<S;x++){C=y.codeblocks[x];var A=C.precinct;var I=C.cbx-A.cbxMin;var B=C.cby-A.cbyMin;var R=false;var P=false;var E;if(C[\"included\"]!==undefined){R=!!c(1)}else{A=C.precinct;var M,L;if(A[\"inclusionTree\"]!==undefined){M=A.inclusionTree}else{var D=A.cbxMax-A.cbxMin+1;var F=A.cbyMax-A.cbyMin+1;M=new O(D,F,k);L=new T(D,F);A.inclusionTree=M;A.zeroBitPlanesTree=L}if(M.reset(I,B,k)){while(true){if(c(1)){E=!M.nextLevel();if(E){C.included=true;R=P=true;break}}else{M.incrementValue(k);break}}}}if(!R){continue}if(P){L=A.zeroBitPlanesTree;L.reset(I,B);while(true){if(c(1)){E=!L.nextLevel();if(E){break}}else{L.incrementValue()}}C.zeroBitPlanes=L.value}var U=d();while(c(1)){C.Lblock++}var j=s(U);var q=(U<1<<j?j-1:j)+C.Lblock;var N=c(q);w.push({codeblock:C,codingpasses:U,dataLength:N})}f();if(m){h(146)}while(w.length>0){var _=w.shift();C=_.codeblock;if(C[\"data\"]===undefined){C.data=[]}C.data.push({data:t,start:r+i,end:r+i+_.dataLength,codingpasses:_.codingpasses});i+=_.dataLength}}return i}function A(e,t,r,a,i,n,s,o){var l=a.tbx0;var h=a.tby0;var u=a.tbx1-a.tbx0;var f=a.codeblocks;var d=a.type.charAt(0)===\"H\"?1:0;var g=a.type.charAt(1)===\"H\"?t:0;for(var v=0,p=f.length;v<p;++v){var m=f[v];var b=m.tbx1_-m.tbx0_;var y=m.tby1_-m.tby0_;if(b===0||y===0){continue}if(m[\"data\"]===undefined){continue}var k,w;k=new P(b,y,m.subbandType,m.zeroBitPlanes,n);w=2;var C=m.data,x=0,S=0;var A,I,B;for(A=0,I=C.length;A<I;A++){B=C[A];x+=B.end-B.start;S+=B.codingpasses}var R=new Uint8Array(x);var T=0;for(A=0,I=C.length;A<I;A++){B=C[A];var O=B.data.subarray(B.start,B.end);R.set(O,T);T+=O.length}var E=new c(R,0,x);k.setDecoder(E);for(A=0;A<S;A++){switch(w){case 0:k.runSignificancePropagationPass();break;case 1:k.runMagnitudeRefinementPass();break;case 2:k.runCleanupPass();if(o){k.checkSegmentationSymbol()}break}w=(w+1)%3}var M=m.tbx0_-l+(m.tby0_-h)*u;var L=k.coefficentsSign;var D=k.coefficentsMagnitude;var F=k.bitsDecoded;var U=s?0:.5;var j,q,N;T=0;var _=a.type!==\"LL\";for(A=0;A<y;A++){var z=M/u|0;var H=2*z*(t-u)+d+g;for(j=0;j<b;j++){q=D[T];if(q!==0){q=(q+U)*i;if(L[T]!==0){q=-q}N=F[T];var G=_?H+(M<<1):M;if(s&&N>=n){e[G]=q}else{e[G]=q*(1<<n-N)}}M++;T++}M+=u-b}}}function I(e,r,a){var i=r.components[a];var n=i.codingStyleParameters;var s=i.quantizationParameters;var o=n.decompositionLevelsCount;var l=s.SPqcds;var c=s.scalarExpounded;var h=s.guardBits;var u=n.segmentationSymbolUsed;var f=e.components[a].precision;var d=n.reversibleTransformation;var g=d?new L:new M;var v=[];var p=0;for(var m=0;m<=o;m++){var b=i.resolutions[m];var y=b.trx1-b.trx0;var k=b.try1-b.try0;var w=new Float32Array(y*k);for(var C=0,x=b.subbands.length;C<x;C++){var S,I;if(!c){S=l[0].mu;I=l[0].epsilon+(m>0?1-m:0)}else{S=l[p].mu;I=l[p].epsilon;p++}var B=b.subbands[C];var R=t[B.type];var T=d?1:Math.pow(2,f+R-I)*(1+S/2048);var O=h+I-1;A(w,y,k,B,T,O,d,u)}v.push({width:y,height:k,items:w})}var P=g.calculate(v,i.tcx0,i.tcy0);return{left:i.tcx0,top:i.tcy0,width:P.width,height:P.height,items:P.items}}function B(e){var t=e.SIZ;var r=e.components;var a=t.Csiz;var i=[];for(var n=0,s=e.tiles.length;n<s;n++){var o=e.tiles[n];var l=[];var c;for(c=0;c<a;c++){l[c]=I(e,o,c)}var h=l[0];var u=new Uint8Array(h.items.length*a);var f={left:h.left,top:h.top,width:h.width,height:h.height,items:u};var d,g,v,p,m;var b=0,y,k,w,C,x,S,A,B,R,T;if(o.codingStyleDefaultParameters.multipleComponentTransform){var O=a===4;var P=l[0].items;var E=l[1].items;var M=l[2].items;var L=O?l[3].items:null;d=r[0].precision-8;g=(128<<d)+.5;v=255*(1<<d);m=v*.5;p=-m;var D=o.components[0];var F=a-3;k=P.length;if(!D.codingStyleParameters.reversibleTransformation){for(y=0;y<k;y++,b+=F){w=P[y]+g;C=E[y];x=M[y];S=w+1.402*x;A=w-.34413*C-.71414*x;B=w+1.772*C;u[b++]=S<=0?0:S>=v?255:S>>d;u[b++]=A<=0?0:A>=v?255:A>>d;u[b++]=B<=0?0:B>=v?255:B>>d}}else{for(y=0;y<k;y++,b+=F){w=P[y]+g;C=E[y];x=M[y];A=w-(x+C>>2);S=A+x;B=A+C;u[b++]=S<=0?0:S>=v?255:S>>d;u[b++]=A<=0?0:A>=v?255:A>>d;u[b++]=B<=0?0:B>=v?255:B>>d}}if(O){for(y=0,b=3;y<k;y++,b+=4){R=L[y];u[b]=R<=p?0:R>=m?255:R+g>>d}}}else{for(c=0;c<a;c++){var U=l[c].items;d=r[c].precision-8;g=(128<<d)+.5;v=127.5*(1<<d);p=-v;for(b=c,y=0,k=U.length;y<k;y++){T=U[y];u[b]=T<=p?0:T>=v?255:T+g>>d;b+=a}}}i.push(f)}return i}function R(e,t){var r=e.SIZ;var a=r.Csiz;var i=e.tiles[t];for(var n=0;n<a;n++){var s=i.components[n];var o=e.currentTile.QCC[n]!==undefined?e.currentTile.QCC[n]:e.currentTile.QCD;s.quantizationParameters=o;var l=e.currentTile.COC[n]!==undefined?e.currentTile.COC[n]:e.currentTile.COD;s.codingStyleParameters=l}i.codingStyleDefaultParameters=e.currentTile.COD}var T=function e(){function t(e,t){var r=s(Math.max(e,t))+1;this.levels=[];for(var a=0;a<r;a++){var i={width:e,height:t,items:[]};this.levels.push(i);e=Math.ceil(e/2);t=Math.ceil(t/2)}}t.prototype={reset:function e(t,r){var a=0,i=0,n;while(a<this.levels.length){n=this.levels[a];var s=t+r*n.width;if(n.items[s]!==undefined){i=n.items[s];break}n.index=s;t>>=1;r>>=1;a++}a--;n=this.levels[a];n.items[n.index]=i;this.currentLevel=a;delete this.value},incrementValue:function e(){var t=this.levels[this.currentLevel];t.items[t.index]++},nextLevel:function e(){var t=this.currentLevel;var r=this.levels[t];var a=r.items[r.index];t--;if(t<0){this.value=a;return false}this.currentLevel=t;r=this.levels[t];r.items[r.index]=a;return true}};return t}();var O=function e(){function t(e,t,r){var a=s(Math.max(e,t))+1;this.levels=[];for(var i=0;i<a;i++){var n=new Uint8Array(e*t);for(var o=0,l=n.length;o<l;o++){n[o]=r}var c={width:e,height:t,items:n};this.levels.push(c);e=Math.ceil(e/2);t=Math.ceil(t/2)}}t.prototype={reset:function e(t,r,a){var i=0;while(i<this.levels.length){var n=this.levels[i];var s=t+r*n.width;n.index=s;var o=n.items[s];if(o===255){break}if(o>a){this.currentLevel=i;this.propagateValues();return false}t>>=1;r>>=1;i++}this.currentLevel=i-1;return true},incrementValue:function e(t){var r=this.levels[this.currentLevel];r.items[r.index]=t+1;this.propagateValues()},propagateValues:function e(){var t=this.currentLevel;var r=this.levels[t];var a=r.items[r.index];while(--t>=0){r=this.levels[t];r.items[r.index]=a}},nextLevel:function e(){var t=this.currentLevel;var r=this.levels[t];var a=r.items[r.index];r.items[r.index]=255;t--;if(t<0){return false}this.currentLevel=t;r=this.levels[t];r.items[r.index]=a;return true}};return t}();var P=function e(){var t=17;var r=18;var a=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]);var i=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]);var s=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]);function o(e,t,r,n,o){this.width=e;this.height=t;this.contextLabelTable=r===\"HH\"?s:r===\"HL\"?i:a;var l=e*t;this.neighborsSignificance=new Uint8Array(l);this.coefficentsSign=new Uint8Array(l);this.coefficentsMagnitude=o>14?new Uint32Array(l):o>6?new Uint16Array(l):new Uint8Array(l);this.processingFlags=new Uint8Array(l);var c=new Uint8Array(l);if(n!==0){for(var h=0;h<l;h++){c[h]=n}}this.bitsDecoded=c;this.reset()}o.prototype={setDecoder:function e(t){this.decoder=t},reset:function e(){this.contexts=new Int8Array(19);this.contexts[0]=4<<1|0;this.contexts[t]=46<<1|0;this.contexts[r]=3<<1|0},setNeighborsSignificance:function e(t,r,a){var i=this.neighborsSignificance;var n=this.width,s=this.height;var o=r>0;var l=r+1<n;var c;if(t>0){c=a-n;if(o){i[c-1]+=16}if(l){i[c+1]+=16}i[c]+=4}if(t+1<s){c=a+n;if(o){i[c-1]+=16}if(l){i[c+1]+=16}i[c]+=4}if(o){i[a-1]+=1}if(l){i[a+1]+=1}i[a]|=128},runSignificancePropagationPass:function e(){var t=this.decoder;var r=this.width,a=this.height;var i=this.coefficentsMagnitude;var n=this.coefficentsSign;var s=this.neighborsSignificance;var o=this.processingFlags;var l=this.contexts;var c=this.contextLabelTable;var h=this.bitsDecoded;var u=~1;var f=1;var d=2;for(var g=0;g<a;g+=4){for(var v=0;v<r;v++){var p=g*r+v;for(var m=0;m<4;m++,p+=r){var b=g+m;if(b>=a){break}o[p]&=u;if(i[p]||!s[p]){continue}var y=c[s[p]];var k=t.readBit(l,y);if(k){var w=this.decodeSignBit(b,v,p);n[p]=w;i[p]=1;this.setNeighborsSignificance(b,v,p);o[p]|=d}h[p]++;o[p]|=f}}}},decodeSignBit:function e(t,r,a){var i=this.width,n=this.height;var s=this.coefficentsMagnitude;var o=this.coefficentsSign;var l,c,h,u;var f,d;u=r>0&&s[a-1]!==0;if(r+1<i&&s[a+1]!==0){h=o[a+1];if(u){c=o[a-1];l=1-h-c}else{l=1-h-h}}else if(u){c=o[a-1];l=1-c-c}else{l=0}var g=3*l;u=t>0&&s[a-i]!==0;if(t+1<n&&s[a+i]!==0){h=o[a+i];if(u){c=o[a-i];l=1-h-c+g}else{l=1-h-h+g}}else if(u){c=o[a-i];l=1-c-c+g}else{l=g}if(l>=0){f=9+l;d=this.decoder.readBit(this.contexts,f)}else{f=9-l;d=this.decoder.readBit(this.contexts,f)^1}return d},runMagnitudeRefinementPass:function e(){var t=this.decoder;var r=this.width,a=this.height;var i=this.coefficentsMagnitude;var n=this.neighborsSignificance;var s=this.contexts;var o=this.bitsDecoded;var l=this.processingFlags;var c=1;var h=2;var u=r*a;var f=r*4;for(var d=0,g;d<u;d=g){g=Math.min(u,d+f);for(var v=0;v<r;v++){for(var p=d+v;p<g;p+=r){if(!i[p]||(l[p]&c)!==0){continue}var m=16;if((l[p]&h)!==0){l[p]^=h;var b=n[p]&127;m=b===0?15:14}var y=t.readBit(s,m);i[p]=i[p]<<1|y;o[p]++;l[p]|=c}}}},runCleanupPass:function e(){var a=this.decoder;var i=this.width,n=this.height;var s=this.neighborsSignificance;var o=this.coefficentsMagnitude;var l=this.coefficentsSign;var c=this.contexts;var h=this.contextLabelTable;var u=this.bitsDecoded;var f=this.processingFlags;var d=1;var g=2;var v=i;var p=i*2;var m=i*3;var b;for(var y=0;y<n;y=b){b=Math.min(y+4,n);var k=y*i;var w=y+3<n;for(var C=0;C<i;C++){var x=k+C;var S=w&&f[x]===0&&f[x+v]===0&&f[x+p]===0&&f[x+m]===0&&s[x]===0&&s[x+v]===0&&s[x+p]===0&&s[x+m]===0;var A=0,I=x;var B=y,R;if(S){var T=a.readBit(c,r);if(!T){u[x]++;u[x+v]++;u[x+p]++;u[x+m]++;continue}A=a.readBit(c,t)<<1|a.readBit(c,t);if(A!==0){B=y+A;I+=A*i}R=this.decodeSignBit(B,C,I);l[I]=R;o[I]=1;this.setNeighborsSignificance(B,C,I);f[I]|=g;I=x;for(var O=y;O<=B;O++,I+=i){u[I]++}A++}for(B=y+A;B<b;B++,I+=i){if(o[I]||(f[I]&d)!==0){continue}var P=h[s[I]];var E=a.readBit(c,P);if(E===1){R=this.decodeSignBit(B,C,I);l[I]=R;o[I]=1;this.setNeighborsSignificance(B,C,I);f[I]|=g}u[I]++}}}},checkSegmentationSymbol:function e(){var r=this.decoder;var a=this.contexts;var i=r.readBit(a,t)<<3|r.readBit(a,t)<<2|r.readBit(a,t)<<1|r.readBit(a,t);if(i!==10){n(\"JPX Error: Invalid segmentation symbol\")}}};return o}();var E=function e(){function t(){}t.prototype.calculate=function e(t,r,a){var i=t[0];for(var n=1,s=t.length;n<s;n++){i=this.iterate(i,t[n],r,a)}return i};t.prototype.extend=function e(t,r,a){var i=r-1,n=r+1;var s=r+a-2,o=r+a;t[i--]=t[n++];t[o++]=t[s--];t[i--]=t[n++];t[o++]=t[s--];t[i--]=t[n++];t[o++]=t[s--];t[i]=t[n];t[o]=t[s]};t.prototype.iterate=function e(t,r,a,i){var n=t.width,s=t.height,o=t.items;var l=r.width;var c=r.height;var h=r.items;var u,f,d,g,v,p;for(d=0,u=0;u<s;u++){g=u*2*l;for(f=0;f<n;f++,d++,g+=2){h[g]=o[d]}}o=t.items=null;var m=4;var b=new Float32Array(l+2*m);if(l===1){if((a&1)!==0){for(p=0,d=0;p<c;p++,d+=l){h[d]*=.5}}}else{for(p=0,d=0;p<c;p++,d+=l){b.set(h.subarray(d,d+l),m);this.extend(b,m,l);this.filter(b,m,l);h.set(b.subarray(m,m+l),d)}}var y=16;var k=[];for(u=0;u<y;u++){k.push(new Float32Array(c+2*m))}var w,C=0;t=m+c;if(c===1){if((i&1)!==0){for(v=0;v<l;v++){h[v]*=.5}}}else{for(v=0;v<l;v++){if(C===0){y=Math.min(l-v,y);for(d=v,g=m;g<t;d+=l,g++){for(w=0;w<y;w++){k[w][g]=h[d+w]}}C=y}C--;var x=k[C];this.extend(x,m,c);this.filter(x,m,c);if(C===0){d=v-y+1;for(g=m;g<t;d+=l,g++){for(w=0;w<y;w++){h[d+w]=k[w][g]}}}}}return{width:l,height:c,items:h}};return t}();var M=function e(){function t(){E.call(this)}t.prototype=Object.create(E.prototype);t.prototype.filter=function e(t,r,a){var i=a>>1;r=r|0;var n,s,o,l;var c=-1.586134342059924;var h=-.052980118572961;var u=.882911075530934;var f=.443506852043971;var d=1.230174104914001;var g=1/d;n=r-3;for(s=i+4;s--;n+=2){t[n]*=g}n=r-2;o=f*t[n-1];for(s=i+3;s--;n+=2){l=f*t[n+1];t[n]=d*t[n]-o-l;if(s--){n+=2;o=f*t[n+1];t[n]=d*t[n]-o-l}else{break}}n=r-1;o=u*t[n-1];for(s=i+2;s--;n+=2){l=u*t[n+1];t[n]-=o+l;if(s--){n+=2;o=u*t[n+1];t[n]-=o+l}else{break}}n=r;o=h*t[n-1];for(s=i+1;s--;n+=2){l=h*t[n+1];t[n]-=o+l;if(s--){n+=2;o=h*t[n+1];t[n]-=o+l}else{break}}if(i!==0){n=r+1;o=c*t[n-1];for(s=i;s--;n+=2){l=c*t[n+1];t[n]-=o+l;if(s--){n+=2;o=c*t[n+1];t[n]-=o+l}else{break}}}};return t}();var L=function e(){function t(){E.call(this)}t.prototype=Object.create(E.prototype);t.prototype.filter=function e(t,r,a){var i=a>>1;r=r|0;var n,s;for(n=r,s=i+1;s--;n+=2){t[n]-=t[n-1]+t[n+1]+2>>2}for(n=r+1,s=i;s--;n+=2){t[n]+=t[n-1]+t[n+1]>>1}};return t}();return r}();e.JpxImage=h});(function(e,t){t(e.pdfjsCoreMetrics={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.getLookupTableFactory;var a=r(function(e){e[\"Courier\"]=600;e[\"Courier-Bold\"]=600;e[\"Courier-BoldOblique\"]=600;e[\"Courier-Oblique\"]=600;e[\"Helvetica\"]=r(function(e){e[\"space\"]=278;e[\"exclam\"]=278;e[\"quotedbl\"]=355;e[\"numbersign\"]=556;e[\"dollar\"]=556;e[\"percent\"]=889;e[\"ampersand\"]=667;e[\"quoteright\"]=222;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=389;e[\"plus\"]=584;e[\"comma\"]=278;e[\"hyphen\"]=333;e[\"period\"]=278;e[\"slash\"]=278;e[\"zero\"]=556;e[\"one\"]=556;e[\"two\"]=556;e[\"three\"]=556;e[\"four\"]=556;e[\"five\"]=556;e[\"six\"]=556;e[\"seven\"]=556;e[\"eight\"]=556;e[\"nine\"]=556;e[\"colon\"]=278;e[\"semicolon\"]=278;e[\"less\"]=584;e[\"equal\"]=584;e[\"greater\"]=584;e[\"question\"]=556;e[\"at\"]=1015;e[\"A\"]=667;e[\"B\"]=667;e[\"C\"]=722;e[\"D\"]=722;e[\"E\"]=667;e[\"F\"]=611;e[\"G\"]=778;e[\"H\"]=722;e[\"I\"]=278;e[\"J\"]=500;e[\"K\"]=667;e[\"L\"]=556;e[\"M\"]=833;e[\"N\"]=722;e[\"O\"]=778;e[\"P\"]=667;e[\"Q\"]=778;e[\"R\"]=722;e[\"S\"]=667;e[\"T\"]=611;e[\"U\"]=722;e[\"V\"]=667;e[\"W\"]=944;e[\"X\"]=667;e[\"Y\"]=667;e[\"Z\"]=611;e[\"bracketleft\"]=278;e[\"backslash\"]=278;e[\"bracketright\"]=278;e[\"asciicircum\"]=469;e[\"underscore\"]=556;e[\"quoteleft\"]=222;e[\"a\"]=556;e[\"b\"]=556;e[\"c\"]=500;e[\"d\"]=556;e[\"e\"]=556;e[\"f\"]=278;e[\"g\"]=556;e[\"h\"]=556;e[\"i\"]=222;e[\"j\"]=222;e[\"k\"]=500;e[\"l\"]=222;e[\"m\"]=833;e[\"n\"]=556;e[\"o\"]=556;e[\"p\"]=556;e[\"q\"]=556;e[\"r\"]=333;e[\"s\"]=500;e[\"t\"]=278;e[\"u\"]=556;e[\"v\"]=500;e[\"w\"]=722;e[\"x\"]=500;e[\"y\"]=500;e[\"z\"]=500;e[\"braceleft\"]=334;e[\"bar\"]=260;e[\"braceright\"]=334;e[\"asciitilde\"]=584;e[\"exclamdown\"]=333;e[\"cent\"]=556;e[\"sterling\"]=556;e[\"fraction\"]=167;e[\"yen\"]=556;e[\"florin\"]=556;e[\"section\"]=556;e[\"currency\"]=556;e[\"quotesingle\"]=191;e[\"quotedblleft\"]=333;e[\"guillemotleft\"]=556;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=500;e[\"fl\"]=500;e[\"endash\"]=556;e[\"dagger\"]=556;e[\"daggerdbl\"]=556;e[\"periodcentered\"]=278;e[\"paragraph\"]=537;e[\"bullet\"]=350;e[\"quotesinglbase\"]=222;e[\"quotedblbase\"]=333;e[\"quotedblright\"]=333;e[\"guillemotright\"]=556;e[\"ellipsis\"]=1e3;e[\"perthousand\"]=1e3;e[\"questiondown\"]=611;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=1e3;e[\"AE\"]=1e3;e[\"ordfeminine\"]=370;e[\"Lslash\"]=556;e[\"Oslash\"]=778;e[\"OE\"]=1e3;e[\"ordmasculine\"]=365;e[\"ae\"]=889;e[\"dotlessi\"]=278;e[\"lslash\"]=222;e[\"oslash\"]=611;e[\"oe\"]=944;e[\"germandbls\"]=611;e[\"Idieresis\"]=278;e[\"eacute\"]=556;e[\"abreve\"]=556;e[\"uhungarumlaut\"]=556;e[\"ecaron\"]=556;e[\"Ydieresis\"]=667;e[\"divide\"]=584;e[\"Yacute\"]=667;e[\"Acircumflex\"]=667;e[\"aacute\"]=556;e[\"Ucircumflex\"]=722;e[\"yacute\"]=500;e[\"scommaaccent\"]=500;e[\"ecircumflex\"]=556;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=556;e[\"Uacute\"]=722;e[\"uogonek\"]=556;e[\"Edieresis\"]=667;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=737;e[\"Emacron\"]=667;e[\"ccaron\"]=500;e[\"aring\"]=556;e[\"Ncommaaccent\"]=722;e[\"lacute\"]=222;e[\"agrave\"]=556;e[\"Tcommaaccent\"]=611;e[\"Cacute\"]=722;e[\"atilde\"]=556;e[\"Edotaccent\"]=667;e[\"scaron\"]=500;e[\"scedilla\"]=500;e[\"iacute\"]=278;e[\"lozenge\"]=471;e[\"Rcaron\"]=722;e[\"Gcommaaccent\"]=778;e[\"ucircumflex\"]=556;e[\"acircumflex\"]=556;e[\"Amacron\"]=667;e[\"rcaron\"]=333;e[\"ccedilla\"]=500;e[\"Zdotaccent\"]=611;e[\"Thorn\"]=667;e[\"Omacron\"]=778;e[\"Racute\"]=722;e[\"Sacute\"]=667;e[\"dcaron\"]=643;e[\"Umacron\"]=722;e[\"uring\"]=556;e[\"threesuperior\"]=333;e[\"Ograve\"]=778;e[\"Agrave\"]=667;e[\"Abreve\"]=667;e[\"multiply\"]=584;e[\"uacute\"]=556;e[\"Tcaron\"]=611;e[\"partialdiff\"]=476;e[\"ydieresis\"]=500;e[\"Nacute\"]=722;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=667;e[\"adieresis\"]=556;e[\"edieresis\"]=556;e[\"cacute\"]=500;e[\"nacute\"]=556;e[\"umacron\"]=556;e[\"Ncaron\"]=722;e[\"Iacute\"]=278;e[\"plusminus\"]=584;e[\"brokenbar\"]=260;e[\"registered\"]=737;e[\"Gbreve\"]=778;e[\"Idotaccent\"]=278;e[\"summation\"]=600;e[\"Egrave\"]=667;e[\"racute\"]=333;e[\"omacron\"]=556;e[\"Zacute\"]=611;e[\"Zcaron\"]=611;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=722;e[\"lcommaaccent\"]=222;e[\"tcaron\"]=317;e[\"eogonek\"]=556;e[\"Uogonek\"]=722;e[\"Aacute\"]=667;e[\"Adieresis\"]=667;e[\"egrave\"]=556;e[\"zacute\"]=500;e[\"iogonek\"]=222;e[\"Oacute\"]=778;e[\"oacute\"]=556;e[\"amacron\"]=556;e[\"sacute\"]=500;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=778;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=556;e[\"twosuperior\"]=333;e[\"Odieresis\"]=778;e[\"mu\"]=556;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=556;e[\"Eogonek\"]=667;e[\"dcroat\"]=556;e[\"threequarters\"]=834;e[\"Scedilla\"]=667;e[\"lcaron\"]=299;e[\"Kcommaaccent\"]=667;e[\"Lacute\"]=556;e[\"trademark\"]=1e3;e[\"edotaccent\"]=556;e[\"Igrave\"]=278;e[\"Imacron\"]=278;e[\"Lcaron\"]=556;e[\"onehalf\"]=834;e[\"lessequal\"]=549;e[\"ocircumflex\"]=556;e[\"ntilde\"]=556;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=667;e[\"emacron\"]=556;e[\"gbreve\"]=556;e[\"onequarter\"]=834;e[\"Scaron\"]=667;e[\"Scommaaccent\"]=667;e[\"Ohungarumlaut\"]=778;e[\"degree\"]=400;e[\"ograve\"]=556;e[\"Ccaron\"]=722;e[\"ugrave\"]=556;e[\"radical\"]=453;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=333;e[\"Ntilde\"]=722;e[\"otilde\"]=556;e[\"Rcommaaccent\"]=722;e[\"Lcommaaccent\"]=556;e[\"Atilde\"]=667;e[\"Aogonek\"]=667;e[\"Aring\"]=667;e[\"Otilde\"]=778;e[\"zdotaccent\"]=500;e[\"Ecaron\"]=667;e[\"Iogonek\"]=278;e[\"kcommaaccent\"]=500;e[\"minus\"]=584;e[\"Icircumflex\"]=278;e[\"ncaron\"]=556;e[\"tcommaaccent\"]=278;e[\"logicalnot\"]=584;e[\"odieresis\"]=556;e[\"udieresis\"]=556;e[\"notequal\"]=549;e[\"gcommaaccent\"]=556;e[\"eth\"]=556;e[\"zcaron\"]=500;e[\"ncommaaccent\"]=556;e[\"onesuperior\"]=333;e[\"imacron\"]=278;e[\"Euro\"]=556});e[\"Helvetica-Bold\"]=r(function(e){e[\"space\"]=278;e[\"exclam\"]=333;e[\"quotedbl\"]=474;e[\"numbersign\"]=556;e[\"dollar\"]=556;e[\"percent\"]=889;e[\"ampersand\"]=722;e[\"quoteright\"]=278;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=389;e[\"plus\"]=584;e[\"comma\"]=278;e[\"hyphen\"]=333;e[\"period\"]=278;e[\"slash\"]=278;e[\"zero\"]=556;e[\"one\"]=556;e[\"two\"]=556;e[\"three\"]=556;e[\"four\"]=556;e[\"five\"]=556;e[\"six\"]=556;e[\"seven\"]=556;e[\"eight\"]=556;e[\"nine\"]=556;e[\"colon\"]=333;e[\"semicolon\"]=333;e[\"less\"]=584;e[\"equal\"]=584;e[\"greater\"]=584;e[\"question\"]=611;e[\"at\"]=975;e[\"A\"]=722;e[\"B\"]=722;e[\"C\"]=722;e[\"D\"]=722;e[\"E\"]=667;e[\"F\"]=611;e[\"G\"]=778;e[\"H\"]=722;e[\"I\"]=278;e[\"J\"]=556;e[\"K\"]=722;e[\"L\"]=611;e[\"M\"]=833;e[\"N\"]=722;e[\"O\"]=778;e[\"P\"]=667;e[\"Q\"]=778;e[\"R\"]=722;e[\"S\"]=667;e[\"T\"]=611;e[\"U\"]=722;e[\"V\"]=667;e[\"W\"]=944;e[\"X\"]=667;e[\"Y\"]=667;e[\"Z\"]=611;e[\"bracketleft\"]=333;e[\"backslash\"]=278;e[\"bracketright\"]=333;e[\"asciicircum\"]=584;e[\"underscore\"]=556;e[\"quoteleft\"]=278;e[\"a\"]=556;e[\"b\"]=611;e[\"c\"]=556;e[\"d\"]=611;e[\"e\"]=556;e[\"f\"]=333;e[\"g\"]=611;e[\"h\"]=611;e[\"i\"]=278;e[\"j\"]=278;e[\"k\"]=556;e[\"l\"]=278;e[\"m\"]=889;e[\"n\"]=611;e[\"o\"]=611;e[\"p\"]=611;e[\"q\"]=611;e[\"r\"]=389;e[\"s\"]=556;e[\"t\"]=333;e[\"u\"]=611;e[\"v\"]=556;e[\"w\"]=778;e[\"x\"]=556;e[\"y\"]=556;e[\"z\"]=500;e[\"braceleft\"]=389;e[\"bar\"]=280;e[\"braceright\"]=389;e[\"asciitilde\"]=584;e[\"exclamdown\"]=333;e[\"cent\"]=556;e[\"sterling\"]=556;e[\"fraction\"]=167;e[\"yen\"]=556;e[\"florin\"]=556;e[\"section\"]=556;e[\"currency\"]=556;e[\"quotesingle\"]=238;e[\"quotedblleft\"]=500;e[\"guillemotleft\"]=556;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=611;e[\"fl\"]=611;e[\"endash\"]=556;e[\"dagger\"]=556;e[\"daggerdbl\"]=556;e[\"periodcentered\"]=278;e[\"paragraph\"]=556;e[\"bullet\"]=350;e[\"quotesinglbase\"]=278;e[\"quotedblbase\"]=500;e[\"quotedblright\"]=500;e[\"guillemotright\"]=556;e[\"ellipsis\"]=1e3;e[\"perthousand\"]=1e3;e[\"questiondown\"]=611;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=1e3;e[\"AE\"]=1e3;e[\"ordfeminine\"]=370;e[\"Lslash\"]=611;e[\"Oslash\"]=778;e[\"OE\"]=1e3;e[\"ordmasculine\"]=365;e[\"ae\"]=889;e[\"dotlessi\"]=278;e[\"lslash\"]=278;e[\"oslash\"]=611;e[\"oe\"]=944;e[\"germandbls\"]=611;e[\"Idieresis\"]=278;e[\"eacute\"]=556;e[\"abreve\"]=556;e[\"uhungarumlaut\"]=611;e[\"ecaron\"]=556;e[\"Ydieresis\"]=667;e[\"divide\"]=584;e[\"Yacute\"]=667;e[\"Acircumflex\"]=722;e[\"aacute\"]=556;e[\"Ucircumflex\"]=722;e[\"yacute\"]=556;e[\"scommaaccent\"]=556;e[\"ecircumflex\"]=556;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=556;e[\"Uacute\"]=722;e[\"uogonek\"]=611;e[\"Edieresis\"]=667;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=737;e[\"Emacron\"]=667;e[\"ccaron\"]=556;e[\"aring\"]=556;e[\"Ncommaaccent\"]=722;e[\"lacute\"]=278;e[\"agrave\"]=556;e[\"Tcommaaccent\"]=611;e[\"Cacute\"]=722;e[\"atilde\"]=556;e[\"Edotaccent\"]=667;e[\"scaron\"]=556;e[\"scedilla\"]=556;e[\"iacute\"]=278;e[\"lozenge\"]=494;e[\"Rcaron\"]=722;e[\"Gcommaaccent\"]=778;e[\"ucircumflex\"]=611;e[\"acircumflex\"]=556;e[\"Amacron\"]=722;e[\"rcaron\"]=389;e[\"ccedilla\"]=556;e[\"Zdotaccent\"]=611;e[\"Thorn\"]=667;e[\"Omacron\"]=778;e[\"Racute\"]=722;e[\"Sacute\"]=667;e[\"dcaron\"]=743;e[\"Umacron\"]=722;e[\"uring\"]=611;e[\"threesuperior\"]=333;e[\"Ograve\"]=778;e[\"Agrave\"]=722;e[\"Abreve\"]=722;e[\"multiply\"]=584;e[\"uacute\"]=611;e[\"Tcaron\"]=611;e[\"partialdiff\"]=494;e[\"ydieresis\"]=556;e[\"Nacute\"]=722;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=667;e[\"adieresis\"]=556;e[\"edieresis\"]=556;e[\"cacute\"]=556;e[\"nacute\"]=611;e[\"umacron\"]=611;e[\"Ncaron\"]=722;e[\"Iacute\"]=278;e[\"plusminus\"]=584;e[\"brokenbar\"]=280;e[\"registered\"]=737;e[\"Gbreve\"]=778;e[\"Idotaccent\"]=278;e[\"summation\"]=600;e[\"Egrave\"]=667;e[\"racute\"]=389;e[\"omacron\"]=611;e[\"Zacute\"]=611;e[\"Zcaron\"]=611;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=722;e[\"lcommaaccent\"]=278;e[\"tcaron\"]=389;e[\"eogonek\"]=556;e[\"Uogonek\"]=722;e[\"Aacute\"]=722;e[\"Adieresis\"]=722;e[\"egrave\"]=556;e[\"zacute\"]=500;e[\"iogonek\"]=278;e[\"Oacute\"]=778;e[\"oacute\"]=611;e[\"amacron\"]=556;e[\"sacute\"]=556;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=778;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=611;e[\"twosuperior\"]=333;e[\"Odieresis\"]=778;e[\"mu\"]=611;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=611;e[\"Eogonek\"]=667;e[\"dcroat\"]=611;e[\"threequarters\"]=834;e[\"Scedilla\"]=667;e[\"lcaron\"]=400;e[\"Kcommaaccent\"]=722;e[\"Lacute\"]=611;e[\"trademark\"]=1e3;e[\"edotaccent\"]=556;e[\"Igrave\"]=278;e[\"Imacron\"]=278;e[\"Lcaron\"]=611;e[\"onehalf\"]=834;e[\"lessequal\"]=549;e[\"ocircumflex\"]=611;e[\"ntilde\"]=611;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=667;e[\"emacron\"]=556;e[\"gbreve\"]=611;e[\"onequarter\"]=834;e[\"Scaron\"]=667;e[\"Scommaaccent\"]=667;e[\"Ohungarumlaut\"]=778;e[\"degree\"]=400;e[\"ograve\"]=611;e[\"Ccaron\"]=722;e[\"ugrave\"]=611;e[\"radical\"]=549;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=389;e[\"Ntilde\"]=722;e[\"otilde\"]=611;e[\"Rcommaaccent\"]=722;e[\"Lcommaaccent\"]=611;e[\"Atilde\"]=722;e[\"Aogonek\"]=722;e[\"Aring\"]=722;e[\"Otilde\"]=778;e[\"zdotaccent\"]=500;e[\"Ecaron\"]=667;e[\"Iogonek\"]=278;e[\"kcommaaccent\"]=556;e[\"minus\"]=584;e[\"Icircumflex\"]=278;e[\"ncaron\"]=611;e[\"tcommaaccent\"]=333;e[\"logicalnot\"]=584;e[\"odieresis\"]=611;e[\"udieresis\"]=611;e[\"notequal\"]=549;e[\"gcommaaccent\"]=611;e[\"eth\"]=611;e[\"zcaron\"]=500;e[\"ncommaaccent\"]=611;e[\"onesuperior\"]=333;e[\"imacron\"]=278;e[\"Euro\"]=556});e[\"Helvetica-BoldOblique\"]=r(function(e){e[\"space\"]=278;e[\"exclam\"]=333;e[\"quotedbl\"]=474;e[\"numbersign\"]=556;e[\"dollar\"]=556;e[\"percent\"]=889;e[\"ampersand\"]=722;e[\"quoteright\"]=278;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=389;e[\"plus\"]=584;e[\"comma\"]=278;e[\"hyphen\"]=333;e[\"period\"]=278;e[\"slash\"]=278;e[\"zero\"]=556;e[\"one\"]=556;e[\"two\"]=556;e[\"three\"]=556;e[\"four\"]=556;e[\"five\"]=556;e[\"six\"]=556;e[\"seven\"]=556;e[\"eight\"]=556;e[\"nine\"]=556;e[\"colon\"]=333;e[\"semicolon\"]=333;e[\"less\"]=584;e[\"equal\"]=584;e[\"greater\"]=584;e[\"question\"]=611;e[\"at\"]=975;e[\"A\"]=722;e[\"B\"]=722;e[\"C\"]=722;e[\"D\"]=722;e[\"E\"]=667;e[\"F\"]=611;e[\"G\"]=778;e[\"H\"]=722;e[\"I\"]=278;e[\"J\"]=556;e[\"K\"]=722;e[\"L\"]=611;e[\"M\"]=833;e[\"N\"]=722;e[\"O\"]=778;e[\"P\"]=667;e[\"Q\"]=778;e[\"R\"]=722;e[\"S\"]=667;e[\"T\"]=611;e[\"U\"]=722;e[\"V\"]=667;e[\"W\"]=944;e[\"X\"]=667;e[\"Y\"]=667;e[\"Z\"]=611;e[\"bracketleft\"]=333;e[\"backslash\"]=278;e[\"bracketright\"]=333;e[\"asciicircum\"]=584;e[\"underscore\"]=556;e[\"quoteleft\"]=278;e[\"a\"]=556;e[\"b\"]=611;e[\"c\"]=556;e[\"d\"]=611;e[\"e\"]=556;e[\"f\"]=333;e[\"g\"]=611;e[\"h\"]=611;e[\"i\"]=278;e[\"j\"]=278;e[\"k\"]=556;e[\"l\"]=278;e[\"m\"]=889;e[\"n\"]=611;e[\"o\"]=611;e[\"p\"]=611;e[\"q\"]=611;e[\"r\"]=389;e[\"s\"]=556;e[\"t\"]=333;e[\"u\"]=611;e[\"v\"]=556;e[\"w\"]=778;e[\"x\"]=556;e[\"y\"]=556;e[\"z\"]=500;e[\"braceleft\"]=389;e[\"bar\"]=280;e[\"braceright\"]=389;e[\"asciitilde\"]=584;e[\"exclamdown\"]=333;e[\"cent\"]=556;e[\"sterling\"]=556;e[\"fraction\"]=167;e[\"yen\"]=556;e[\"florin\"]=556;e[\"section\"]=556;e[\"currency\"]=556;e[\"quotesingle\"]=238;e[\"quotedblleft\"]=500;e[\"guillemotleft\"]=556;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=611;e[\"fl\"]=611;e[\"endash\"]=556;e[\"dagger\"]=556;e[\"daggerdbl\"]=556;e[\"periodcentered\"]=278;e[\"paragraph\"]=556;e[\"bullet\"]=350;e[\"quotesinglbase\"]=278;e[\"quotedblbase\"]=500;e[\"quotedblright\"]=500;e[\"guillemotright\"]=556;e[\"ellipsis\"]=1e3;e[\"perthousand\"]=1e3;e[\"questiondown\"]=611;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=1e3;e[\"AE\"]=1e3;e[\"ordfeminine\"]=370;e[\"Lslash\"]=611;e[\"Oslash\"]=778;e[\"OE\"]=1e3;e[\"ordmasculine\"]=365;e[\"ae\"]=889;e[\"dotlessi\"]=278;e[\"lslash\"]=278;e[\"oslash\"]=611;e[\"oe\"]=944;e[\"germandbls\"]=611;e[\"Idieresis\"]=278;e[\"eacute\"]=556;e[\"abreve\"]=556;e[\"uhungarumlaut\"]=611;e[\"ecaron\"]=556;e[\"Ydieresis\"]=667;e[\"divide\"]=584;e[\"Yacute\"]=667;e[\"Acircumflex\"]=722;e[\"aacute\"]=556;e[\"Ucircumflex\"]=722;e[\"yacute\"]=556;e[\"scommaaccent\"]=556;e[\"ecircumflex\"]=556;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=556;e[\"Uacute\"]=722;e[\"uogonek\"]=611;e[\"Edieresis\"]=667;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=737;e[\"Emacron\"]=667;e[\"ccaron\"]=556;e[\"aring\"]=556;e[\"Ncommaaccent\"]=722;e[\"lacute\"]=278;e[\"agrave\"]=556;e[\"Tcommaaccent\"]=611;e[\"Cacute\"]=722;e[\"atilde\"]=556;e[\"Edotaccent\"]=667;e[\"scaron\"]=556;e[\"scedilla\"]=556;e[\"iacute\"]=278;e[\"lozenge\"]=494;e[\"Rcaron\"]=722;e[\"Gcommaaccent\"]=778;e[\"ucircumflex\"]=611;e[\"acircumflex\"]=556;e[\"Amacron\"]=722;e[\"rcaron\"]=389;e[\"ccedilla\"]=556;e[\"Zdotaccent\"]=611;e[\"Thorn\"]=667;e[\"Omacron\"]=778;e[\"Racute\"]=722;e[\"Sacute\"]=667;e[\"dcaron\"]=743;e[\"Umacron\"]=722;e[\"uring\"]=611;e[\"threesuperior\"]=333;e[\"Ograve\"]=778;e[\"Agrave\"]=722;e[\"Abreve\"]=722;e[\"multiply\"]=584;e[\"uacute\"]=611;e[\"Tcaron\"]=611;e[\"partialdiff\"]=494;e[\"ydieresis\"]=556;e[\"Nacute\"]=722;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=667;e[\"adieresis\"]=556;e[\"edieresis\"]=556;e[\"cacute\"]=556;e[\"nacute\"]=611;e[\"umacron\"]=611;e[\"Ncaron\"]=722;e[\"Iacute\"]=278;e[\"plusminus\"]=584;e[\"brokenbar\"]=280;e[\"registered\"]=737;e[\"Gbreve\"]=778;e[\"Idotaccent\"]=278;e[\"summation\"]=600;e[\"Egrave\"]=667;e[\"racute\"]=389;e[\"omacron\"]=611;e[\"Zacute\"]=611;e[\"Zcaron\"]=611;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=722;e[\"lcommaaccent\"]=278;e[\"tcaron\"]=389;e[\"eogonek\"]=556;e[\"Uogonek\"]=722;e[\"Aacute\"]=722;e[\"Adieresis\"]=722;e[\"egrave\"]=556;e[\"zacute\"]=500;e[\"iogonek\"]=278;e[\"Oacute\"]=778;e[\"oacute\"]=611;e[\"amacron\"]=556;e[\"sacute\"]=556;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=778;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=611;e[\"twosuperior\"]=333;e[\"Odieresis\"]=778;e[\"mu\"]=611;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=611;e[\"Eogonek\"]=667;e[\"dcroat\"]=611;e[\"threequarters\"]=834;e[\"Scedilla\"]=667;e[\"lcaron\"]=400;e[\"Kcommaaccent\"]=722;e[\"Lacute\"]=611;e[\"trademark\"]=1e3;e[\"edotaccent\"]=556;e[\"Igrave\"]=278;e[\"Imacron\"]=278;e[\"Lcaron\"]=611;e[\"onehalf\"]=834;e[\"lessequal\"]=549;e[\"ocircumflex\"]=611;e[\"ntilde\"]=611;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=667;e[\"emacron\"]=556;e[\"gbreve\"]=611;e[\"onequarter\"]=834;e[\"Scaron\"]=667;e[\"Scommaaccent\"]=667;e[\"Ohungarumlaut\"]=778;e[\"degree\"]=400;e[\"ograve\"]=611;e[\"Ccaron\"]=722;e[\"ugrave\"]=611;e[\"radical\"]=549;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=389;e[\"Ntilde\"]=722;e[\"otilde\"]=611;e[\"Rcommaaccent\"]=722;e[\"Lcommaaccent\"]=611;e[\"Atilde\"]=722;e[\"Aogonek\"]=722;e[\"Aring\"]=722;e[\"Otilde\"]=778;e[\"zdotaccent\"]=500;e[\"Ecaron\"]=667;e[\"Iogonek\"]=278;e[\"kcommaaccent\"]=556;e[\"minus\"]=584;e[\"Icircumflex\"]=278;e[\"ncaron\"]=611;e[\"tcommaaccent\"]=333;e[\"logicalnot\"]=584;e[\"odieresis\"]=611;e[\"udieresis\"]=611;e[\"notequal\"]=549;e[\"gcommaaccent\"]=611;e[\"eth\"]=611;e[\"zcaron\"]=500;e[\"ncommaaccent\"]=611;e[\"onesuperior\"]=333;e[\"imacron\"]=278;e[\"Euro\"]=556});e[\"Helvetica-Oblique\"]=r(function(e){e[\"space\"]=278;e[\"exclam\"]=278;e[\"quotedbl\"]=355;e[\"numbersign\"]=556;e[\"dollar\"]=556;e[\"percent\"]=889;e[\"ampersand\"]=667;e[\"quoteright\"]=222;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=389;e[\"plus\"]=584;e[\"comma\"]=278;e[\"hyphen\"]=333;e[\"period\"]=278;e[\"slash\"]=278;e[\"zero\"]=556;e[\"one\"]=556;e[\"two\"]=556;e[\"three\"]=556;e[\"four\"]=556;e[\"five\"]=556;e[\"six\"]=556;e[\"seven\"]=556;e[\"eight\"]=556;e[\"nine\"]=556;e[\"colon\"]=278;e[\"semicolon\"]=278;e[\"less\"]=584;e[\"equal\"]=584;e[\"greater\"]=584;e[\"question\"]=556;e[\"at\"]=1015;e[\"A\"]=667;e[\"B\"]=667;e[\"C\"]=722;e[\"D\"]=722;e[\"E\"]=667;e[\"F\"]=611;e[\"G\"]=778;e[\"H\"]=722;e[\"I\"]=278;e[\"J\"]=500;e[\"K\"]=667;e[\"L\"]=556;e[\"M\"]=833;e[\"N\"]=722;e[\"O\"]=778;e[\"P\"]=667;e[\"Q\"]=778;e[\"R\"]=722;e[\"S\"]=667;e[\"T\"]=611;e[\"U\"]=722;e[\"V\"]=667;e[\"W\"]=944;e[\"X\"]=667;e[\"Y\"]=667;e[\"Z\"]=611;e[\"bracketleft\"]=278;e[\"backslash\"]=278;e[\"bracketright\"]=278;e[\"asciicircum\"]=469;e[\"underscore\"]=556;e[\"quoteleft\"]=222;e[\"a\"]=556;e[\"b\"]=556;e[\"c\"]=500;e[\"d\"]=556;e[\"e\"]=556;e[\"f\"]=278;e[\"g\"]=556;e[\"h\"]=556;e[\"i\"]=222;e[\"j\"]=222;e[\"k\"]=500;e[\"l\"]=222;e[\"m\"]=833;e[\"n\"]=556;e[\"o\"]=556;e[\"p\"]=556;e[\"q\"]=556;e[\"r\"]=333;e[\"s\"]=500;e[\"t\"]=278;e[\"u\"]=556;e[\"v\"]=500;e[\"w\"]=722;e[\"x\"]=500;e[\"y\"]=500;e[\"z\"]=500;e[\"braceleft\"]=334;e[\"bar\"]=260;e[\"braceright\"]=334;e[\"asciitilde\"]=584;e[\"exclamdown\"]=333;e[\"cent\"]=556;e[\"sterling\"]=556;e[\"fraction\"]=167;e[\"yen\"]=556;e[\"florin\"]=556;e[\"section\"]=556;e[\"currency\"]=556;e[\"quotesingle\"]=191;e[\"quotedblleft\"]=333;e[\"guillemotleft\"]=556;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=500;e[\"fl\"]=500;e[\"endash\"]=556;e[\"dagger\"]=556;e[\"daggerdbl\"]=556;e[\"periodcentered\"]=278;e[\"paragraph\"]=537;e[\"bullet\"]=350;e[\"quotesinglbase\"]=222;e[\"quotedblbase\"]=333;e[\"quotedblright\"]=333;e[\"guillemotright\"]=556;e[\"ellipsis\"]=1e3;e[\"perthousand\"]=1e3;e[\"questiondown\"]=611;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=1e3;e[\"AE\"]=1e3;e[\"ordfeminine\"]=370;e[\"Lslash\"]=556;e[\"Oslash\"]=778;e[\"OE\"]=1e3;e[\"ordmasculine\"]=365;e[\"ae\"]=889;e[\"dotlessi\"]=278;e[\"lslash\"]=222;e[\"oslash\"]=611;e[\"oe\"]=944;e[\"germandbls\"]=611;e[\"Idieresis\"]=278;e[\"eacute\"]=556;e[\"abreve\"]=556;e[\"uhungarumlaut\"]=556;e[\"ecaron\"]=556;e[\"Ydieresis\"]=667;e[\"divide\"]=584;e[\"Yacute\"]=667;e[\"Acircumflex\"]=667;e[\"aacute\"]=556;e[\"Ucircumflex\"]=722;e[\"yacute\"]=500;e[\"scommaaccent\"]=500;e[\"ecircumflex\"]=556;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=556;e[\"Uacute\"]=722;e[\"uogonek\"]=556;e[\"Edieresis\"]=667;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=737;e[\"Emacron\"]=667;e[\"ccaron\"]=500;e[\"aring\"]=556;e[\"Ncommaaccent\"]=722;e[\"lacute\"]=222;e[\"agrave\"]=556;e[\"Tcommaaccent\"]=611;e[\"Cacute\"]=722;e[\"atilde\"]=556;e[\"Edotaccent\"]=667;e[\"scaron\"]=500;e[\"scedilla\"]=500;e[\"iacute\"]=278;e[\"lozenge\"]=471;e[\"Rcaron\"]=722;e[\"Gcommaaccent\"]=778;e[\"ucircumflex\"]=556;e[\"acircumflex\"]=556;e[\"Amacron\"]=667;e[\"rcaron\"]=333;e[\"ccedilla\"]=500;e[\"Zdotaccent\"]=611;e[\"Thorn\"]=667;e[\"Omacron\"]=778;e[\"Racute\"]=722;e[\"Sacute\"]=667;e[\"dcaron\"]=643;e[\"Umacron\"]=722;e[\"uring\"]=556;e[\"threesuperior\"]=333;e[\"Ograve\"]=778;e[\"Agrave\"]=667;e[\"Abreve\"]=667;e[\"multiply\"]=584;e[\"uacute\"]=556;e[\"Tcaron\"]=611;e[\"partialdiff\"]=476;e[\"ydieresis\"]=500;e[\"Nacute\"]=722;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=667;e[\"adieresis\"]=556;e[\"edieresis\"]=556;e[\"cacute\"]=500;e[\"nacute\"]=556;e[\"umacron\"]=556;e[\"Ncaron\"]=722;e[\"Iacute\"]=278;e[\"plusminus\"]=584;e[\"brokenbar\"]=260;e[\"registered\"]=737;e[\"Gbreve\"]=778;e[\"Idotaccent\"]=278;e[\"summation\"]=600;e[\"Egrave\"]=667;e[\"racute\"]=333;e[\"omacron\"]=556;e[\"Zacute\"]=611;e[\"Zcaron\"]=611;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=722;e[\"lcommaaccent\"]=222;e[\"tcaron\"]=317;e[\"eogonek\"]=556;e[\"Uogonek\"]=722;e[\"Aacute\"]=667;e[\"Adieresis\"]=667;e[\"egrave\"]=556;e[\"zacute\"]=500;e[\"iogonek\"]=222;e[\"Oacute\"]=778;e[\"oacute\"]=556;e[\"amacron\"]=556;e[\"sacute\"]=500;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=778;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=556;e[\"twosuperior\"]=333;e[\"Odieresis\"]=778;e[\"mu\"]=556;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=556;e[\"Eogonek\"]=667;e[\"dcroat\"]=556;e[\"threequarters\"]=834;e[\"Scedilla\"]=667;e[\"lcaron\"]=299;e[\"Kcommaaccent\"]=667;e[\"Lacute\"]=556;e[\"trademark\"]=1e3;e[\"edotaccent\"]=556;e[\"Igrave\"]=278;e[\"Imacron\"]=278;e[\"Lcaron\"]=556;e[\"onehalf\"]=834;e[\"lessequal\"]=549;e[\"ocircumflex\"]=556;e[\"ntilde\"]=556;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=667;e[\"emacron\"]=556;e[\"gbreve\"]=556;e[\"onequarter\"]=834;e[\"Scaron\"]=667;e[\"Scommaaccent\"]=667;e[\"Ohungarumlaut\"]=778;e[\"degree\"]=400;e[\"ograve\"]=556;e[\"Ccaron\"]=722;e[\"ugrave\"]=556;e[\"radical\"]=453;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=333;e[\"Ntilde\"]=722;e[\"otilde\"]=556;e[\"Rcommaaccent\"]=722;e[\"Lcommaaccent\"]=556;e[\"Atilde\"]=667;e[\"Aogonek\"]=667;e[\"Aring\"]=667;e[\"Otilde\"]=778;e[\"zdotaccent\"]=500;e[\"Ecaron\"]=667;e[\"Iogonek\"]=278;e[\"kcommaaccent\"]=500;e[\"minus\"]=584;e[\"Icircumflex\"]=278;e[\"ncaron\"]=556;e[\"tcommaaccent\"]=278;e[\"logicalnot\"]=584;e[\"odieresis\"]=556;e[\"udieresis\"]=556;e[\"notequal\"]=549;e[\"gcommaaccent\"]=556;e[\"eth\"]=556;e[\"zcaron\"]=500;e[\"ncommaaccent\"]=556;e[\"onesuperior\"]=333;e[\"imacron\"]=278;e[\"Euro\"]=556});e[\"Symbol\"]=r(function(e){e[\"space\"]=250;e[\"exclam\"]=333;e[\"universal\"]=713;e[\"numbersign\"]=500;e[\"existential\"]=549;e[\"percent\"]=833;e[\"ampersand\"]=778;e[\"suchthat\"]=439;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asteriskmath\"]=500;e[\"plus\"]=549;e[\"comma\"]=250;e[\"minus\"]=549;e[\"period\"]=250;e[\"slash\"]=278;e[\"zero\"]=500;e[\"one\"]=500;e[\"two\"]=500;e[\"three\"]=500;e[\"four\"]=500;e[\"five\"]=500;e[\"six\"]=500;e[\"seven\"]=500;e[\"eight\"]=500;e[\"nine\"]=500;e[\"colon\"]=278;e[\"semicolon\"]=278;e[\"less\"]=549;e[\"equal\"]=549;e[\"greater\"]=549;e[\"question\"]=444;e[\"congruent\"]=549;e[\"Alpha\"]=722;e[\"Beta\"]=667;e[\"Chi\"]=722;e[\"Delta\"]=612;e[\"Epsilon\"]=611;e[\"Phi\"]=763;e[\"Gamma\"]=603;e[\"Eta\"]=722;e[\"Iota\"]=333;e[\"theta1\"]=631;e[\"Kappa\"]=722;e[\"Lambda\"]=686;e[\"Mu\"]=889;e[\"Nu\"]=722;e[\"Omicron\"]=722;e[\"Pi\"]=768;e[\"Theta\"]=741;e[\"Rho\"]=556;e[\"Sigma\"]=592;e[\"Tau\"]=611;e[\"Upsilon\"]=690;e[\"sigma1\"]=439;e[\"Omega\"]=768;e[\"Xi\"]=645;e[\"Psi\"]=795;e[\"Zeta\"]=611;e[\"bracketleft\"]=333;e[\"therefore\"]=863;e[\"bracketright\"]=333;e[\"perpendicular\"]=658;e[\"underscore\"]=500;e[\"radicalex\"]=500;e[\"alpha\"]=631;e[\"beta\"]=549;e[\"chi\"]=549;e[\"delta\"]=494;e[\"epsilon\"]=439;e[\"phi\"]=521;e[\"gamma\"]=411;e[\"eta\"]=603;e[\"iota\"]=329;e[\"phi1\"]=603;e[\"kappa\"]=549;e[\"lambda\"]=549;e[\"mu\"]=576;e[\"nu\"]=521;e[\"omicron\"]=549;e[\"pi\"]=549;e[\"theta\"]=521;e[\"rho\"]=549;e[\"sigma\"]=603;e[\"tau\"]=439;e[\"upsilon\"]=576;e[\"omega1\"]=713;e[\"omega\"]=686;e[\"xi\"]=493;e[\"psi\"]=686;e[\"zeta\"]=494;e[\"braceleft\"]=480;e[\"bar\"]=200;e[\"braceright\"]=480;e[\"similar\"]=549;e[\"Euro\"]=750;e[\"Upsilon1\"]=620;e[\"minute\"]=247;e[\"lessequal\"]=549;e[\"fraction\"]=167;e[\"infinity\"]=713;e[\"florin\"]=500;e[\"club\"]=753;e[\"diamond\"]=753;e[\"heart\"]=753;e[\"spade\"]=753;e[\"arrowboth\"]=1042;e[\"arrowleft\"]=987;e[\"arrowup\"]=603;e[\"arrowright\"]=987;e[\"arrowdown\"]=603;e[\"degree\"]=400;e[\"plusminus\"]=549;e[\"second\"]=411;e[\"greaterequal\"]=549;e[\"multiply\"]=549;e[\"proportional\"]=713;e[\"partialdiff\"]=494;e[\"bullet\"]=460;e[\"divide\"]=549;e[\"notequal\"]=549;e[\"equivalence\"]=549;e[\"approxequal\"]=549;e[\"ellipsis\"]=1e3;e[\"arrowvertex\"]=603;e[\"arrowhorizex\"]=1e3;e[\"carriagereturn\"]=658;e[\"aleph\"]=823;e[\"Ifraktur\"]=686;e[\"Rfraktur\"]=795;e[\"weierstrass\"]=987;e[\"circlemultiply\"]=768;e[\"circleplus\"]=768;e[\"emptyset\"]=823;e[\"intersection\"]=768;e[\"union\"]=768;e[\"propersuperset\"]=713;e[\"reflexsuperset\"]=713;e[\"notsubset\"]=713;e[\"propersubset\"]=713;e[\"reflexsubset\"]=713;e[\"element\"]=713;e[\"notelement\"]=713;e[\"angle\"]=768;e[\"gradient\"]=713;e[\"registerserif\"]=790;e[\"copyrightserif\"]=790;e[\"trademarkserif\"]=890;e[\"product\"]=823;e[\"radical\"]=549;e[\"dotmath\"]=250;e[\"logicalnot\"]=713;e[\"logicaland\"]=603;e[\"logicalor\"]=603;e[\"arrowdblboth\"]=1042;e[\"arrowdblleft\"]=987;e[\"arrowdblup\"]=603;e[\"arrowdblright\"]=987;e[\"arrowdbldown\"]=603;e[\"lozenge\"]=494;e[\"angleleft\"]=329;e[\"registersans\"]=790;e[\"copyrightsans\"]=790;e[\"trademarksans\"]=786;e[\"summation\"]=713;e[\"parenlefttp\"]=384;e[\"parenleftex\"]=384;e[\"parenleftbt\"]=384;e[\"bracketlefttp\"]=384;e[\"bracketleftex\"]=384;e[\"bracketleftbt\"]=384;e[\"bracelefttp\"]=494;e[\"braceleftmid\"]=494;e[\"braceleftbt\"]=494;e[\"braceex\"]=494;e[\"angleright\"]=329;e[\"integral\"]=274;e[\"integraltp\"]=686;e[\"integralex\"]=686;e[\"integralbt\"]=686;e[\"parenrighttp\"]=384;e[\"parenrightex\"]=384;e[\"parenrightbt\"]=384;e[\"bracketrighttp\"]=384;e[\"bracketrightex\"]=384;e[\"bracketrightbt\"]=384;e[\"bracerighttp\"]=494;e[\"bracerightmid\"]=494;e[\"bracerightbt\"]=494;e[\"apple\"]=790});e[\"Times-Roman\"]=r(function(e){e[\"space\"]=250;e[\"exclam\"]=333;e[\"quotedbl\"]=408;e[\"numbersign\"]=500;e[\"dollar\"]=500;e[\"percent\"]=833;e[\"ampersand\"]=778;e[\"quoteright\"]=333;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=500;e[\"plus\"]=564;e[\"comma\"]=250;e[\"hyphen\"]=333;e[\"period\"]=250;e[\"slash\"]=278;e[\"zero\"]=500;e[\"one\"]=500;e[\"two\"]=500;e[\"three\"]=500;e[\"four\"]=500;e[\"five\"]=500;e[\"six\"]=500;e[\"seven\"]=500;e[\"eight\"]=500;e[\"nine\"]=500;e[\"colon\"]=278;e[\"semicolon\"]=278;e[\"less\"]=564;e[\"equal\"]=564;e[\"greater\"]=564;e[\"question\"]=444;e[\"at\"]=921;e[\"A\"]=722;e[\"B\"]=667;e[\"C\"]=667;e[\"D\"]=722;e[\"E\"]=611;e[\"F\"]=556;e[\"G\"]=722;e[\"H\"]=722;e[\"I\"]=333;e[\"J\"]=389;e[\"K\"]=722;e[\"L\"]=611;e[\"M\"]=889;e[\"N\"]=722;e[\"O\"]=722;e[\"P\"]=556;e[\"Q\"]=722;e[\"R\"]=667;e[\"S\"]=556;e[\"T\"]=611;e[\"U\"]=722;e[\"V\"]=722;e[\"W\"]=944;e[\"X\"]=722;e[\"Y\"]=722;e[\"Z\"]=611;e[\"bracketleft\"]=333;e[\"backslash\"]=278;e[\"bracketright\"]=333;e[\"asciicircum\"]=469;e[\"underscore\"]=500;e[\"quoteleft\"]=333;e[\"a\"]=444;e[\"b\"]=500;e[\"c\"]=444;e[\"d\"]=500;e[\"e\"]=444;e[\"f\"]=333;e[\"g\"]=500;e[\"h\"]=500;e[\"i\"]=278;e[\"j\"]=278;e[\"k\"]=500;e[\"l\"]=278;e[\"m\"]=778;e[\"n\"]=500;e[\"o\"]=500;e[\"p\"]=500;e[\"q\"]=500;e[\"r\"]=333;e[\"s\"]=389;e[\"t\"]=278;e[\"u\"]=500;e[\"v\"]=500;e[\"w\"]=722;e[\"x\"]=500;e[\"y\"]=500;e[\"z\"]=444;e[\"braceleft\"]=480;e[\"bar\"]=200;e[\"braceright\"]=480;e[\"asciitilde\"]=541;e[\"exclamdown\"]=333;e[\"cent\"]=500;e[\"sterling\"]=500;e[\"fraction\"]=167;e[\"yen\"]=500;e[\"florin\"]=500;e[\"section\"]=500;e[\"currency\"]=500;e[\"quotesingle\"]=180;e[\"quotedblleft\"]=444;e[\"guillemotleft\"]=500;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=556;e[\"fl\"]=556;e[\"endash\"]=500;e[\"dagger\"]=500;e[\"daggerdbl\"]=500;e[\"periodcentered\"]=250;e[\"paragraph\"]=453;e[\"bullet\"]=350;e[\"quotesinglbase\"]=333;e[\"quotedblbase\"]=444;e[\"quotedblright\"]=444;e[\"guillemotright\"]=500;e[\"ellipsis\"]=1e3;e[\"perthousand\"]=1e3;e[\"questiondown\"]=444;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=1e3;e[\"AE\"]=889;e[\"ordfeminine\"]=276;e[\"Lslash\"]=611;e[\"Oslash\"]=722;e[\"OE\"]=889;e[\"ordmasculine\"]=310;e[\"ae\"]=667;e[\"dotlessi\"]=278;e[\"lslash\"]=278;e[\"oslash\"]=500;e[\"oe\"]=722;e[\"germandbls\"]=500;e[\"Idieresis\"]=333;e[\"eacute\"]=444;e[\"abreve\"]=444;e[\"uhungarumlaut\"]=500;e[\"ecaron\"]=444;e[\"Ydieresis\"]=722;e[\"divide\"]=564;e[\"Yacute\"]=722;e[\"Acircumflex\"]=722;e[\"aacute\"]=444;e[\"Ucircumflex\"]=722;e[\"yacute\"]=500;e[\"scommaaccent\"]=389;e[\"ecircumflex\"]=444;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=444;e[\"Uacute\"]=722;e[\"uogonek\"]=500;e[\"Edieresis\"]=611;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=760;e[\"Emacron\"]=611;e[\"ccaron\"]=444;e[\"aring\"]=444;e[\"Ncommaaccent\"]=722;e[\"lacute\"]=278;e[\"agrave\"]=444;e[\"Tcommaaccent\"]=611;e[\"Cacute\"]=667;e[\"atilde\"]=444;e[\"Edotaccent\"]=611;e[\"scaron\"]=389;e[\"scedilla\"]=389;e[\"iacute\"]=278;e[\"lozenge\"]=471;e[\"Rcaron\"]=667;e[\"Gcommaaccent\"]=722;e[\"ucircumflex\"]=500;e[\"acircumflex\"]=444;e[\"Amacron\"]=722;e[\"rcaron\"]=333;e[\"ccedilla\"]=444;e[\"Zdotaccent\"]=611;e[\"Thorn\"]=556;e[\"Omacron\"]=722;e[\"Racute\"]=667;e[\"Sacute\"]=556;e[\"dcaron\"]=588;e[\"Umacron\"]=722;e[\"uring\"]=500;e[\"threesuperior\"]=300;e[\"Ograve\"]=722;e[\"Agrave\"]=722;e[\"Abreve\"]=722;e[\"multiply\"]=564;e[\"uacute\"]=500;e[\"Tcaron\"]=611;e[\"partialdiff\"]=476;e[\"ydieresis\"]=500;e[\"Nacute\"]=722;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=611;e[\"adieresis\"]=444;e[\"edieresis\"]=444;e[\"cacute\"]=444;e[\"nacute\"]=500;e[\"umacron\"]=500;e[\"Ncaron\"]=722;e[\"Iacute\"]=333;e[\"plusminus\"]=564;e[\"brokenbar\"]=200;e[\"registered\"]=760;e[\"Gbreve\"]=722;e[\"Idotaccent\"]=333;e[\"summation\"]=600;e[\"Egrave\"]=611;e[\"racute\"]=333;e[\"omacron\"]=500;e[\"Zacute\"]=611;e[\"Zcaron\"]=611;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=667;e[\"lcommaaccent\"]=278;e[\"tcaron\"]=326;e[\"eogonek\"]=444;e[\"Uogonek\"]=722;e[\"Aacute\"]=722;e[\"Adieresis\"]=722;e[\"egrave\"]=444;e[\"zacute\"]=444;e[\"iogonek\"]=278;e[\"Oacute\"]=722;e[\"oacute\"]=500;e[\"amacron\"]=444;e[\"sacute\"]=389;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=722;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=500;e[\"twosuperior\"]=300;e[\"Odieresis\"]=722;e[\"mu\"]=500;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=500;e[\"Eogonek\"]=611;e[\"dcroat\"]=500;e[\"threequarters\"]=750;e[\"Scedilla\"]=556;e[\"lcaron\"]=344;e[\"Kcommaaccent\"]=722;e[\"Lacute\"]=611;e[\"trademark\"]=980;e[\"edotaccent\"]=444;e[\"Igrave\"]=333;e[\"Imacron\"]=333;e[\"Lcaron\"]=611;e[\"onehalf\"]=750;e[\"lessequal\"]=549;e[\"ocircumflex\"]=500;e[\"ntilde\"]=500;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=611;e[\"emacron\"]=444;e[\"gbreve\"]=500;e[\"onequarter\"]=750;e[\"Scaron\"]=556;e[\"Scommaaccent\"]=556;e[\"Ohungarumlaut\"]=722;e[\"degree\"]=400;e[\"ograve\"]=500;e[\"Ccaron\"]=667;e[\"ugrave\"]=500;e[\"radical\"]=453;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=333;e[\"Ntilde\"]=722;e[\"otilde\"]=500;e[\"Rcommaaccent\"]=667;e[\"Lcommaaccent\"]=611;e[\"Atilde\"]=722;e[\"Aogonek\"]=722;e[\"Aring\"]=722;e[\"Otilde\"]=722;e[\"zdotaccent\"]=444;e[\"Ecaron\"]=611;e[\"Iogonek\"]=333;e[\"kcommaaccent\"]=500;e[\"minus\"]=564;e[\"Icircumflex\"]=333;e[\"ncaron\"]=500;e[\"tcommaaccent\"]=278;e[\"logicalnot\"]=564;e[\"odieresis\"]=500;e[\"udieresis\"]=500;e[\"notequal\"]=549;e[\"gcommaaccent\"]=500;e[\"eth\"]=500;e[\"zcaron\"]=444;e[\"ncommaaccent\"]=500;e[\"onesuperior\"]=300;e[\"imacron\"]=278;e[\"Euro\"]=500});e[\"Times-Bold\"]=r(function(e){e[\"space\"]=250;e[\"exclam\"]=333;e[\"quotedbl\"]=555;e[\"numbersign\"]=500;e[\"dollar\"]=500;e[\"percent\"]=1e3;e[\"ampersand\"]=833;e[\"quoteright\"]=333;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=500;e[\"plus\"]=570;e[\"comma\"]=250;e[\"hyphen\"]=333;e[\"period\"]=250;e[\"slash\"]=278;e[\"zero\"]=500;e[\"one\"]=500;e[\"two\"]=500;e[\"three\"]=500;e[\"four\"]=500;e[\"five\"]=500;e[\"six\"]=500;e[\"seven\"]=500;e[\"eight\"]=500;e[\"nine\"]=500;e[\"colon\"]=333;e[\"semicolon\"]=333;e[\"less\"]=570;e[\"equal\"]=570;e[\"greater\"]=570;e[\"question\"]=500;e[\"at\"]=930;e[\"A\"]=722;e[\"B\"]=667;e[\"C\"]=722;e[\"D\"]=722;e[\"E\"]=667;e[\"F\"]=611;e[\"G\"]=778;e[\"H\"]=778;e[\"I\"]=389;e[\"J\"]=500;e[\"K\"]=778;e[\"L\"]=667;e[\"M\"]=944;e[\"N\"]=722;e[\"O\"]=778;e[\"P\"]=611;e[\"Q\"]=778;e[\"R\"]=722;e[\"S\"]=556;e[\"T\"]=667;e[\"U\"]=722;e[\"V\"]=722;e[\"W\"]=1e3;e[\"X\"]=722;e[\"Y\"]=722;e[\"Z\"]=667;e[\"bracketleft\"]=333;e[\"backslash\"]=278;e[\"bracketright\"]=333;e[\"asciicircum\"]=581;e[\"underscore\"]=500;e[\"quoteleft\"]=333;e[\"a\"]=500;e[\"b\"]=556;e[\"c\"]=444;e[\"d\"]=556;e[\"e\"]=444;e[\"f\"]=333;e[\"g\"]=500;e[\"h\"]=556;e[\"i\"]=278;e[\"j\"]=333;e[\"k\"]=556;e[\"l\"]=278;e[\"m\"]=833;e[\"n\"]=556;e[\"o\"]=500;e[\"p\"]=556;e[\"q\"]=556;e[\"r\"]=444;e[\"s\"]=389;e[\"t\"]=333;e[\"u\"]=556;e[\"v\"]=500;e[\"w\"]=722;e[\"x\"]=500;e[\"y\"]=500;e[\"z\"]=444;e[\"braceleft\"]=394;e[\"bar\"]=220;e[\"braceright\"]=394;e[\"asciitilde\"]=520;e[\"exclamdown\"]=333;e[\"cent\"]=500;e[\"sterling\"]=500;e[\"fraction\"]=167;e[\"yen\"]=500;e[\"florin\"]=500;e[\"section\"]=500;e[\"currency\"]=500;e[\"quotesingle\"]=278;e[\"quotedblleft\"]=500;e[\"guillemotleft\"]=500;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=556;e[\"fl\"]=556;e[\"endash\"]=500;e[\"dagger\"]=500;e[\"daggerdbl\"]=500;e[\"periodcentered\"]=250;e[\"paragraph\"]=540;e[\"bullet\"]=350;e[\"quotesinglbase\"]=333;e[\"quotedblbase\"]=500;e[\"quotedblright\"]=500;e[\"guillemotright\"]=500;e[\"ellipsis\"]=1e3;e[\"perthousand\"]=1e3;e[\"questiondown\"]=500;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=1e3;e[\"AE\"]=1e3;e[\"ordfeminine\"]=300;e[\"Lslash\"]=667;e[\"Oslash\"]=778;e[\"OE\"]=1e3;e[\"ordmasculine\"]=330;e[\"ae\"]=722;e[\"dotlessi\"]=278;e[\"lslash\"]=278;e[\"oslash\"]=500;e[\"oe\"]=722;e[\"germandbls\"]=556;e[\"Idieresis\"]=389;e[\"eacute\"]=444;e[\"abreve\"]=500;e[\"uhungarumlaut\"]=556;e[\"ecaron\"]=444;e[\"Ydieresis\"]=722;e[\"divide\"]=570;e[\"Yacute\"]=722;e[\"Acircumflex\"]=722;e[\"aacute\"]=500;e[\"Ucircumflex\"]=722;e[\"yacute\"]=500;e[\"scommaaccent\"]=389;e[\"ecircumflex\"]=444;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=500;e[\"Uacute\"]=722;e[\"uogonek\"]=556;e[\"Edieresis\"]=667;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=747;e[\"Emacron\"]=667;e[\"ccaron\"]=444;e[\"aring\"]=500;e[\"Ncommaaccent\"]=722;e[\"lacute\"]=278;e[\"agrave\"]=500;e[\"Tcommaaccent\"]=667;e[\"Cacute\"]=722;e[\"atilde\"]=500;e[\"Edotaccent\"]=667;e[\"scaron\"]=389;e[\"scedilla\"]=389;e[\"iacute\"]=278;e[\"lozenge\"]=494;e[\"Rcaron\"]=722;e[\"Gcommaaccent\"]=778;e[\"ucircumflex\"]=556;e[\"acircumflex\"]=500;e[\"Amacron\"]=722;e[\"rcaron\"]=444;e[\"ccedilla\"]=444;e[\"Zdotaccent\"]=667;e[\"Thorn\"]=611;e[\"Omacron\"]=778;e[\"Racute\"]=722;e[\"Sacute\"]=556;e[\"dcaron\"]=672;e[\"Umacron\"]=722;e[\"uring\"]=556;e[\"threesuperior\"]=300;e[\"Ograve\"]=778;e[\"Agrave\"]=722;e[\"Abreve\"]=722;e[\"multiply\"]=570;e[\"uacute\"]=556;e[\"Tcaron\"]=667;e[\"partialdiff\"]=494;e[\"ydieresis\"]=500;e[\"Nacute\"]=722;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=667;e[\"adieresis\"]=500;e[\"edieresis\"]=444;e[\"cacute\"]=444;e[\"nacute\"]=556;e[\"umacron\"]=556;e[\"Ncaron\"]=722;e[\"Iacute\"]=389;e[\"plusminus\"]=570;e[\"brokenbar\"]=220;e[\"registered\"]=747;e[\"Gbreve\"]=778;e[\"Idotaccent\"]=389;e[\"summation\"]=600;e[\"Egrave\"]=667;e[\"racute\"]=444;e[\"omacron\"]=500;e[\"Zacute\"]=667;e[\"Zcaron\"]=667;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=722;e[\"lcommaaccent\"]=278;e[\"tcaron\"]=416;e[\"eogonek\"]=444;e[\"Uogonek\"]=722;e[\"Aacute\"]=722;e[\"Adieresis\"]=722;e[\"egrave\"]=444;e[\"zacute\"]=444;e[\"iogonek\"]=278;e[\"Oacute\"]=778;e[\"oacute\"]=500;e[\"amacron\"]=500;e[\"sacute\"]=389;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=778;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=556;e[\"twosuperior\"]=300;e[\"Odieresis\"]=778;e[\"mu\"]=556;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=500;e[\"Eogonek\"]=667;e[\"dcroat\"]=556;e[\"threequarters\"]=750;e[\"Scedilla\"]=556;e[\"lcaron\"]=394;e[\"Kcommaaccent\"]=778;e[\"Lacute\"]=667;e[\"trademark\"]=1e3;e[\"edotaccent\"]=444;e[\"Igrave\"]=389;e[\"Imacron\"]=389;e[\"Lcaron\"]=667;e[\"onehalf\"]=750;e[\"lessequal\"]=549;e[\"ocircumflex\"]=500;e[\"ntilde\"]=556;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=667;e[\"emacron\"]=444;e[\"gbreve\"]=500;e[\"onequarter\"]=750;e[\"Scaron\"]=556;e[\"Scommaaccent\"]=556;e[\"Ohungarumlaut\"]=778;e[\"degree\"]=400;e[\"ograve\"]=500;e[\"Ccaron\"]=722;e[\"ugrave\"]=556;e[\"radical\"]=549;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=444;e[\"Ntilde\"]=722;e[\"otilde\"]=500;e[\"Rcommaaccent\"]=722;e[\"Lcommaaccent\"]=667;e[\"Atilde\"]=722;e[\"Aogonek\"]=722;e[\"Aring\"]=722;e[\"Otilde\"]=778;e[\"zdotaccent\"]=444;e[\"Ecaron\"]=667;e[\"Iogonek\"]=389;e[\"kcommaaccent\"]=556;e[\"minus\"]=570;e[\"Icircumflex\"]=389;e[\"ncaron\"]=556;e[\"tcommaaccent\"]=333;e[\"logicalnot\"]=570;e[\"odieresis\"]=500;e[\"udieresis\"]=556;e[\"notequal\"]=549;e[\"gcommaaccent\"]=500;e[\"eth\"]=500;e[\"zcaron\"]=444;e[\"ncommaaccent\"]=556;e[\"onesuperior\"]=300;e[\"imacron\"]=278;e[\"Euro\"]=500});e[\"Times-BoldItalic\"]=r(function(e){e[\"space\"]=250;e[\"exclam\"]=389;e[\"quotedbl\"]=555;e[\"numbersign\"]=500;e[\"dollar\"]=500;e[\"percent\"]=833;e[\"ampersand\"]=778;e[\"quoteright\"]=333;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=500;e[\"plus\"]=570;e[\"comma\"]=250;e[\"hyphen\"]=333;e[\"period\"]=250;e[\"slash\"]=278;e[\"zero\"]=500;e[\"one\"]=500;e[\"two\"]=500;e[\"three\"]=500;e[\"four\"]=500;e[\"five\"]=500;e[\"six\"]=500;e[\"seven\"]=500;e[\"eight\"]=500;e[\"nine\"]=500;e[\"colon\"]=333;e[\"semicolon\"]=333;e[\"less\"]=570;e[\"equal\"]=570;e[\"greater\"]=570;e[\"question\"]=500;e[\"at\"]=832;e[\"A\"]=667;e[\"B\"]=667;e[\"C\"]=667;e[\"D\"]=722;e[\"E\"]=667;e[\"F\"]=667;e[\"G\"]=722;e[\"H\"]=778;e[\"I\"]=389;e[\"J\"]=500;e[\"K\"]=667;e[\"L\"]=611;e[\"M\"]=889;e[\"N\"]=722;e[\"O\"]=722;e[\"P\"]=611;e[\"Q\"]=722;e[\"R\"]=667;e[\"S\"]=556;e[\"T\"]=611;e[\"U\"]=722;e[\"V\"]=667;e[\"W\"]=889;e[\"X\"]=667;e[\"Y\"]=611;e[\"Z\"]=611;e[\"bracketleft\"]=333;e[\"backslash\"]=278;e[\"bracketright\"]=333;e[\"asciicircum\"]=570;e[\"underscore\"]=500;e[\"quoteleft\"]=333;e[\"a\"]=500;e[\"b\"]=500;e[\"c\"]=444;e[\"d\"]=500;e[\"e\"]=444;e[\"f\"]=333;e[\"g\"]=500;e[\"h\"]=556;e[\"i\"]=278;e[\"j\"]=278;e[\"k\"]=500;e[\"l\"]=278;e[\"m\"]=778;e[\"n\"]=556;e[\"o\"]=500;e[\"p\"]=500;e[\"q\"]=500;e[\"r\"]=389;e[\"s\"]=389;e[\"t\"]=278;e[\"u\"]=556;e[\"v\"]=444;e[\"w\"]=667;e[\"x\"]=500;e[\"y\"]=444;e[\"z\"]=389;e[\"braceleft\"]=348;e[\"bar\"]=220;e[\"braceright\"]=348;e[\"asciitilde\"]=570;e[\"exclamdown\"]=389;e[\"cent\"]=500;e[\"sterling\"]=500;e[\"fraction\"]=167;e[\"yen\"]=500;e[\"florin\"]=500;e[\"section\"]=500;e[\"currency\"]=500;e[\"quotesingle\"]=278;e[\"quotedblleft\"]=500;e[\"guillemotleft\"]=500;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=556;e[\"fl\"]=556;e[\"endash\"]=500;e[\"dagger\"]=500;e[\"daggerdbl\"]=500;e[\"periodcentered\"]=250;e[\"paragraph\"]=500;e[\"bullet\"]=350;e[\"quotesinglbase\"]=333;e[\"quotedblbase\"]=500;e[\"quotedblright\"]=500;e[\"guillemotright\"]=500;e[\"ellipsis\"]=1e3;e[\"perthousand\"]=1e3;e[\"questiondown\"]=500;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=1e3;e[\"AE\"]=944;e[\"ordfeminine\"]=266;e[\"Lslash\"]=611;e[\"Oslash\"]=722;e[\"OE\"]=944;e[\"ordmasculine\"]=300;e[\"ae\"]=722;e[\"dotlessi\"]=278;e[\"lslash\"]=278;e[\"oslash\"]=500;e[\"oe\"]=722;e[\"germandbls\"]=500;e[\"Idieresis\"]=389;e[\"eacute\"]=444;e[\"abreve\"]=500;e[\"uhungarumlaut\"]=556;e[\"ecaron\"]=444;e[\"Ydieresis\"]=611;e[\"divide\"]=570;e[\"Yacute\"]=611;e[\"Acircumflex\"]=667;e[\"aacute\"]=500;e[\"Ucircumflex\"]=722;e[\"yacute\"]=444;e[\"scommaaccent\"]=389;e[\"ecircumflex\"]=444;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=500;e[\"Uacute\"]=722;e[\"uogonek\"]=556;e[\"Edieresis\"]=667;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=747;e[\"Emacron\"]=667;e[\"ccaron\"]=444;e[\"aring\"]=500;e[\"Ncommaaccent\"]=722;e[\"lacute\"]=278;e[\"agrave\"]=500;e[\"Tcommaaccent\"]=611;e[\"Cacute\"]=667;e[\"atilde\"]=500;e[\"Edotaccent\"]=667;e[\"scaron\"]=389;e[\"scedilla\"]=389;e[\"iacute\"]=278;e[\"lozenge\"]=494;e[\"Rcaron\"]=667;e[\"Gcommaaccent\"]=722;e[\"ucircumflex\"]=556;e[\"acircumflex\"]=500;e[\"Amacron\"]=667;e[\"rcaron\"]=389;e[\"ccedilla\"]=444;e[\"Zdotaccent\"]=611;e[\"Thorn\"]=611;e[\"Omacron\"]=722;e[\"Racute\"]=667;e[\"Sacute\"]=556;e[\"dcaron\"]=608;e[\"Umacron\"]=722;e[\"uring\"]=556;e[\"threesuperior\"]=300;e[\"Ograve\"]=722;e[\"Agrave\"]=667;e[\"Abreve\"]=667;e[\"multiply\"]=570;e[\"uacute\"]=556;e[\"Tcaron\"]=611;e[\"partialdiff\"]=494;e[\"ydieresis\"]=444;e[\"Nacute\"]=722;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=667;e[\"adieresis\"]=500;e[\"edieresis\"]=444;e[\"cacute\"]=444;e[\"nacute\"]=556;e[\"umacron\"]=556;e[\"Ncaron\"]=722;e[\"Iacute\"]=389;e[\"plusminus\"]=570;e[\"brokenbar\"]=220;e[\"registered\"]=747;e[\"Gbreve\"]=722;e[\"Idotaccent\"]=389;e[\"summation\"]=600;e[\"Egrave\"]=667;e[\"racute\"]=389;e[\"omacron\"]=500;e[\"Zacute\"]=611;e[\"Zcaron\"]=611;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=667;e[\"lcommaaccent\"]=278;e[\"tcaron\"]=366;e[\"eogonek\"]=444;e[\"Uogonek\"]=722;e[\"Aacute\"]=667;e[\"Adieresis\"]=667;e[\"egrave\"]=444;e[\"zacute\"]=389;e[\"iogonek\"]=278;e[\"Oacute\"]=722;e[\"oacute\"]=500;e[\"amacron\"]=500;e[\"sacute\"]=389;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=722;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=500;e[\"twosuperior\"]=300;e[\"Odieresis\"]=722;e[\"mu\"]=576;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=500;e[\"Eogonek\"]=667;e[\"dcroat\"]=500;e[\"threequarters\"]=750;e[\"Scedilla\"]=556;e[\"lcaron\"]=382;e[\"Kcommaaccent\"]=667;e[\"Lacute\"]=611;e[\"trademark\"]=1e3;e[\"edotaccent\"]=444;e[\"Igrave\"]=389;e[\"Imacron\"]=389;e[\"Lcaron\"]=611;e[\"onehalf\"]=750;e[\"lessequal\"]=549;e[\"ocircumflex\"]=500;e[\"ntilde\"]=556;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=667;e[\"emacron\"]=444;e[\"gbreve\"]=500;e[\"onequarter\"]=750;e[\"Scaron\"]=556;e[\"Scommaaccent\"]=556;e[\"Ohungarumlaut\"]=722;e[\"degree\"]=400;e[\"ograve\"]=500;e[\"Ccaron\"]=667;e[\"ugrave\"]=556;e[\"radical\"]=549;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=389;e[\"Ntilde\"]=722;e[\"otilde\"]=500;e[\"Rcommaaccent\"]=667;e[\"Lcommaaccent\"]=611;e[\"Atilde\"]=667;e[\"Aogonek\"]=667;e[\"Aring\"]=667;e[\"Otilde\"]=722;e[\"zdotaccent\"]=389;e[\"Ecaron\"]=667;e[\"Iogonek\"]=389;e[\"kcommaaccent\"]=500;e[\"minus\"]=606;e[\"Icircumflex\"]=389;e[\"ncaron\"]=556;e[\"tcommaaccent\"]=278;e[\"logicalnot\"]=606;e[\"odieresis\"]=500;e[\"udieresis\"]=556;e[\"notequal\"]=549;e[\"gcommaaccent\"]=500;e[\"eth\"]=500;e[\"zcaron\"]=389;e[\"ncommaaccent\"]=556;e[\"onesuperior\"]=300;e[\"imacron\"]=278;e[\"Euro\"]=500});e[\"Times-Italic\"]=r(function(e){e[\"space\"]=250;e[\"exclam\"]=333;e[\"quotedbl\"]=420;e[\"numbersign\"]=500;e[\"dollar\"]=500;e[\"percent\"]=833;e[\"ampersand\"]=778;e[\"quoteright\"]=333;e[\"parenleft\"]=333;e[\"parenright\"]=333;e[\"asterisk\"]=500;e[\"plus\"]=675;e[\"comma\"]=250;e[\"hyphen\"]=333;e[\"period\"]=250;e[\"slash\"]=278;e[\"zero\"]=500;e[\"one\"]=500;e[\"two\"]=500;e[\"three\"]=500;e[\"four\"]=500;e[\"five\"]=500;e[\"six\"]=500;e[\"seven\"]=500;e[\"eight\"]=500;e[\"nine\"]=500;e[\"colon\"]=333;e[\"semicolon\"]=333;e[\"less\"]=675;e[\"equal\"]=675;e[\"greater\"]=675;e[\"question\"]=500;e[\"at\"]=920;e[\"A\"]=611;e[\"B\"]=611;e[\"C\"]=667;e[\"D\"]=722;e[\"E\"]=611;e[\"F\"]=611;e[\"G\"]=722;e[\"H\"]=722;e[\"I\"]=333;e[\"J\"]=444;e[\"K\"]=667;e[\"L\"]=556;e[\"M\"]=833;e[\"N\"]=667;e[\"O\"]=722;e[\"P\"]=611;e[\"Q\"]=722;e[\"R\"]=611;e[\"S\"]=500;e[\"T\"]=556;e[\"U\"]=722;e[\"V\"]=611;e[\"W\"]=833;e[\"X\"]=611;e[\"Y\"]=556;e[\"Z\"]=556;e[\"bracketleft\"]=389;e[\"backslash\"]=278;e[\"bracketright\"]=389;e[\"asciicircum\"]=422;e[\"underscore\"]=500;e[\"quoteleft\"]=333;e[\"a\"]=500;e[\"b\"]=500;e[\"c\"]=444;e[\"d\"]=500;e[\"e\"]=444;e[\"f\"]=278;e[\"g\"]=500;e[\"h\"]=500;e[\"i\"]=278;e[\"j\"]=278;e[\"k\"]=444;e[\"l\"]=278;e[\"m\"]=722;e[\"n\"]=500;e[\"o\"]=500;e[\"p\"]=500;e[\"q\"]=500;e[\"r\"]=389;e[\"s\"]=389;e[\"t\"]=278;e[\"u\"]=500;e[\"v\"]=444;e[\"w\"]=667;e[\"x\"]=444;e[\"y\"]=444;e[\"z\"]=389;e[\"braceleft\"]=400;e[\"bar\"]=275;e[\"braceright\"]=400;e[\"asciitilde\"]=541;e[\"exclamdown\"]=389;e[\"cent\"]=500;e[\"sterling\"]=500;e[\"fraction\"]=167;e[\"yen\"]=500;e[\"florin\"]=500;e[\"section\"]=500;e[\"currency\"]=500;e[\"quotesingle\"]=214;e[\"quotedblleft\"]=556;e[\"guillemotleft\"]=500;e[\"guilsinglleft\"]=333;e[\"guilsinglright\"]=333;e[\"fi\"]=500;e[\"fl\"]=500;e[\"endash\"]=500;e[\"dagger\"]=500;e[\"daggerdbl\"]=500;e[\"periodcentered\"]=250;e[\"paragraph\"]=523;e[\"bullet\"]=350;e[\"quotesinglbase\"]=333;e[\"quotedblbase\"]=556;e[\"quotedblright\"]=556;e[\"guillemotright\"]=500;e[\"ellipsis\"]=889;e[\"perthousand\"]=1e3;e[\"questiondown\"]=500;e[\"grave\"]=333;e[\"acute\"]=333;e[\"circumflex\"]=333;e[\"tilde\"]=333;e[\"macron\"]=333;e[\"breve\"]=333;e[\"dotaccent\"]=333;e[\"dieresis\"]=333;e[\"ring\"]=333;e[\"cedilla\"]=333;e[\"hungarumlaut\"]=333;e[\"ogonek\"]=333;e[\"caron\"]=333;e[\"emdash\"]=889;e[\"AE\"]=889;e[\"ordfeminine\"]=276;e[\"Lslash\"]=556;e[\"Oslash\"]=722;e[\"OE\"]=944;e[\"ordmasculine\"]=310;e[\"ae\"]=667;e[\"dotlessi\"]=278;e[\"lslash\"]=278;e[\"oslash\"]=500;e[\"oe\"]=667;e[\"germandbls\"]=500;e[\"Idieresis\"]=333;e[\"eacute\"]=444;e[\"abreve\"]=500;e[\"uhungarumlaut\"]=500;e[\"ecaron\"]=444;e[\"Ydieresis\"]=556;e[\"divide\"]=675;e[\"Yacute\"]=556;e[\"Acircumflex\"]=611;e[\"aacute\"]=500;e[\"Ucircumflex\"]=722;e[\"yacute\"]=444;e[\"scommaaccent\"]=389;e[\"ecircumflex\"]=444;e[\"Uring\"]=722;e[\"Udieresis\"]=722;e[\"aogonek\"]=500;e[\"Uacute\"]=722;e[\"uogonek\"]=500;e[\"Edieresis\"]=611;e[\"Dcroat\"]=722;e[\"commaaccent\"]=250;e[\"copyright\"]=760;e[\"Emacron\"]=611;e[\"ccaron\"]=444;e[\"aring\"]=500;e[\"Ncommaaccent\"]=667;e[\"lacute\"]=278;e[\"agrave\"]=500;e[\"Tcommaaccent\"]=556;e[\"Cacute\"]=667;e[\"atilde\"]=500;e[\"Edotaccent\"]=611;e[\"scaron\"]=389;e[\"scedilla\"]=389;e[\"iacute\"]=278;e[\"lozenge\"]=471;e[\"Rcaron\"]=611;e[\"Gcommaaccent\"]=722;e[\"ucircumflex\"]=500;e[\"acircumflex\"]=500;e[\"Amacron\"]=611;e[\"rcaron\"]=389;e[\"ccedilla\"]=444;e[\"Zdotaccent\"]=556;e[\"Thorn\"]=611;e[\"Omacron\"]=722;e[\"Racute\"]=611;e[\"Sacute\"]=500;e[\"dcaron\"]=544;e[\"Umacron\"]=722;e[\"uring\"]=500;e[\"threesuperior\"]=300;e[\"Ograve\"]=722;e[\"Agrave\"]=611;e[\"Abreve\"]=611;e[\"multiply\"]=675;e[\"uacute\"]=500;e[\"Tcaron\"]=556;e[\"partialdiff\"]=476;e[\"ydieresis\"]=444;e[\"Nacute\"]=667;e[\"icircumflex\"]=278;e[\"Ecircumflex\"]=611;e[\"adieresis\"]=500;e[\"edieresis\"]=444;e[\"cacute\"]=444;e[\"nacute\"]=500;e[\"umacron\"]=500;e[\"Ncaron\"]=667;e[\"Iacute\"]=333;e[\"plusminus\"]=675;e[\"brokenbar\"]=275;e[\"registered\"]=760;e[\"Gbreve\"]=722;e[\"Idotaccent\"]=333;e[\"summation\"]=600;e[\"Egrave\"]=611;e[\"racute\"]=389;e[\"omacron\"]=500;e[\"Zacute\"]=556;e[\"Zcaron\"]=556;e[\"greaterequal\"]=549;e[\"Eth\"]=722;e[\"Ccedilla\"]=667;e[\"lcommaaccent\"]=278;e[\"tcaron\"]=300;e[\"eogonek\"]=444;e[\"Uogonek\"]=722;e[\"Aacute\"]=611;e[\"Adieresis\"]=611;e[\"egrave\"]=444;e[\"zacute\"]=389;e[\"iogonek\"]=278;e[\"Oacute\"]=722;e[\"oacute\"]=500;e[\"amacron\"]=500;e[\"sacute\"]=389;e[\"idieresis\"]=278;e[\"Ocircumflex\"]=722;e[\"Ugrave\"]=722;e[\"Delta\"]=612;e[\"thorn\"]=500;e[\"twosuperior\"]=300;e[\"Odieresis\"]=722;e[\"mu\"]=500;e[\"igrave\"]=278;e[\"ohungarumlaut\"]=500;e[\"Eogonek\"]=611;e[\"dcroat\"]=500;e[\"threequarters\"]=750;e[\"Scedilla\"]=500;e[\"lcaron\"]=300;e[\"Kcommaaccent\"]=667;e[\"Lacute\"]=556;e[\"trademark\"]=980;e[\"edotaccent\"]=444;e[\"Igrave\"]=333;e[\"Imacron\"]=333;e[\"Lcaron\"]=611;e[\"onehalf\"]=750;e[\"lessequal\"]=549;e[\"ocircumflex\"]=500;e[\"ntilde\"]=500;e[\"Uhungarumlaut\"]=722;e[\"Eacute\"]=611;e[\"emacron\"]=444;e[\"gbreve\"]=500;e[\"onequarter\"]=750;e[\"Scaron\"]=500;e[\"Scommaaccent\"]=500;e[\"Ohungarumlaut\"]=722;e[\"degree\"]=400;e[\"ograve\"]=500;e[\"Ccaron\"]=667;e[\"ugrave\"]=500;e[\"radical\"]=453;e[\"Dcaron\"]=722;e[\"rcommaaccent\"]=389;e[\"Ntilde\"]=667;e[\"otilde\"]=500;e[\"Rcommaaccent\"]=611;e[\"Lcommaaccent\"]=556;e[\"Atilde\"]=611;e[\"Aogonek\"]=611;e[\"Aring\"]=611;e[\"Otilde\"]=722;e[\"zdotaccent\"]=389;e[\"Ecaron\"]=611;e[\"Iogonek\"]=333;e[\"kcommaaccent\"]=444;e[\"minus\"]=675;e[\"Icircumflex\"]=333;e[\"ncaron\"]=500;e[\"tcommaaccent\"]=278;e[\"logicalnot\"]=675;e[\"odieresis\"]=500;e[\"udieresis\"]=500;e[\"notequal\"]=549;e[\"gcommaaccent\"]=500;e[\"eth\"]=500;e[\"zcaron\"]=389;e[\"ncommaaccent\"]=500;e[\"onesuperior\"]=300;e[\"imacron\"]=278;e[\"Euro\"]=500});e[\"ZapfDingbats\"]=r(function(e){e[\"space\"]=278;e[\"a1\"]=974;e[\"a2\"]=961;e[\"a202\"]=974;e[\"a3\"]=980;e[\"a4\"]=719;e[\"a5\"]=789;e[\"a119\"]=790;e[\"a118\"]=791;e[\"a117\"]=690;e[\"a11\"]=960;e[\"a12\"]=939;e[\"a13\"]=549;e[\"a14\"]=855;e[\"a15\"]=911;e[\"a16\"]=933;e[\"a105\"]=911;e[\"a17\"]=945;e[\"a18\"]=974;e[\"a19\"]=755;e[\"a20\"]=846;e[\"a21\"]=762;e[\"a22\"]=761;e[\"a23\"]=571;e[\"a24\"]=677;e[\"a25\"]=763;e[\"a26\"]=760;e[\"a27\"]=759;e[\"a28\"]=754;e[\"a6\"]=494;e[\"a7\"]=552;e[\"a8\"]=537;e[\"a9\"]=577;e[\"a10\"]=692;e[\"a29\"]=786;e[\"a30\"]=788;e[\"a31\"]=788;e[\"a32\"]=790;e[\"a33\"]=793;e[\"a34\"]=794;e[\"a35\"]=816;e[\"a36\"]=823;e[\"a37\"]=789;e[\"a38\"]=841;e[\"a39\"]=823;e[\"a40\"]=833;e[\"a41\"]=816;e[\"a42\"]=831;e[\"a43\"]=923;e[\"a44\"]=744;e[\"a45\"]=723;e[\"a46\"]=749;e[\"a47\"]=790;e[\"a48\"]=792;e[\"a49\"]=695;e[\"a50\"]=776;e[\"a51\"]=768;e[\"a52\"]=792;e[\"a53\"]=759;e[\"a54\"]=707;e[\"a55\"]=708;e[\"a56\"]=682;e[\"a57\"]=701;e[\"a58\"]=826;e[\"a59\"]=815;e[\"a60\"]=789;e[\"a61\"]=789;e[\"a62\"]=707;e[\"a63\"]=687;e[\"a64\"]=696;e[\"a65\"]=689;e[\"a66\"]=786;e[\"a67\"]=787;e[\"a68\"]=713;e[\"a69\"]=791;e[\"a70\"]=785;e[\"a71\"]=791;e[\"a72\"]=873;e[\"a73\"]=761;e[\"a74\"]=762;e[\"a203\"]=762;e[\"a75\"]=759;e[\"a204\"]=759;e[\"a76\"]=892;e[\"a77\"]=892;e[\"a78\"]=788;e[\"a79\"]=784;e[\"a81\"]=438;e[\"a82\"]=138;e[\"a83\"]=277;e[\"a84\"]=415;e[\"a97\"]=392;e[\"a98\"]=392;e[\"a99\"]=668;e[\"a100\"]=668;e[\"a89\"]=390;e[\"a90\"]=390;e[\"a93\"]=317;e[\"a94\"]=317;e[\"a91\"]=276;e[\"a92\"]=276;e[\"a205\"]=509;e[\"a85\"]=509;e[\"a206\"]=410;e[\"a86\"]=410;e[\"a87\"]=234;e[\"a88\"]=234;e[\"a95\"]=334;e[\"a96\"]=334;e[\"a101\"]=732;e[\"a102\"]=544;e[\"a103\"]=544;e[\"a104\"]=910;e[\"a106\"]=667;e[\"a107\"]=760;e[\"a108\"]=760;e[\"a112\"]=776;e[\"a111\"]=595;e[\"a110\"]=694;e[\"a109\"]=626;e[\"a120\"]=788;e[\"a121\"]=788;e[\"a122\"]=788;e[\"a123\"]=788;e[\"a124\"]=788;e[\"a125\"]=788;e[\"a126\"]=788;e[\"a127\"]=788;e[\"a128\"]=788;e[\"a129\"]=788;e[\"a130\"]=788;e[\"a131\"]=788;e[\"a132\"]=788;e[\"a133\"]=788;e[\"a134\"]=788;e[\"a135\"]=788;e[\"a136\"]=788;e[\"a137\"]=788;e[\"a138\"]=788;e[\"a139\"]=788;e[\"a140\"]=788;e[\"a141\"]=788;e[\"a142\"]=788;e[\"a143\"]=788;e[\"a144\"]=788;e[\"a145\"]=788;e[\"a146\"]=788;e[\"a147\"]=788;e[\"a148\"]=788;e[\"a149\"]=788;e[\"a150\"]=788;e[\"a151\"]=788;e[\"a152\"]=788;e[\"a153\"]=788;e[\"a154\"]=788;e[\"a155\"]=788;e[\"a156\"]=788;e[\"a157\"]=788;e[\"a158\"]=788;e[\"a159\"]=788;e[\"a160\"]=894;e[\"a161\"]=838;e[\"a163\"]=1016;e[\"a164\"]=458;e[\"a196\"]=748;e[\"a165\"]=924;e[\"a192\"]=748;e[\"a166\"]=918;e[\"a167\"]=927;e[\"a168\"]=928;e[\"a169\"]=928;e[\"a170\"]=834;e[\"a171\"]=873;e[\"a172\"]=828;e[\"a173\"]=924;e[\"a162\"]=924;e[\"a174\"]=917;e[\"a175\"]=930;e[\"a176\"]=931;e[\"a177\"]=463;e[\"a178\"]=883;e[\"a179\"]=836;e[\"a193\"]=836;e[\"a180\"]=867;e[\"a199\"]=867;e[\"a181\"]=696;e[\"a200\"]=696;e[\"a182\"]=874;e[\"a201\"]=874;e[\"a183\"]=760;e[\"a184\"]=946;e[\"a197\"]=771;e[\"a185\"]=865;e[\"a194\"]=771;e[\"a198\"]=888;e[\"a186\"]=967;e[\"a195\"]=888;e[\"a187\"]=831;e[\"a188\"]=873;e[\"a189\"]=927;e[\"a190\"]=970;e[\"a191\"]=918})});e.getMetrics=a});(function(e,t){t(e.pdfjsCoreMurmurHash3={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.Uint32ArrayView;var a=function e(t){var a=4294901760;var i=65535;function n(e){var t=3285377520;this.h1=e?e&4294967295:t;this.h2=e?e&4294967295:t}var s=false;try{new Uint32Array(new Uint8Array(5).buffer,0,1)}catch(e){s=true}n.prototype={update:function e(t){var n=s;var o;if(typeof t===\"string\"){var l=new Uint8Array(t.length*2);var c=0;for(o=0;o<t.length;o++){var h=t.charCodeAt(o);if(h<=255){l[c++]=h}else{l[c++]=h>>>8;l[c++]=h&255}}}else if(t instanceof Uint8Array){l=t;c=l.length}else if(typeof t===\"object\"&&\"length\"in t){l=t;c=l.length;n=true}else{throw new Error(\"Wrong data format in MurmurHash3_64_update. \"+\"Input must be a string or array.\")}var u=c>>2;var f=c-u*4;var d=n?new r(l,u):new Uint32Array(l.buffer,0,u);var g=0;var v=0;var p=this.h1;var m=this.h2;var b=3432918353;var y=461845907;var k=b&i;var w=y&i;for(o=0;o<u;o++){if(o&1){g=d[o];g=g*b&a|g*k&i;g=g<<15|g>>>17;g=g*y&a|g*w&i;p^=g;p=p<<13|p>>>19;p=p*5+3864292196}else{v=d[o];v=v*b&a|v*k&i;v=v<<15|v>>>17;v=v*y&a|v*w&i;m^=v;m=m<<13|m>>>19;m=m*5+3864292196}}g=0;switch(f){case 3:g^=l[u*4+2]<<16;case 2:g^=l[u*4+1]<<8;case 1:g^=l[u*4];g=g*b&a|g*k&i;g=g<<15|g>>>17;g=g*y&a|g*w&i;if(u&1){p^=g}else{m^=g}}this.h1=p;this.h2=m;return this},hexdigest:function e(){var t=this.h1;var r=this.h2;t^=r>>>1;t=t*3981806797&a|t*36045&i;r=r*4283543511&a|((r<<16|t>>>16)*2950163797&a)>>>16;t^=r>>>1;t=t*444984403&a|t*60499&i;r=r*3301882366&a|((r<<16|t>>>16)*3120437893&a)>>>16;t^=r>>>1;for(var n=0,s=[t,r],o=\"\";n<s.length;n++){var l=(s[n]>>>0).toString(16);while(l.length<8){l=\"0\"+l}o+=l}return o}};return n}();e.MurmurHash3_64=a});(function(e,t){t(e.pdfjsCorePrimitives={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.isArray;var a=function e(){function t(e){this.name=e}t.prototype={};var r=Object.create(null);t.get=function e(a){var i=r[a];return i?i:r[a]=new t(a)};return t}();var i=function e(){function t(e){this.cmd=e}t.prototype={};var r=Object.create(null);t.get=function e(a){var i=r[a];return i?i:r[a]=new t(a)};return t}();var n=function e(){var t=function e(){return t};function a(e){this.map=Object.create(null);this.xref=e;this.objId=null;this.suppressEncryption=false;this.__nonSerializable__=t}a.prototype={assignXref:function e(t){this.xref=t},get:function e(t,r,a){var i;var n=this.xref,s=this.suppressEncryption;if(typeof(i=this.map[t])!==\"undefined\"||t in this.map||typeof r===\"undefined\"){return n?n.fetchIfRef(i,s):i}if(typeof(i=this.map[r])!==\"undefined\"||r in this.map||typeof a===\"undefined\"){return n?n.fetchIfRef(i,s):i}i=this.map[a]||null;return n?n.fetchIfRef(i,s):i},getAsync:function e(t,r,a){var i;var n=this.xref,s=this.suppressEncryption;if(typeof(i=this.map[t])!==\"undefined\"||t in this.map||typeof r===\"undefined\"){if(n){return n.fetchIfRefAsync(i,s)}return Promise.resolve(i)}if(typeof(i=this.map[r])!==\"undefined\"||r in this.map||typeof a===\"undefined\"){if(n){return n.fetchIfRefAsync(i,s)}return Promise.resolve(i)}i=this.map[a]||null;if(n){return n.fetchIfRefAsync(i,s)}return Promise.resolve(i)},getArray:function e(t,a,i){var n=this.get(t,a,i);var s=this.xref,o=this.suppressEncryption;if(!r(n)||!s){return n}n=n.slice();for(var l=0,c=n.length;l<c;l++){if(!f(n[l])){continue}n[l]=s.fetch(n[l],o)}return n},getRaw:function e(t){return this.map[t]},getKeys:function e(){return Object.keys(this.map)},set:function e(t,r){this.map[t]=r},has:function e(t){return t in this.map},forEach:function e(t){for(var r in this.map){t(r,this.get(r))}}};a.empty=new a(null);a.merge=function e(t,r){var i=new a(t);for(var n=0,s=r.length;n<s;n++){var o=r[n];if(!u(o)){continue}for(var l in o.map){if(i.map[l]){continue}i.map[l]=o.map[l]}}return i};return a}();var s=function e(){function t(e,t){this.num=e;this.gen=t}t.prototype={toString:function e(){var t=this.num+\"R\";if(this.gen!==0){t+=this.gen}return t}};return t}();var o=function e(){function t(){this.dict=Object.create(null)}t.prototype={has:function e(t){return t.toString()in this.dict},put:function e(t){this.dict[t.toString()]=true},remove:function e(t){delete this.dict[t.toString()]}};return t}();var l=function e(){function t(){this.dict=Object.create(null)}t.prototype={get:function e(t){return this.dict[t.toString()]},has:function e(t){return t.toString()in this.dict},put:function e(t,r){this.dict[t.toString()]=r},putAlias:function e(t,r){this.dict[t.toString()]=this.get(r)},forEach:function e(t,r){for(var a in this.dict){t.call(r,this.dict[a])}},clear:function e(){this.dict=Object.create(null)}};return t}();function c(e,t){return e instanceof a&&(t===undefined||e.name===t)}function h(e,t){return e instanceof i&&(t===undefined||e.cmd===t)}function u(e,t){return e instanceof n&&(t===undefined||c(e.get(\"Type\"),t))}function f(e){return e instanceof s}function d(e,t){return e.num===t.num&&e.gen===t.gen}function g(e){return typeof e===\"object\"&&e!==null&&e.getBytes!==undefined}e.Cmd=i;e.Dict=n;e.Name=a;e.Ref=s;e.RefSet=o;e.RefSetCache=l;e.isCmd=h;e.isDict=u;e.isName=c;e.isRef=f;e.isRefsEqual=d;e.isStream=g});(function(e,t){t(e.pdfjsCoreStandardFonts={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.getLookupTableFactory;var a=r(function(e){e[\"ArialNarrow\"]=\"Helvetica\";e[\"ArialNarrow-Bold\"]=\"Helvetica-Bold\";e[\"ArialNarrow-BoldItalic\"]=\"Helvetica-BoldOblique\";e[\"ArialNarrow-Italic\"]=\"Helvetica-Oblique\";e[\"ArialBlack\"]=\"Helvetica\";e[\"ArialBlack-Bold\"]=\"Helvetica-Bold\";e[\"ArialBlack-BoldItalic\"]=\"Helvetica-BoldOblique\";e[\"ArialBlack-Italic\"]=\"Helvetica-Oblique\";e[\"Arial-Black\"]=\"Helvetica\";e[\"Arial-Black-Bold\"]=\"Helvetica-Bold\";e[\"Arial-Black-BoldItalic\"]=\"Helvetica-BoldOblique\";e[\"Arial-Black-Italic\"]=\"Helvetica-Oblique\";e[\"Arial\"]=\"Helvetica\";e[\"Arial-Bold\"]=\"Helvetica-Bold\";e[\"Arial-BoldItalic\"]=\"Helvetica-BoldOblique\";e[\"Arial-Italic\"]=\"Helvetica-Oblique\";e[\"Arial-BoldItalicMT\"]=\"Helvetica-BoldOblique\";e[\"Arial-BoldMT\"]=\"Helvetica-Bold\";e[\"Arial-ItalicMT\"]=\"Helvetica-Oblique\";e[\"ArialMT\"]=\"Helvetica\";e[\"Courier-Bold\"]=\"Courier-Bold\";e[\"Courier-BoldItalic\"]=\"Courier-BoldOblique\";e[\"Courier-Italic\"]=\"Courier-Oblique\";e[\"CourierNew\"]=\"Courier\";e[\"CourierNew-Bold\"]=\"Courier-Bold\";e[\"CourierNew-BoldItalic\"]=\"Courier-BoldOblique\";e[\"CourierNew-Italic\"]=\"Courier-Oblique\";e[\"CourierNewPS-BoldItalicMT\"]=\"Courier-BoldOblique\";e[\"CourierNewPS-BoldMT\"]=\"Courier-Bold\";e[\"CourierNewPS-ItalicMT\"]=\"Courier-Oblique\";e[\"CourierNewPSMT\"]=\"Courier\";e[\"Helvetica\"]=\"Helvetica\";e[\"Helvetica-Bold\"]=\"Helvetica-Bold\";e[\"Helvetica-BoldItalic\"]=\"Helvetica-BoldOblique\";e[\"Helvetica-BoldOblique\"]=\"Helvetica-BoldOblique\";e[\"Helvetica-Italic\"]=\"Helvetica-Oblique\";e[\"Helvetica-Oblique\"]=\"Helvetica-Oblique\";e[\"Symbol-Bold\"]=\"Symbol\";e[\"Symbol-BoldItalic\"]=\"Symbol\";e[\"Symbol-Italic\"]=\"Symbol\";e[\"TimesNewRoman\"]=\"Times-Roman\";e[\"TimesNewRoman-Bold\"]=\"Times-Bold\";e[\"TimesNewRoman-BoldItalic\"]=\"Times-BoldItalic\";e[\"TimesNewRoman-Italic\"]=\"Times-Italic\";e[\"TimesNewRomanPS\"]=\"Times-Roman\";e[\"TimesNewRomanPS-Bold\"]=\"Times-Bold\";e[\"TimesNewRomanPS-BoldItalic\"]=\"Times-BoldItalic\";e[\"TimesNewRomanPS-BoldItalicMT\"]=\"Times-BoldItalic\";e[\"TimesNewRomanPS-BoldMT\"]=\"Times-Bold\";e[\"TimesNewRomanPS-Italic\"]=\"Times-Italic\";e[\"TimesNewRomanPS-ItalicMT\"]=\"Times-Italic\";e[\"TimesNewRomanPSMT\"]=\"Times-Roman\";e[\"TimesNewRomanPSMT-Bold\"]=\"Times-Bold\";e[\"TimesNewRomanPSMT-BoldItalic\"]=\"Times-BoldItalic\";e[\"TimesNewRomanPSMT-Italic\"]=\"Times-Italic\"});var i=r(function(e){e[\"CenturyGothic\"]=\"Helvetica\";e[\"CenturyGothic-Bold\"]=\"Helvetica-Bold\";e[\"CenturyGothic-BoldItalic\"]=\"Helvetica-BoldOblique\";e[\"CenturyGothic-Italic\"]=\"Helvetica-Oblique\";e[\"ComicSansMS\"]=\"Comic Sans MS\";e[\"ComicSansMS-Bold\"]=\"Comic Sans MS-Bold\";e[\"ComicSansMS-BoldItalic\"]=\"Comic Sans MS-BoldItalic\";e[\"ComicSansMS-Italic\"]=\"Comic Sans MS-Italic\";e[\"LucidaConsole\"]=\"Courier\";e[\"LucidaConsole-Bold\"]=\"Courier-Bold\";e[\"LucidaConsole-BoldItalic\"]=\"Courier-BoldOblique\";e[\"LucidaConsole-Italic\"]=\"Courier-Oblique\";e[\"MS-Gothic\"]=\"MS Gothic\";e[\"MS-Gothic-Bold\"]=\"MS Gothic-Bold\";e[\"MS-Gothic-BoldItalic\"]=\"MS Gothic-BoldItalic\";e[\"MS-Gothic-Italic\"]=\"MS Gothic-Italic\";e[\"MS-Mincho\"]=\"MS Mincho\";e[\"MS-Mincho-Bold\"]=\"MS Mincho-Bold\";e[\"MS-Mincho-BoldItalic\"]=\"MS Mincho-BoldItalic\";e[\"MS-Mincho-Italic\"]=\"MS Mincho-Italic\";e[\"MS-PGothic\"]=\"MS PGothic\";e[\"MS-PGothic-Bold\"]=\"MS PGothic-Bold\";e[\"MS-PGothic-BoldItalic\"]=\"MS PGothic-BoldItalic\";e[\"MS-PGothic-Italic\"]=\"MS PGothic-Italic\";e[\"MS-PMincho\"]=\"MS PMincho\";e[\"MS-PMincho-Bold\"]=\"MS PMincho-Bold\";e[\"MS-PMincho-BoldItalic\"]=\"MS PMincho-BoldItalic\";e[\"MS-PMincho-Italic\"]=\"MS PMincho-Italic\";e[\"NuptialScript\"]=\"Times-Italic\";e[\"Wingdings\"]=\"ZapfDingbats\"});var n=r(function(e){e[\"Adobe Jenson\"]=true;e[\"Adobe Text\"]=true;e[\"Albertus\"]=true;e[\"Aldus\"]=true;e[\"Alexandria\"]=true;e[\"Algerian\"]=true;e[\"American Typewriter\"]=true;e[\"Antiqua\"]=true;e[\"Apex\"]=true;e[\"Arno\"]=true;e[\"Aster\"]=true;e[\"Aurora\"]=true;e[\"Baskerville\"]=true;e[\"Bell\"]=true;e[\"Bembo\"]=true;e[\"Bembo Schoolbook\"]=true;e[\"Benguiat\"]=true;e[\"Berkeley Old Style\"]=true;e[\"Bernhard Modern\"]=true;e[\"Berthold City\"]=true;e[\"Bodoni\"]=true;e[\"Bauer Bodoni\"]=true;e[\"Book Antiqua\"]=true;e[\"Bookman\"]=true;e[\"Bordeaux Roman\"]=true;e[\"Californian FB\"]=true;e[\"Calisto\"]=true;e[\"Calvert\"]=true;e[\"Capitals\"]=true;e[\"Cambria\"]=true;e[\"Cartier\"]=true;e[\"Caslon\"]=true;e[\"Catull\"]=true;e[\"Centaur\"]=true;e[\"Century Old Style\"]=true;e[\"Century Schoolbook\"]=true;e[\"Chaparral\"]=true;e[\"Charis SIL\"]=true;e[\"Cheltenham\"]=true;e[\"Cholla Slab\"]=true;e[\"Clarendon\"]=true;e[\"Clearface\"]=true;e[\"Cochin\"]=true;e[\"Colonna\"]=true;e[\"Computer Modern\"]=true;e[\"Concrete Roman\"]=true;e[\"Constantia\"]=true;e[\"Cooper Black\"]=true;e[\"Corona\"]=true;e[\"Ecotype\"]=true;e[\"Egyptienne\"]=true;e[\"Elephant\"]=true;e[\"Excelsior\"]=true;e[\"Fairfield\"]=true;e[\"FF Scala\"]=true;e[\"Folkard\"]=true;e[\"Footlight\"]=true;e[\"FreeSerif\"]=true;e[\"Friz Quadrata\"]=true;e[\"Garamond\"]=true;e[\"Gentium\"]=true;e[\"Georgia\"]=true;e[\"Gloucester\"]=true;e[\"Goudy Old Style\"]=true;e[\"Goudy Schoolbook\"]=true;e[\"Goudy Pro Font\"]=true;e[\"Granjon\"]=true;e[\"Guardian Egyptian\"]=true;e[\"Heather\"]=true;e[\"Hercules\"]=true;e[\"High Tower Text\"]=true;e[\"Hiroshige\"]=true;e[\"Hoefler Text\"]=true;e[\"Humana Serif\"]=true;e[\"Imprint\"]=true;e[\"Ionic No. 5\"]=true;e[\"Janson\"]=true;e[\"Joanna\"]=true;e[\"Korinna\"]=true;e[\"Lexicon\"]=true;e[\"Liberation Serif\"]=true;e[\"Linux Libertine\"]=true;e[\"Literaturnaya\"]=true;e[\"Lucida\"]=true;e[\"Lucida Bright\"]=true;e[\"Melior\"]=true;e[\"Memphis\"]=true;e[\"Miller\"]=true;e[\"Minion\"]=true;e[\"Modern\"]=true;e[\"Mona Lisa\"]=true;e[\"Mrs Eaves\"]=true;e[\"MS Serif\"]=true;e[\"Museo Slab\"]=true;e[\"New York\"]=true;e[\"Nimbus Roman\"]=true;e[\"NPS Rawlinson Roadway\"]=true;e[\"NuptialScript\"]=true;e[\"Palatino\"]=true;e[\"Perpetua\"]=true;e[\"Plantin\"]=true;e[\"Plantin Schoolbook\"]=true;e[\"Playbill\"]=true;e[\"Poor Richard\"]=true;e[\"Rawlinson Roadway\"]=true;e[\"Renault\"]=true;e[\"Requiem\"]=true;e[\"Rockwell\"]=true;e[\"Roman\"]=true;e[\"Rotis Serif\"]=true;e[\"Sabon\"]=true;e[\"Scala\"]=true;e[\"Seagull\"]=true;e[\"Sistina\"]=true;e[\"Souvenir\"]=true;e[\"STIX\"]=true;e[\"Stone Informal\"]=true;e[\"Stone Serif\"]=true;e[\"Sylfaen\"]=true;e[\"Times\"]=true;e[\"Trajan\"]=true;e[\"Trinité\"]=true;e[\"Trump Mediaeval\"]=true;e[\"Utopia\"]=true;e[\"Vale Type\"]=true;e[\"Bitstream Vera\"]=true;e[\"Vera Serif\"]=true;e[\"Versailles\"]=true;e[\"Wanted\"]=true;e[\"Weiss\"]=true;e[\"Wide Latin\"]=true;e[\"Windsor\"]=true;e[\"XITS\"]=true});var s=r(function(e){e[\"Dingbats\"]=true;e[\"Symbol\"]=true;e[\"ZapfDingbats\"]=true});var o=r(function(e){e[2]=10;e[3]=32;e[4]=33;e[5]=34;e[6]=35;e[7]=36;e[8]=37;e[9]=38;e[10]=39;e[11]=40;e[12]=41;e[13]=42;e[14]=43;e[15]=44;e[16]=45;e[17]=46;e[18]=47;e[19]=48;e[20]=49;e[21]=50;e[22]=51;e[23]=52;e[24]=53;e[25]=54;e[26]=55;e[27]=56;e[28]=57;e[29]=58;e[30]=894;e[31]=60;e[32]=61;e[33]=62;e[34]=63;e[35]=64;e[36]=65;e[37]=66;e[38]=67;e[39]=68;e[40]=69;e[41]=70;e[42]=71;e[43]=72;e[44]=73;e[45]=74;e[46]=75;e[47]=76;e[48]=77;e[49]=78;e[50]=79;e[51]=80;e[52]=81;e[53]=82;e[54]=83;e[55]=84;e[56]=85;e[57]=86;e[58]=87;e[59]=88;e[60]=89;e[61]=90;e[62]=91;e[63]=92;e[64]=93;e[65]=94;e[66]=95;e[67]=96;e[68]=97;e[69]=98;e[70]=99;e[71]=100;e[72]=101;e[73]=102;e[74]=103;e[75]=104;e[76]=105;e[77]=106;e[78]=107;e[79]=108;e[80]=109;e[81]=110;e[82]=111;e[83]=112;e[84]=113;e[85]=114;e[86]=115;e[87]=116;e[88]=117;e[89]=118;e[90]=119;e[91]=120;e[92]=121;e[93]=122;e[94]=123;e[95]=124;e[96]=125;e[97]=126;e[98]=196;e[99]=197;e[100]=199;e[101]=201;e[102]=209;e[103]=214;e[104]=220;e[105]=225;e[106]=224;e[107]=226;e[108]=228;e[109]=227;e[110]=229;e[111]=231;e[112]=233;e[113]=232;e[114]=234;e[115]=235;e[116]=237;e[117]=236;e[118]=238;e[119]=239;e[120]=241;e[121]=243;e[122]=242;e[123]=244;e[124]=246;e[125]=245;e[126]=250;e[127]=249;e[128]=251;e[129]=252;e[130]=8224;e[131]=176;e[132]=162;e[133]=163;e[134]=167;e[135]=8226;e[136]=182;e[137]=223;e[138]=174;e[139]=169;e[140]=8482;e[141]=180;e[142]=168;e[143]=8800;e[144]=198;e[145]=216;e[146]=8734;e[147]=177;e[148]=8804;e[149]=8805;e[150]=165;e[151]=181;e[152]=8706;e[153]=8721;e[154]=8719;e[156]=8747;e[157]=170;e[158]=186;e[159]=8486;e[160]=230;e[161]=248;e[162]=191;e[163]=161;e[164]=172;e[165]=8730;e[166]=402;e[167]=8776;e[168]=8710;e[169]=171;e[170]=187;e[171]=8230;e[210]=218;e[223]=711;e[224]=321;e[225]=322;e[227]=353;e[229]=382;e[234]=253;e[252]=263;e[253]=268;e[254]=269;e[258]=258;e[260]=260;e[261]=261;e[265]=280;e[266]=281;e[268]=283;e[269]=313;e[275]=323;e[276]=324;e[278]=328;e[284]=345;e[285]=346;e[286]=347;e[292]=367;e[295]=377;e[296]=378;e[298]=380;e[305]=963;e[306]=964;e[307]=966;e[308]=8215;e[309]=8252;e[310]=8319;e[311]=8359;e[312]=8592;e[313]=8593;e[337]=9552;e[493]=1039;e[494]=1040;e[705]=1524;e[706]=8362;e[710]=64288;e[711]=64298;e[759]=1617;e[761]=1776;e[763]=1778;e[775]=1652;e[777]=1764;e[778]=1780;e[779]=1781;e[780]=1782;e[782]=771;e[783]=64726;e[786]=8363;e[788]=8532;e[790]=768;e[791]=769;e[792]=768;e[795]=803;e[797]=64336;e[798]=64337;e[799]=64342;e[800]=64343;e[801]=64344;e[802]=64345;e[803]=64362;e[804]=64363;e[805]=64364;e[2424]=7821;e[2425]=7822;e[2426]=7823;e[2427]=7824;e[2428]=7825;e[2429]=7826;e[2430]=7827;e[2433]=7682;e[2678]=8045;e[2679]=8046;e[2830]=1552;e[2838]=686;e[2840]=751;e[2842]=753;e[2843]=754;e[2844]=755;e[2846]=757;e[2856]=767;e[2857]=848;e[2858]=849;e[2862]=853;e[2863]=854;e[2864]=855;e[2865]=861;e[2866]=862;e[2906]=7460;e[2908]=7462;e[2909]=7463;e[2910]=7464;e[2912]=7466;e[2913]=7467;e[2914]=7468;e[2916]=7470;e[2917]=7471;e[2918]=7472;e[2920]=7474;e[2921]=7475;e[2922]=7476;e[2924]=7478;e[2925]=7479;e[2926]=7480;e[2928]=7482;e[2929]=7483;e[2930]=7484;e[2932]=7486;e[2933]=7487;e[2934]=7488;e[2936]=7490;e[2937]=7491;e[2938]=7492;e[2940]=7494;e[2941]=7495;e[2942]=7496;e[2944]=7498;e[2946]=7500;e[2948]=7502;e[2950]=7504;e[2951]=7505;e[2952]=7506;e[2954]=7508;e[2955]=7509;e[2956]=7510;e[2958]=7512;e[2959]=7513;e[2960]=7514;e[2962]=7516;e[2963]=7517;e[2964]=7518;e[2966]=7520;e[2967]=7521;e[2968]=7522;e[2970]=7524;e[2971]=7525;e[2972]=7526;e[2974]=7528;e[2975]=7529;e[2976]=7530;e[2978]=1537;e[2979]=1538;e[2980]=1539;e[2982]=1549;e[2983]=1551;e[2984]=1552;e[2986]=1554;e[2987]=1555;e[2988]=1556;e[2990]=1623;e[2991]=1624;e[2995]=1775;e[2999]=1791;e[3002]=64290;e[3003]=64291;e[3004]=64292;e[3006]=64294;e[3007]=64295;e[3008]=64296;e[3011]=1900;e[3014]=8223;e[3015]=8244;e[3017]=7532;e[3018]=7533;e[3019]=7534;e[3075]=7590;e[3076]=7591;e[3079]=7594;e[3080]=7595;e[3083]=7598;e[3084]=7599;e[3087]=7602;e[3088]=7603;e[3091]=7606;e[3092]=7607;e[3095]=7610;e[3096]=7611;e[3099]=7614;e[3100]=7615;e[3103]=7618;e[3104]=7619;e[3107]=8337;e[3108]=8338;e[3116]=1884;e[3119]=1885;e[3120]=1885;e[3123]=1886;e[3124]=1886;e[3127]=1887;e[3128]=1887;e[3131]=1888;e[3132]=1888;e[3135]=1889;e[3136]=1889;e[3139]=1890;e[3140]=1890;e[3143]=1891;e[3144]=1891;e[3147]=1892;e[3148]=1892;e[3153]=580;e[3154]=581;e[3157]=584;e[3158]=585;e[3161]=588;e[3162]=589;e[3165]=891;e[3166]=892;e[3169]=1274;e[3170]=1275;e[3173]=1278;e[3174]=1279;e[3181]=7622;e[3182]=7623;e[3282]=11799;e[3316]=578;e[3379]=42785;e[3393]=1159;e[3416]=8377});var l=r(function(e){e[227]=322;e[264]=261;e[291]=346});e.getStdFontMap=a;e.getNonStdFontMap=i;e.getSerifFonts=n;e.getSymbolsFonts=s;e.getGlyphMapForStandardFonts=o;e.getSupplementalGlyphMapForArialBlack=l});(function(e,t){t(e.pdfjsCoreUnicode={},e.pdfjsSharedUtil)})(this,function(e,t){var r=t.getLookupTableFactory;var a=r(function(e){e[63721]=169;e[63193]=169;e[63720]=174;e[63194]=174;e[63722]=8482;e[63195]=8482;e[63729]=9127;e[63730]=9128;e[63731]=9129;e[63740]=9131;e[63741]=9132;e[63742]=9133;e[63726]=9121;e[63727]=9122;e[63728]=9123;e[63737]=9124;e[63738]=9125;e[63739]=9126;e[63723]=9115;e[63724]=9116;e[63725]=9117;e[63734]=9118;e[63735]=9119;e[63736]=9120});function i(e){if(e>=65520&&e<=65535){return 0}else if(e>=62976&&e<=63743){return a()[e]||e}return e}function n(e,t){var r=t[e];if(r!==undefined){return r}if(!e){return-1}if(e[0]===\"u\"){var a=e.length,i;if(a===7&&e[1]===\"n\"&&e[2]===\"i\"){i=e.substr(3)}else if(a>=5&&a<=7){i=e.substr(1)}else{return-1}if(i===i.toUpperCase()){r=parseInt(i,16);if(r>=0){return r}}}return-1}var s=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function o(e){for(var t=0,r=s.length;t<r;t++){var a=s[t];if(e>=a.begin&&e<a.end){return t}}return-1}function l(e){var t=s[13];if(e>=t.begin&&e<t.end){return true}t=s[11];if(e>=t.begin&&e<t.end){return true}return false}var c=r(function(e){e[\"¨\"]=\" ̈\";e[\"¯\"]=\" ̄\";e[\"´\"]=\" ́\";e[\"µ\"]=\"μ\";e[\"¸\"]=\" ̧\";e[\"Ĳ\"]=\"IJ\";e[\"ĳ\"]=\"ij\";e[\"Ŀ\"]=\"L·\";e[\"ŀ\"]=\"l·\";e[\"ŉ\"]=\"ʼn\";e[\"ſ\"]=\"s\";e[\"Ǆ\"]=\"DŽ\";e[\"ǅ\"]=\"Dž\";e[\"ǆ\"]=\"dž\";e[\"Ǉ\"]=\"LJ\";e[\"ǈ\"]=\"Lj\";e[\"ǉ\"]=\"lj\";e[\"Ǌ\"]=\"NJ\";e[\"ǋ\"]=\"Nj\";e[\"ǌ\"]=\"nj\";e[\"Ǳ\"]=\"DZ\";e[\"ǲ\"]=\"Dz\";e[\"ǳ\"]=\"dz\";e[\"˘\"]=\" ̆\";e[\"˙\"]=\" ̇\";e[\"˚\"]=\" ̊\";e[\"˛\"]=\" ̨\";e[\"˜\"]=\" ̃\";e[\"˝\"]=\" ̋\";e[\"ͺ\"]=\" ͅ\";e[\"΄\"]=\" ́\";e[\"ϐ\"]=\"β\";e[\"ϑ\"]=\"θ\";e[\"ϒ\"]=\"Υ\";e[\"ϕ\"]=\"φ\";e[\"ϖ\"]=\"π\";e[\"ϰ\"]=\"κ\";e[\"ϱ\"]=\"ρ\";e[\"ϲ\"]=\"ς\";e[\"ϴ\"]=\"Θ\";e[\"ϵ\"]=\"ε\";e[\"Ϲ\"]=\"Σ\";e[\"և\"]=\"եւ\";e[\"ٵ\"]=\"اٴ\";e[\"ٶ\"]=\"وٴ\";e[\"ٷ\"]=\"ۇٴ\";e[\"ٸ\"]=\"يٴ\";e[\"ำ\"]=\"ํา\";e[\"ຳ\"]=\"ໍາ\";e[\"ໜ\"]=\"ຫນ\";e[\"ໝ\"]=\"ຫມ\";e[\"ཷ\"]=\"ྲཱྀ\";e[\"ཹ\"]=\"ླཱྀ\";e[\"ẚ\"]=\"aʾ\";e[\"᾽\"]=\" ̓\";e[\"᾿\"]=\" ̓\";e[\"῀\"]=\" ͂\";e[\"῾\"]=\" ̔\";e[\" \"]=\" \";e[\" \"]=\" \";e[\" \"]=\" \";e[\" \"]=\" \";e[\" \"]=\" \";e[\" \"]=\" \";e[\" \"]=\" \";e[\" \"]=\" \";e[\"‗\"]=\" ̳\";e[\"․\"]=\".\";e[\"‥\"]=\"..\";e[\"…\"]=\"...\";e[\"″\"]=\"′′\";e[\"‴\"]=\"′′′\";e[\"‶\"]=\"‵‵\";e[\"‷\"]=\"‵‵‵\";e[\"‼\"]=\"!!\";e[\"‾\"]=\" ̅\";e[\"⁇\"]=\"??\";e[\"⁈\"]=\"?!\";e[\"⁉\"]=\"!?\";e[\"⁗\"]=\"′′′′\";e[\" \"]=\" \";e[\"₨\"]=\"Rs\";e[\"℀\"]=\"a/c\";e[\"℁\"]=\"a/s\";e[\"℃\"]=\"°C\";e[\"℅\"]=\"c/o\";e[\"℆\"]=\"c/u\";e[\"ℇ\"]=\"Ɛ\";e[\"℉\"]=\"°F\";e[\"№\"]=\"No\";e[\"℡\"]=\"TEL\";e[\"ℵ\"]=\"א\";e[\"ℶ\"]=\"ב\";e[\"ℷ\"]=\"ג\";e[\"ℸ\"]=\"ד\";e[\"℻\"]=\"FAX\";e[\"Ⅰ\"]=\"I\";e[\"Ⅱ\"]=\"II\";e[\"Ⅲ\"]=\"III\";e[\"Ⅳ\"]=\"IV\";e[\"Ⅴ\"]=\"V\";e[\"Ⅵ\"]=\"VI\";e[\"Ⅶ\"]=\"VII\";e[\"Ⅷ\"]=\"VIII\";e[\"Ⅸ\"]=\"IX\";e[\"Ⅹ\"]=\"X\";e[\"Ⅺ\"]=\"XI\";e[\"Ⅻ\"]=\"XII\";e[\"Ⅼ\"]=\"L\";e[\"Ⅽ\"]=\"C\";e[\"Ⅾ\"]=\"D\";e[\"Ⅿ\"]=\"M\";e[\"ⅰ\"]=\"i\";e[\"ⅱ\"]=\"ii\";e[\"ⅲ\"]=\"iii\";e[\"ⅳ\"]=\"iv\";e[\"ⅴ\"]=\"v\";e[\"ⅵ\"]=\"vi\";e[\"ⅶ\"]=\"vii\";e[\"ⅷ\"]=\"viii\";e[\"ⅸ\"]=\"ix\";e[\"ⅹ\"]=\"x\";e[\"ⅺ\"]=\"xi\";e[\"ⅻ\"]=\"xii\";e[\"ⅼ\"]=\"l\";e[\"ⅽ\"]=\"c\";e[\"ⅾ\"]=\"d\";e[\"ⅿ\"]=\"m\";e[\"∬\"]=\"∫∫\";e[\"∭\"]=\"∫∫∫\";e[\"∯\"]=\"∮∮\";e[\"∰\"]=\"∮∮∮\";e[\"⑴\"]=\"(1)\";e[\"⑵\"]=\"(2)\";e[\"⑶\"]=\"(3)\";e[\"⑷\"]=\"(4)\";e[\"⑸\"]=\"(5)\";e[\"⑹\"]=\"(6)\";e[\"⑺\"]=\"(7)\";e[\"⑻\"]=\"(8)\";e[\"⑼\"]=\"(9)\";e[\"⑽\"]=\"(10)\";e[\"⑾\"]=\"(11)\";e[\"⑿\"]=\"(12)\";e[\"⒀\"]=\"(13)\";e[\"⒁\"]=\"(14)\";e[\"⒂\"]=\"(15)\";e[\"⒃\"]=\"(16)\";e[\"⒄\"]=\"(17)\";e[\"⒅\"]=\"(18)\";e[\"⒆\"]=\"(19)\";e[\"⒇\"]=\"(20)\";e[\"⒈\"]=\"1.\";e[\"⒉\"]=\"2.\";e[\"⒊\"]=\"3.\";e[\"⒋\"]=\"4.\";e[\"⒌\"]=\"5.\";e[\"⒍\"]=\"6.\";e[\"⒎\"]=\"7.\";e[\"⒏\"]=\"8.\";e[\"⒐\"]=\"9.\";e[\"⒑\"]=\"10.\";e[\"⒒\"]=\"11.\";e[\"⒓\"]=\"12.\";e[\"⒔\"]=\"13.\";e[\"⒕\"]=\"14.\";e[\"⒖\"]=\"15.\";e[\"⒗\"]=\"16.\";e[\"⒘\"]=\"17.\";e[\"⒙\"]=\"18.\";e[\"⒚\"]=\"19.\";e[\"⒛\"]=\"20.\";e[\"⒜\"]=\"(a)\";e[\"⒝\"]=\"(b)\";e[\"⒞\"]=\"(c)\";e[\"⒟\"]=\"(d)\";e[\"⒠\"]=\"(e)\";e[\"⒡\"]=\"(f)\";e[\"⒢\"]=\"(g)\";e[\"⒣\"]=\"(h)\";e[\"⒤\"]=\"(i)\";e[\"⒥\"]=\"(j)\";e[\"⒦\"]=\"(k)\";e[\"⒧\"]=\"(l)\";e[\"⒨\"]=\"(m)\";e[\"⒩\"]=\"(n)\";e[\"⒪\"]=\"(o)\";e[\"⒫\"]=\"(p)\";e[\"⒬\"]=\"(q)\";e[\"⒭\"]=\"(r)\";e[\"⒮\"]=\"(s)\";e[\"⒯\"]=\"(t)\";e[\"⒰\"]=\"(u)\";e[\"⒱\"]=\"(v)\";e[\"⒲\"]=\"(w)\";e[\"⒳\"]=\"(x)\";e[\"⒴\"]=\"(y)\";e[\"⒵\"]=\"(z)\";e[\"⨌\"]=\"∫∫∫∫\";e[\"⩴\"]=\"::=\";e[\"⩵\"]=\"==\";e[\"⩶\"]=\"===\";e[\"⺟\"]=\"母\";e[\"⻳\"]=\"龟\";e[\"⼀\"]=\"一\";e[\"⼁\"]=\"丨\";e[\"⼂\"]=\"丶\";e[\"⼃\"]=\"丿\";e[\"⼄\"]=\"乙\";e[\"⼅\"]=\"亅\";e[\"⼆\"]=\"二\";e[\"⼇\"]=\"亠\";e[\"⼈\"]=\"人\";e[\"⼉\"]=\"儿\";e[\"⼊\"]=\"入\";e[\"⼋\"]=\"八\";e[\"⼌\"]=\"冂\";e[\"⼍\"]=\"冖\";e[\"⼎\"]=\"冫\";e[\"⼏\"]=\"几\";e[\"⼐\"]=\"凵\";e[\"⼑\"]=\"刀\";e[\"⼒\"]=\"力\";e[\"⼓\"]=\"勹\";e[\"⼔\"]=\"匕\";e[\"⼕\"]=\"匚\";e[\"⼖\"]=\"匸\";e[\"⼗\"]=\"十\";e[\"⼘\"]=\"卜\";e[\"⼙\"]=\"卩\";e[\"⼚\"]=\"厂\";e[\"⼛\"]=\"厶\";e[\"⼜\"]=\"又\";e[\"⼝\"]=\"口\";e[\"⼞\"]=\"囗\";e[\"⼟\"]=\"土\";e[\"⼠\"]=\"士\";e[\"⼡\"]=\"夂\";e[\"⼢\"]=\"夊\";e[\"⼣\"]=\"夕\";e[\"⼤\"]=\"大\";e[\"⼥\"]=\"女\";e[\"⼦\"]=\"子\";e[\"⼧\"]=\"宀\";e[\"⼨\"]=\"寸\";e[\"⼩\"]=\"小\";e[\"⼪\"]=\"尢\";e[\"⼫\"]=\"尸\";e[\"⼬\"]=\"屮\";e[\"⼭\"]=\"山\";e[\"⼮\"]=\"巛\";e[\"⼯\"]=\"工\";e[\"⼰\"]=\"己\";e[\"⼱\"]=\"巾\";e[\"⼲\"]=\"干\";e[\"⼳\"]=\"幺\";e[\"⼴\"]=\"广\";e[\"⼵\"]=\"廴\";e[\"⼶\"]=\"廾\";e[\"⼷\"]=\"弋\";e[\"⼸\"]=\"弓\";e[\"⼹\"]=\"彐\";e[\"⼺\"]=\"彡\";e[\"⼻\"]=\"彳\";e[\"⼼\"]=\"心\";e[\"⼽\"]=\"戈\";e[\"⼾\"]=\"戶\";e[\"⼿\"]=\"手\";e[\"⽀\"]=\"支\";e[\"⽁\"]=\"攴\";e[\"⽂\"]=\"文\";e[\"⽃\"]=\"斗\";e[\"⽄\"]=\"斤\";e[\"⽅\"]=\"方\";e[\"⽆\"]=\"无\";e[\"⽇\"]=\"日\";e[\"⽈\"]=\"曰\";e[\"⽉\"]=\"月\";e[\"⽊\"]=\"木\";e[\"⽋\"]=\"欠\";e[\"⽌\"]=\"止\";e[\"⽍\"]=\"歹\";e[\"⽎\"]=\"殳\";e[\"⽏\"]=\"毋\";e[\"⽐\"]=\"比\";e[\"⽑\"]=\"毛\";e[\"⽒\"]=\"氏\";e[\"⽓\"]=\"气\";e[\"⽔\"]=\"水\";e[\"⽕\"]=\"火\";e[\"⽖\"]=\"爪\";e[\"⽗\"]=\"父\";e[\"⽘\"]=\"爻\";e[\"⽙\"]=\"爿\";e[\"⽚\"]=\"片\";e[\"⽛\"]=\"牙\";e[\"⽜\"]=\"牛\";e[\"⽝\"]=\"犬\";e[\"⽞\"]=\"玄\";e[\"⽟\"]=\"玉\";e[\"⽠\"]=\"瓜\";e[\"⽡\"]=\"瓦\";e[\"⽢\"]=\"甘\";e[\"⽣\"]=\"生\";e[\"⽤\"]=\"用\";e[\"⽥\"]=\"田\";e[\"⽦\"]=\"疋\";e[\"⽧\"]=\"疒\";e[\"⽨\"]=\"癶\";e[\"⽩\"]=\"白\";e[\"⽪\"]=\"皮\";e[\"⽫\"]=\"皿\";e[\"⽬\"]=\"目\";e[\"⽭\"]=\"矛\";e[\"⽮\"]=\"矢\";e[\"⽯\"]=\"石\";e[\"⽰\"]=\"示\";e[\"⽱\"]=\"禸\";e[\"⽲\"]=\"禾\";e[\"⽳\"]=\"穴\";e[\"⽴\"]=\"立\";e[\"⽵\"]=\"竹\";e[\"⽶\"]=\"米\";e[\"⽷\"]=\"糸\";e[\"⽸\"]=\"缶\";e[\"⽹\"]=\"网\";e[\"⽺\"]=\"羊\";e[\"⽻\"]=\"羽\";e[\"⽼\"]=\"老\";e[\"⽽\"]=\"而\";e[\"⽾\"]=\"耒\";e[\"⽿\"]=\"耳\";e[\"⾀\"]=\"聿\";e[\"⾁\"]=\"肉\";e[\"⾂\"]=\"臣\";e[\"⾃\"]=\"自\";e[\"⾄\"]=\"至\";e[\"⾅\"]=\"臼\";e[\"⾆\"]=\"舌\";e[\"⾇\"]=\"舛\";e[\"⾈\"]=\"舟\";e[\"⾉\"]=\"艮\";e[\"⾊\"]=\"色\";e[\"⾋\"]=\"艸\";e[\"⾌\"]=\"虍\";e[\"⾍\"]=\"虫\";e[\"⾎\"]=\"血\";e[\"⾏\"]=\"行\";e[\"⾐\"]=\"衣\";e[\"⾑\"]=\"襾\";e[\"⾒\"]=\"見\";e[\"⾓\"]=\"角\";e[\"⾔\"]=\"言\";e[\"⾕\"]=\"谷\";e[\"⾖\"]=\"豆\";e[\"⾗\"]=\"豕\";e[\"⾘\"]=\"豸\";e[\"⾙\"]=\"貝\";e[\"⾚\"]=\"赤\";e[\"⾛\"]=\"走\";e[\"⾜\"]=\"足\";e[\"⾝\"]=\"身\";e[\"⾞\"]=\"車\";e[\"⾟\"]=\"辛\";e[\"⾠\"]=\"辰\";e[\"⾡\"]=\"辵\";e[\"⾢\"]=\"邑\";e[\"⾣\"]=\"酉\";e[\"⾤\"]=\"釆\";e[\"⾥\"]=\"里\";e[\"⾦\"]=\"金\";e[\"⾧\"]=\"長\";e[\"⾨\"]=\"門\";e[\"⾩\"]=\"阜\";e[\"⾪\"]=\"隶\";e[\"⾫\"]=\"隹\";e[\"⾬\"]=\"雨\";e[\"⾭\"]=\"靑\";e[\"⾮\"]=\"非\";e[\"⾯\"]=\"面\";e[\"⾰\"]=\"革\";e[\"⾱\"]=\"韋\";e[\"⾲\"]=\"韭\";e[\"⾳\"]=\"音\";e[\"⾴\"]=\"頁\";e[\"⾵\"]=\"風\";e[\"⾶\"]=\"飛\";e[\"⾷\"]=\"食\";e[\"⾸\"]=\"首\";e[\"⾹\"]=\"香\";e[\"⾺\"]=\"馬\";e[\"⾻\"]=\"骨\";e[\"⾼\"]=\"高\";e[\"⾽\"]=\"髟\";e[\"⾾\"]=\"鬥\";e[\"⾿\"]=\"鬯\";e[\"⿀\"]=\"鬲\";e[\"⿁\"]=\"鬼\";e[\"⿂\"]=\"魚\";e[\"⿃\"]=\"鳥\";e[\"⿄\"]=\"鹵\";e[\"⿅\"]=\"鹿\";e[\"⿆\"]=\"麥\";e[\"⿇\"]=\"麻\";e[\"⿈\"]=\"黃\";e[\"⿉\"]=\"黍\";e[\"⿊\"]=\"黑\";e[\"⿋\"]=\"黹\";e[\"⿌\"]=\"黽\";e[\"⿍\"]=\"鼎\";e[\"⿎\"]=\"鼓\";e[\"⿏\"]=\"鼠\";e[\"⿐\"]=\"鼻\";e[\"⿑\"]=\"齊\";e[\"⿒\"]=\"齒\";e[\"⿓\"]=\"龍\";e[\"⿔\"]=\"龜\";e[\"⿕\"]=\"龠\";e[\"〶\"]=\"〒\";e[\"〸\"]=\"十\";e[\"〹\"]=\"卄\";e[\"〺\"]=\"卅\";e[\"゛\"]=\" ゙\";e[\"゜\"]=\" ゚\";e[\"ㄱ\"]=\"ᄀ\";e[\"ㄲ\"]=\"ᄁ\";e[\"ㄳ\"]=\"ᆪ\";e[\"ㄴ\"]=\"ᄂ\";e[\"ㄵ\"]=\"ᆬ\";e[\"ㄶ\"]=\"ᆭ\";e[\"ㄷ\"]=\"ᄃ\";e[\"ㄸ\"]=\"ᄄ\";e[\"ㄹ\"]=\"ᄅ\";e[\"ㄺ\"]=\"ᆰ\";e[\"ㄻ\"]=\"ᆱ\";e[\"ㄼ\"]=\"ᆲ\";e[\"ㄽ\"]=\"ᆳ\";e[\"ㄾ\"]=\"ᆴ\";e[\"ㄿ\"]=\"ᆵ\";e[\"ㅀ\"]=\"ᄚ\";e[\"ㅁ\"]=\"ᄆ\";e[\"ㅂ\"]=\"ᄇ\";e[\"ㅃ\"]=\"ᄈ\";e[\"ㅄ\"]=\"ᄡ\";e[\"ㅅ\"]=\"ᄉ\";e[\"ㅆ\"]=\"ᄊ\";e[\"ㅇ\"]=\"ᄋ\";e[\"ㅈ\"]=\"ᄌ\";e[\"ㅉ\"]=\"ᄍ\";e[\"ㅊ\"]=\"ᄎ\";e[\"ㅋ\"]=\"ᄏ\";e[\"ㅌ\"]=\"ᄐ\";e[\"ㅍ\"]=\"ᄑ\";e[\"ㅎ\"]=\"ᄒ\";e[\"ㅏ\"]=\"ᅡ\";e[\"ㅐ\"]=\"ᅢ\";e[\"ㅑ\"]=\"ᅣ\";e[\"ㅒ\"]=\"ᅤ\";e[\"ㅓ\"]=\"ᅥ\";e[\"ㅔ\"]=\"ᅦ\";e[\"ㅕ\"]=\"ᅧ\";e[\"ㅖ\"]=\"ᅨ\";e[\"ㅗ\"]=\"ᅩ\";e[\"ㅘ\"]=\"ᅪ\";e[\"ㅙ\"]=\"ᅫ\";e[\"ㅚ\"]=\"ᅬ\";e[\"ㅛ\"]=\"ᅭ\";e[\"ㅜ\"]=\"ᅮ\";e[\"ㅝ\"]=\"ᅯ\";e[\"ㅞ\"]=\"ᅰ\";e[\"ㅟ\"]=\"ᅱ\";e[\"ㅠ\"]=\"ᅲ\";e[\"ㅡ\"]=\"ᅳ\";e[\"ㅢ\"]=\"ᅴ\";e[\"ㅣ\"]=\"ᅵ\";e[\"ㅤ\"]=\"ᅠ\";e[\"ㅥ\"]=\"ᄔ\";e[\"ㅦ\"]=\"ᄕ\";e[\"ㅧ\"]=\"ᇇ\";e[\"ㅨ\"]=\"ᇈ\";e[\"ㅩ\"]=\"ᇌ\";e[\"ㅪ\"]=\"ᇎ\";e[\"ㅫ\"]=\"ᇓ\";e[\"ㅬ\"]=\"ᇗ\";e[\"ㅭ\"]=\"ᇙ\";e[\"ㅮ\"]=\"ᄜ\";e[\"ㅯ\"]=\"ᇝ\";e[\"ㅰ\"]=\"ᇟ\";e[\"ㅱ\"]=\"ᄝ\";e[\"ㅲ\"]=\"ᄞ\";e[\"ㅳ\"]=\"ᄠ\";e[\"ㅴ\"]=\"ᄢ\";e[\"ㅵ\"]=\"ᄣ\";e[\"ㅶ\"]=\"ᄧ\";e[\"ㅷ\"]=\"ᄩ\";e[\"ㅸ\"]=\"ᄫ\";e[\"ㅹ\"]=\"ᄬ\";e[\"ㅺ\"]=\"ᄭ\";e[\"ㅻ\"]=\"ᄮ\";e[\"ㅼ\"]=\"ᄯ\";e[\"ㅽ\"]=\"ᄲ\";e[\"ㅾ\"]=\"ᄶ\";e[\"ㅿ\"]=\"ᅀ\";e[\"ㆀ\"]=\"ᅇ\";e[\"ㆁ\"]=\"ᅌ\";e[\"ㆂ\"]=\"ᇱ\";e[\"ㆃ\"]=\"ᇲ\";e[\"ㆄ\"]=\"ᅗ\";e[\"ㆅ\"]=\"ᅘ\";e[\"ㆆ\"]=\"ᅙ\";e[\"ㆇ\"]=\"ᆄ\";e[\"ㆈ\"]=\"ᆅ\";e[\"ㆉ\"]=\"ᆈ\";e[\"ㆊ\"]=\"ᆑ\";e[\"ㆋ\"]=\"ᆒ\";e[\"ㆌ\"]=\"ᆔ\";e[\"ㆍ\"]=\"ᆞ\";e[\"ㆎ\"]=\"ᆡ\";e[\"㈀\"]=\"(ᄀ)\";e[\"㈁\"]=\"(ᄂ)\";e[\"㈂\"]=\"(ᄃ)\";e[\"㈃\"]=\"(ᄅ)\";e[\"㈄\"]=\"(ᄆ)\";e[\"㈅\"]=\"(ᄇ)\";e[\"㈆\"]=\"(ᄉ)\";e[\"㈇\"]=\"(ᄋ)\";e[\"㈈\"]=\"(ᄌ)\";e[\"㈉\"]=\"(ᄎ)\";e[\"㈊\"]=\"(ᄏ)\";e[\"㈋\"]=\"(ᄐ)\";e[\"㈌\"]=\"(ᄑ)\";e[\"㈍\"]=\"(ᄒ)\";e[\"㈎\"]=\"(가)\";e[\"㈏\"]=\"(나)\";e[\"㈐\"]=\"(다)\";e[\"㈑\"]=\"(라)\";e[\"㈒\"]=\"(마)\";e[\"㈓\"]=\"(바)\";e[\"㈔\"]=\"(사)\";e[\"㈕\"]=\"(아)\";e[\"㈖\"]=\"(자)\";e[\"㈗\"]=\"(차)\";e[\"㈘\"]=\"(카)\";e[\"㈙\"]=\"(타)\";e[\"㈚\"]=\"(파)\";e[\"㈛\"]=\"(하)\";e[\"㈜\"]=\"(주)\";e[\"㈝\"]=\"(오전)\";e[\"㈞\"]=\"(오후)\";e[\"㈠\"]=\"(一)\";e[\"㈡\"]=\"(二)\";e[\"㈢\"]=\"(三)\";e[\"㈣\"]=\"(四)\";e[\"㈤\"]=\"(五)\";e[\"㈥\"]=\"(六)\";e[\"㈦\"]=\"(七)\";e[\"㈧\"]=\"(八)\";e[\"㈨\"]=\"(九)\";e[\"㈩\"]=\"(十)\";e[\"㈪\"]=\"(月)\";e[\"㈫\"]=\"(火)\";e[\"㈬\"]=\"(水)\";e[\"㈭\"]=\"(木)\";e[\"㈮\"]=\"(金)\";e[\"㈯\"]=\"(土)\";e[\"㈰\"]=\"(日)\";e[\"㈱\"]=\"(株)\";e[\"㈲\"]=\"(有)\";e[\"㈳\"]=\"(社)\";e[\"㈴\"]=\"(名)\";e[\"㈵\"]=\"(特)\";e[\"㈶\"]=\"(財)\";e[\"㈷\"]=\"(祝)\";e[\"㈸\"]=\"(労)\";e[\"㈹\"]=\"(代)\";e[\"㈺\"]=\"(呼)\";e[\"㈻\"]=\"(学)\";e[\"㈼\"]=\"(監)\";e[\"㈽\"]=\"(企)\";e[\"㈾\"]=\"(資)\";e[\"㈿\"]=\"(協)\";e[\"㉀\"]=\"(祭)\";e[\"㉁\"]=\"(休)\";e[\"㉂\"]=\"(自)\";e[\"㉃\"]=\"(至)\";e[\"㋀\"]=\"1月\";e[\"㋁\"]=\"2月\";e[\"㋂\"]=\"3月\";e[\"㋃\"]=\"4月\";e[\"㋄\"]=\"5月\";e[\"㋅\"]=\"6月\";e[\"㋆\"]=\"7月\";e[\"㋇\"]=\"8月\";e[\"㋈\"]=\"9月\";e[\"㋉\"]=\"10月\";e[\"㋊\"]=\"11月\";e[\"㋋\"]=\"12月\";e[\"㍘\"]=\"0点\";e[\"㍙\"]=\"1点\";e[\"㍚\"]=\"2点\";e[\"㍛\"]=\"3点\";e[\"㍜\"]=\"4点\";e[\"㍝\"]=\"5点\";e[\"㍞\"]=\"6点\";e[\"㍟\"]=\"7点\";e[\"㍠\"]=\"8点\";e[\"㍡\"]=\"9点\";e[\"㍢\"]=\"10点\";e[\"㍣\"]=\"11点\";e[\"㍤\"]=\"12点\";e[\"㍥\"]=\"13点\";e[\"㍦\"]=\"14点\";e[\"㍧\"]=\"15点\";e[\"㍨\"]=\"16点\";e[\"㍩\"]=\"17点\";e[\"㍪\"]=\"18点\";e[\"㍫\"]=\"19点\";e[\"㍬\"]=\"20点\";e[\"㍭\"]=\"21点\";e[\"㍮\"]=\"22点\";e[\"㍯\"]=\"23点\";e[\"㍰\"]=\"24点\";e[\"㏠\"]=\"1日\";e[\"㏡\"]=\"2日\";e[\"㏢\"]=\"3日\";e[\"㏣\"]=\"4日\";e[\"㏤\"]=\"5日\";e[\"㏥\"]=\"6日\";e[\"㏦\"]=\"7日\";e[\"㏧\"]=\"8日\";e[\"㏨\"]=\"9日\";e[\"㏩\"]=\"10日\";e[\"㏪\"]=\"11日\";e[\"㏫\"]=\"12日\";e[\"㏬\"]=\"13日\";e[\"㏭\"]=\"14日\";e[\"㏮\"]=\"15日\";e[\"㏯\"]=\"16日\";e[\"㏰\"]=\"17日\";e[\"㏱\"]=\"18日\";e[\"㏲\"]=\"19日\";e[\"㏳\"]=\"20日\";e[\"㏴\"]=\"21日\";e[\"㏵\"]=\"22日\";e[\"㏶\"]=\"23日\";e[\"㏷\"]=\"24日\";e[\"㏸\"]=\"25日\";e[\"㏹\"]=\"26日\";e[\"㏺\"]=\"27日\";e[\"㏻\"]=\"28日\";e[\"㏼\"]=\"29日\";e[\"㏽\"]=\"30日\";e[\"㏾\"]=\"31日\";e[\"ﬀ\"]=\"ff\";e[\"ﬁ\"]=\"fi\";e[\"ﬂ\"]=\"fl\";e[\"ﬃ\"]=\"ffi\";e[\"ﬄ\"]=\"ffl\";e[\"ﬅ\"]=\"ſt\";e[\"ﬆ\"]=\"st\";e[\"ﬓ\"]=\"մն\";e[\"ﬔ\"]=\"մե\";e[\"ﬕ\"]=\"մի\";e[\"ﬖ\"]=\"վն\";e[\"ﬗ\"]=\"մխ\";e[\"ﭏ\"]=\"אל\";e[\"ﭐ\"]=\"ٱ\";e[\"ﭑ\"]=\"ٱ\";e[\"ﭒ\"]=\"ٻ\";e[\"ﭓ\"]=\"ٻ\";e[\"ﭔ\"]=\"ٻ\";e[\"ﭕ\"]=\"ٻ\";e[\"ﭖ\"]=\"پ\";e[\"ﭗ\"]=\"پ\";e[\"ﭘ\"]=\"پ\";e[\"ﭙ\"]=\"پ\";e[\"ﭚ\"]=\"ڀ\";e[\"ﭛ\"]=\"ڀ\";e[\"ﭜ\"]=\"ڀ\";e[\"ﭝ\"]=\"ڀ\";e[\"ﭞ\"]=\"ٺ\";e[\"ﭟ\"]=\"ٺ\";e[\"ﭠ\"]=\"ٺ\";e[\"ﭡ\"]=\"ٺ\";e[\"ﭢ\"]=\"ٿ\";e[\"ﭣ\"]=\"ٿ\";e[\"ﭤ\"]=\"ٿ\";e[\"ﭥ\"]=\"ٿ\";e[\"ﭦ\"]=\"ٹ\";e[\"ﭧ\"]=\"ٹ\";e[\"ﭨ\"]=\"ٹ\";e[\"ﭩ\"]=\"ٹ\";e[\"ﭪ\"]=\"ڤ\";e[\"ﭫ\"]=\"ڤ\";e[\"ﭬ\"]=\"ڤ\";e[\"ﭭ\"]=\"ڤ\";e[\"ﭮ\"]=\"ڦ\";e[\"ﭯ\"]=\"ڦ\";e[\"ﭰ\"]=\"ڦ\";e[\"ﭱ\"]=\"ڦ\";e[\"ﭲ\"]=\"ڄ\";e[\"ﭳ\"]=\"ڄ\";e[\"ﭴ\"]=\"ڄ\";e[\"ﭵ\"]=\"ڄ\";e[\"ﭶ\"]=\"ڃ\";e[\"ﭷ\"]=\"ڃ\";e[\"ﭸ\"]=\"ڃ\";e[\"ﭹ\"]=\"ڃ\";e[\"ﭺ\"]=\"چ\";e[\"ﭻ\"]=\"چ\";e[\"ﭼ\"]=\"چ\";e[\"ﭽ\"]=\"چ\";e[\"ﭾ\"]=\"ڇ\";e[\"ﭿ\"]=\"ڇ\";e[\"ﮀ\"]=\"ڇ\";e[\"ﮁ\"]=\"ڇ\";e[\"ﮂ\"]=\"ڍ\";e[\"ﮃ\"]=\"ڍ\";e[\"ﮄ\"]=\"ڌ\";e[\"ﮅ\"]=\"ڌ\";e[\"ﮆ\"]=\"ڎ\";e[\"ﮇ\"]=\"ڎ\";e[\"ﮈ\"]=\"ڈ\";e[\"ﮉ\"]=\"ڈ\";e[\"ﮊ\"]=\"ژ\";e[\"ﮋ\"]=\"ژ\";e[\"ﮌ\"]=\"ڑ\";e[\"ﮍ\"]=\"ڑ\";e[\"ﮎ\"]=\"ک\";e[\"ﮏ\"]=\"ک\";e[\"ﮐ\"]=\"ک\";e[\"ﮑ\"]=\"ک\";e[\"ﮒ\"]=\"گ\";e[\"ﮓ\"]=\"گ\";e[\"ﮔ\"]=\"گ\";e[\"ﮕ\"]=\"گ\";e[\"ﮖ\"]=\"ڳ\";e[\"ﮗ\"]=\"ڳ\";e[\"ﮘ\"]=\"ڳ\";e[\"ﮙ\"]=\"ڳ\";e[\"ﮚ\"]=\"ڱ\";e[\"ﮛ\"]=\"ڱ\";e[\"ﮜ\"]=\"ڱ\";e[\"ﮝ\"]=\"ڱ\";e[\"ﮞ\"]=\"ں\";e[\"ﮟ\"]=\"ں\";e[\"ﮠ\"]=\"ڻ\";e[\"ﮡ\"]=\"ڻ\";e[\"ﮢ\"]=\"ڻ\";e[\"ﮣ\"]=\"ڻ\";e[\"ﮤ\"]=\"ۀ\";e[\"ﮥ\"]=\"ۀ\";e[\"ﮦ\"]=\"ہ\";e[\"ﮧ\"]=\"ہ\";e[\"ﮨ\"]=\"ہ\";e[\"ﮩ\"]=\"ہ\";e[\"ﮪ\"]=\"ھ\";e[\"ﮫ\"]=\"ھ\";e[\"ﮬ\"]=\"ھ\";e[\"ﮭ\"]=\"ھ\";e[\"ﮮ\"]=\"ے\";e[\"ﮯ\"]=\"ے\";e[\"ﮰ\"]=\"ۓ\";e[\"ﮱ\"]=\"ۓ\";e[\"ﯓ\"]=\"ڭ\";e[\"ﯔ\"]=\"ڭ\";e[\"ﯕ\"]=\"ڭ\";e[\"ﯖ\"]=\"ڭ\";e[\"ﯗ\"]=\"ۇ\";e[\"ﯘ\"]=\"ۇ\";e[\"ﯙ\"]=\"ۆ\";e[\"ﯚ\"]=\"ۆ\";e[\"ﯛ\"]=\"ۈ\";e[\"ﯜ\"]=\"ۈ\";e[\"ﯝ\"]=\"ٷ\";e[\"ﯞ\"]=\"ۋ\";e[\"ﯟ\"]=\"ۋ\";e[\"ﯠ\"]=\"ۅ\";e[\"ﯡ\"]=\"ۅ\";e[\"ﯢ\"]=\"ۉ\";e[\"ﯣ\"]=\"ۉ\";e[\"ﯤ\"]=\"ې\";e[\"ﯥ\"]=\"ې\";e[\"ﯦ\"]=\"ې\";e[\"ﯧ\"]=\"ې\";e[\"ﯨ\"]=\"ى\";e[\"ﯩ\"]=\"ى\";e[\"ﯪ\"]=\"ئا\";e[\"ﯫ\"]=\"ئا\";e[\"ﯬ\"]=\"ئە\";e[\"ﯭ\"]=\"ئە\";e[\"ﯮ\"]=\"ئو\";e[\"ﯯ\"]=\"ئو\";e[\"ﯰ\"]=\"ئۇ\";e[\"ﯱ\"]=\"ئۇ\";e[\"ﯲ\"]=\"ئۆ\";e[\"ﯳ\"]=\"ئۆ\";e[\"ﯴ\"]=\"ئۈ\";e[\"ﯵ\"]=\"ئۈ\";e[\"ﯶ\"]=\"ئې\";e[\"ﯷ\"]=\"ئې\";e[\"ﯸ\"]=\"ئې\";e[\"ﯹ\"]=\"ئى\";e[\"ﯺ\"]=\"ئى\";e[\"ﯻ\"]=\"ئى\";e[\"ﯼ\"]=\"ی\";e[\"ﯽ\"]=\"ی\";e[\"ﯾ\"]=\"ی\";e[\"ﯿ\"]=\"ی\";e[\"ﰀ\"]=\"ئج\";e[\"ﰁ\"]=\"ئح\";e[\"ﰂ\"]=\"ئم\";e[\"ﰃ\"]=\"ئى\";e[\"ﰄ\"]=\"ئي\";e[\"ﰅ\"]=\"بج\";e[\"ﰆ\"]=\"بح\";e[\"ﰇ\"]=\"بخ\";e[\"ﰈ\"]=\"بم\";e[\"ﰉ\"]=\"بى\";e[\"ﰊ\"]=\"بي\";e[\"ﰋ\"]=\"تج\";e[\"ﰌ\"]=\"تح\";e[\"ﰍ\"]=\"تخ\";e[\"ﰎ\"]=\"تم\";e[\"ﰏ\"]=\"تى\";e[\"ﰐ\"]=\"تي\";e[\"ﰑ\"]=\"ثج\";e[\"ﰒ\"]=\"ثم\";e[\"ﰓ\"]=\"ثى\";e[\"ﰔ\"]=\"ثي\";e[\"ﰕ\"]=\"جح\";e[\"ﰖ\"]=\"جم\";e[\"ﰗ\"]=\"حج\";e[\"ﰘ\"]=\"حم\";e[\"ﰙ\"]=\"خج\";e[\"ﰚ\"]=\"خح\";e[\"ﰛ\"]=\"خم\";e[\"ﰜ\"]=\"سج\";e[\"ﰝ\"]=\"سح\";e[\"ﰞ\"]=\"سخ\";e[\"ﰟ\"]=\"سم\";e[\"ﰠ\"]=\"صح\";e[\"ﰡ\"]=\"صم\";e[\"ﰢ\"]=\"ضج\";e[\"ﰣ\"]=\"ضح\";e[\"ﰤ\"]=\"ضخ\";e[\"ﰥ\"]=\"ضم\";e[\"ﰦ\"]=\"طح\";e[\"ﰧ\"]=\"طم\";e[\"ﰨ\"]=\"ظم\";e[\"ﰩ\"]=\"عج\";e[\"ﰪ\"]=\"عم\";e[\"ﰫ\"]=\"غج\";e[\"ﰬ\"]=\"غم\";e[\"ﰭ\"]=\"فج\";e[\"ﰮ\"]=\"فح\";e[\"ﰯ\"]=\"فخ\";e[\"ﰰ\"]=\"فم\";e[\"ﰱ\"]=\"فى\";e[\"ﰲ\"]=\"في\";e[\"ﰳ\"]=\"قح\";e[\"ﰴ\"]=\"قم\";e[\"ﰵ\"]=\"قى\";e[\"ﰶ\"]=\"قي\";e[\"ﰷ\"]=\"كا\";e[\"ﰸ\"]=\"كج\";e[\"ﰹ\"]=\"كح\";e[\"ﰺ\"]=\"كخ\";e[\"ﰻ\"]=\"كل\";e[\"ﰼ\"]=\"كم\";e[\"ﰽ\"]=\"كى\";e[\"ﰾ\"]=\"كي\";e[\"ﰿ\"]=\"لج\";e[\"ﱀ\"]=\"لح\";e[\"ﱁ\"]=\"لخ\";e[\"ﱂ\"]=\"لم\";e[\"ﱃ\"]=\"لى\";e[\"ﱄ\"]=\"لي\";e[\"ﱅ\"]=\"مج\";e[\"ﱆ\"]=\"مح\";e[\"ﱇ\"]=\"مخ\";e[\"ﱈ\"]=\"مم\";e[\"ﱉ\"]=\"مى\";e[\"ﱊ\"]=\"مي\";e[\"ﱋ\"]=\"نج\";e[\"ﱌ\"]=\"نح\";e[\"ﱍ\"]=\"نخ\";e[\"ﱎ\"]=\"نم\";e[\"ﱏ\"]=\"نى\";e[\"ﱐ\"]=\"ني\";e[\"ﱑ\"]=\"هج\";e[\"ﱒ\"]=\"هم\";e[\"ﱓ\"]=\"هى\";e[\"ﱔ\"]=\"هي\";e[\"ﱕ\"]=\"يج\";e[\"ﱖ\"]=\"يح\";e[\"ﱗ\"]=\"يخ\";e[\"ﱘ\"]=\"يم\";e[\"ﱙ\"]=\"يى\";e[\"ﱚ\"]=\"يي\";e[\"ﱛ\"]=\"ذٰ\";e[\"ﱜ\"]=\"رٰ\";e[\"ﱝ\"]=\"ىٰ\";e[\"ﱞ\"]=\" ٌّ\";e[\"ﱟ\"]=\" ٍّ\";e[\"ﱠ\"]=\" َّ\";e[\"ﱡ\"]=\" ُّ\";e[\"ﱢ\"]=\" ِّ\";e[\"ﱣ\"]=\" ّٰ\";e[\"ﱤ\"]=\"ئر\";e[\"ﱥ\"]=\"ئز\";e[\"ﱦ\"]=\"ئم\";e[\"ﱧ\"]=\"ئن\";e[\"ﱨ\"]=\"ئى\";e[\"ﱩ\"]=\"ئي\";e[\"ﱪ\"]=\"بر\";e[\"ﱫ\"]=\"بز\";e[\"ﱬ\"]=\"بم\";e[\"ﱭ\"]=\"بن\";e[\"ﱮ\"]=\"بى\";e[\"ﱯ\"]=\"بي\";e[\"ﱰ\"]=\"تر\";e[\"ﱱ\"]=\"تز\";e[\"ﱲ\"]=\"تم\";e[\"ﱳ\"]=\"تن\";e[\"ﱴ\"]=\"تى\";e[\"ﱵ\"]=\"تي\";e[\"ﱶ\"]=\"ثر\";e[\"ﱷ\"]=\"ثز\";e[\"ﱸ\"]=\"ثم\";e[\"ﱹ\"]=\"ثن\";e[\"ﱺ\"]=\"ثى\";e[\"ﱻ\"]=\"ثي\";e[\"ﱼ\"]=\"فى\";e[\"ﱽ\"]=\"في\";e[\"ﱾ\"]=\"قى\";e[\"ﱿ\"]=\"قي\";e[\"ﲀ\"]=\"كا\";e[\"ﲁ\"]=\"كل\";e[\"ﲂ\"]=\"كم\";e[\"ﲃ\"]=\"كى\";e[\"ﲄ\"]=\"كي\";e[\"ﲅ\"]=\"لم\";e[\"ﲆ\"]=\"لى\";e[\"ﲇ\"]=\"لي\";e[\"ﲈ\"]=\"ما\";e[\"ﲉ\"]=\"مم\";e[\"ﲊ\"]=\"نر\";e[\"ﲋ\"]=\"نز\";e[\"ﲌ\"]=\"نم\";e[\"ﲍ\"]=\"نن\";e[\"ﲎ\"]=\"نى\";e[\"ﲏ\"]=\"ني\";e[\"ﲐ\"]=\"ىٰ\";e[\"ﲑ\"]=\"ير\";e[\"ﲒ\"]=\"يز\";e[\"ﲓ\"]=\"يم\";e[\"ﲔ\"]=\"ين\";e[\"ﲕ\"]=\"يى\";e[\"ﲖ\"]=\"يي\";e[\"ﲗ\"]=\"ئج\";e[\"ﲘ\"]=\"ئح\";e[\"ﲙ\"]=\"ئخ\";e[\"ﲚ\"]=\"ئم\";e[\"ﲛ\"]=\"ئه\";e[\"ﲜ\"]=\"بج\";e[\"ﲝ\"]=\"بح\";e[\"ﲞ\"]=\"بخ\";e[\"ﲟ\"]=\"بم\";e[\"ﲠ\"]=\"به\";e[\"ﲡ\"]=\"تج\";e[\"ﲢ\"]=\"تح\";e[\"ﲣ\"]=\"تخ\";e[\"ﲤ\"]=\"تم\";e[\"ﲥ\"]=\"ته\";e[\"ﲦ\"]=\"ثم\";e[\"ﲧ\"]=\"جح\";e[\"ﲨ\"]=\"جم\";e[\"ﲩ\"]=\"حج\";e[\"ﲪ\"]=\"حم\";e[\"ﲫ\"]=\"خج\";e[\"ﲬ\"]=\"خم\";e[\"ﲭ\"]=\"سج\";e[\"ﲮ\"]=\"سح\";e[\"ﲯ\"]=\"سخ\";e[\"ﲰ\"]=\"سم\";e[\"ﲱ\"]=\"صح\";e[\"ﲲ\"]=\"صخ\";e[\"ﲳ\"]=\"صم\";e[\"ﲴ\"]=\"ضج\";e[\"ﲵ\"]=\"ضح\";e[\"ﲶ\"]=\"ضخ\";e[\"ﲷ\"]=\"ضم\";e[\"ﲸ\"]=\"طح\";e[\"ﲹ\"]=\"ظم\";e[\"ﲺ\"]=\"عج\";e[\"ﲻ\"]=\"عم\";e[\"ﲼ\"]=\"غج\";e[\"ﲽ\"]=\"غم\";e[\"ﲾ\"]=\"فج\";e[\"ﲿ\"]=\"فح\";e[\"ﳀ\"]=\"فخ\";e[\"ﳁ\"]=\"فم\";e[\"ﳂ\"]=\"قح\";e[\"ﳃ\"]=\"قم\";e[\"ﳄ\"]=\"كج\";e[\"ﳅ\"]=\"كح\";e[\"ﳆ\"]=\"كخ\";e[\"ﳇ\"]=\"كل\";e[\"ﳈ\"]=\"كم\";e[\"ﳉ\"]=\"لج\";e[\"ﳊ\"]=\"لح\";e[\"ﳋ\"]=\"لخ\";e[\"ﳌ\"]=\"لم\";e[\"ﳍ\"]=\"له\";e[\"ﳎ\"]=\"مج\";e[\"ﳏ\"]=\"مح\";e[\"ﳐ\"]=\"مخ\";e[\"ﳑ\"]=\"مم\";e[\"ﳒ\"]=\"نج\";e[\"ﳓ\"]=\"نح\";e[\"ﳔ\"]=\"نخ\";e[\"ﳕ\"]=\"نم\";e[\"ﳖ\"]=\"نه\";e[\"ﳗ\"]=\"هج\";e[\"ﳘ\"]=\"هم\";e[\"ﳙ\"]=\"هٰ\";e[\"ﳚ\"]=\"يج\";e[\"ﳛ\"]=\"يح\";e[\"ﳜ\"]=\"يخ\";e[\"ﳝ\"]=\"يم\";e[\"ﳞ\"]=\"يه\";e[\"ﳟ\"]=\"ئم\";e[\"ﳠ\"]=\"ئه\";e[\"ﳡ\"]=\"بم\";e[\"ﳢ\"]=\"به\";e[\"ﳣ\"]=\"تم\";e[\"ﳤ\"]=\"ته\";e[\"ﳥ\"]=\"ثم\";e[\"ﳦ\"]=\"ثه\";e[\"ﳧ\"]=\"سم\";e[\"ﳨ\"]=\"سه\";e[\"ﳩ\"]=\"شم\";e[\"ﳪ\"]=\"شه\";e[\"ﳫ\"]=\"كل\";e[\"ﳬ\"]=\"كم\";e[\"ﳭ\"]=\"لم\";e[\"ﳮ\"]=\"نم\";e[\"ﳯ\"]=\"نه\";e[\"ﳰ\"]=\"يم\";e[\"ﳱ\"]=\"يه\";e[\"ﳲ\"]=\"ـَّ\";e[\"ﳳ\"]=\"ـُّ\";e[\"ﳴ\"]=\"ـِّ\";e[\"ﳵ\"]=\"طى\";e[\"ﳶ\"]=\"طي\";e[\"ﳷ\"]=\"عى\";e[\"ﳸ\"]=\"عي\";e[\"ﳹ\"]=\"غى\";e[\"ﳺ\"]=\"غي\";e[\"ﳻ\"]=\"سى\";e[\"ﳼ\"]=\"سي\";e[\"ﳽ\"]=\"شى\";e[\"ﳾ\"]=\"شي\";e[\"ﳿ\"]=\"حى\";e[\"ﴀ\"]=\"حي\";e[\"ﴁ\"]=\"جى\";e[\"ﴂ\"]=\"جي\";e[\"ﴃ\"]=\"خى\";e[\"ﴄ\"]=\"خي\";e[\"ﴅ\"]=\"صى\";e[\"ﴆ\"]=\"صي\";e[\"ﴇ\"]=\"ضى\";e[\"ﴈ\"]=\"ضي\";e[\"ﴉ\"]=\"شج\";e[\"ﴊ\"]=\"شح\";e[\"ﴋ\"]=\"شخ\";e[\"ﴌ\"]=\"شم\";e[\"ﴍ\"]=\"شر\";e[\"ﴎ\"]=\"سر\";e[\"ﴏ\"]=\"صر\";e[\"ﴐ\"]=\"ضر\";e[\"ﴑ\"]=\"طى\";e[\"ﴒ\"]=\"طي\";e[\"ﴓ\"]=\"عى\";e[\"ﴔ\"]=\"عي\";e[\"ﴕ\"]=\"غى\";e[\"ﴖ\"]=\"غي\";e[\"ﴗ\"]=\"سى\";e[\"ﴘ\"]=\"سي\";e[\"ﴙ\"]=\"شى\";e[\"ﴚ\"]=\"شي\";e[\"ﴛ\"]=\"حى\";e[\"ﴜ\"]=\"حي\";e[\"ﴝ\"]=\"جى\";e[\"ﴞ\"]=\"جي\";e[\"ﴟ\"]=\"خى\";e[\"ﴠ\"]=\"خي\";e[\"ﴡ\"]=\"صى\";e[\"ﴢ\"]=\"صي\";e[\"ﴣ\"]=\"ضى\";e[\"ﴤ\"]=\"ضي\";e[\"ﴥ\"]=\"شج\";e[\"ﴦ\"]=\"شح\";e[\"ﴧ\"]=\"شخ\";e[\"ﴨ\"]=\"شم\";e[\"ﴩ\"]=\"شر\";e[\"ﴪ\"]=\"سر\";e[\"ﴫ\"]=\"صر\";e[\"ﴬ\"]=\"ضر\";e[\"ﴭ\"]=\"شج\";e[\"ﴮ\"]=\"شح\";e[\"ﴯ\"]=\"شخ\";e[\"ﴰ\"]=\"شم\";e[\"ﴱ\"]=\"سه\";e[\"ﴲ\"]=\"شه\";e[\"ﴳ\"]=\"طم\";e[\"ﴴ\"]=\"سج\";e[\"ﴵ\"]=\"سح\";e[\"ﴶ\"]=\"سخ\";e[\"ﴷ\"]=\"شج\";e[\"ﴸ\"]=\"شح\";e[\"ﴹ\"]=\"شخ\";e[\"ﴺ\"]=\"طم\";e[\"ﴻ\"]=\"ظم\";e[\"ﴼ\"]=\"اً\";e[\"ﴽ\"]=\"اً\";e[\"ﵐ\"]=\"تجم\";e[\"ﵑ\"]=\"تحج\";e[\"ﵒ\"]=\"تحج\";e[\"ﵓ\"]=\"تحم\";e[\"ﵔ\"]=\"تخم\";e[\"ﵕ\"]=\"تمج\";e[\"ﵖ\"]=\"تمح\";e[\"ﵗ\"]=\"تمخ\";e[\"ﵘ\"]=\"جمح\";e[\"ﵙ\"]=\"جمح\";e[\"ﵚ\"]=\"حمي\";e[\"ﵛ\"]=\"حمى\";e[\"ﵜ\"]=\"سحج\";e[\"ﵝ\"]=\"سجح\";e[\"ﵞ\"]=\"سجى\";e[\"ﵟ\"]=\"سمح\";e[\"ﵠ\"]=\"سمح\";e[\"ﵡ\"]=\"سمج\";e[\"ﵢ\"]=\"سمم\";e[\"ﵣ\"]=\"سمم\";e[\"ﵤ\"]=\"صحح\";e[\"ﵥ\"]=\"صحح\";e[\"ﵦ\"]=\"صمم\";e[\"ﵧ\"]=\"شحم\";e[\"ﵨ\"]=\"شحم\";e[\"ﵩ\"]=\"شجي\";e[\"ﵪ\"]=\"شمخ\";e[\"ﵫ\"]=\"شمخ\";e[\"ﵬ\"]=\"شمم\";e[\"ﵭ\"]=\"شمم\";e[\"ﵮ\"]=\"ضحى\";e[\"ﵯ\"]=\"ضخم\";e[\"ﵰ\"]=\"ضخم\";e[\"ﵱ\"]=\"طمح\";e[\"ﵲ\"]=\"طمح\";e[\"ﵳ\"]=\"طمم\";e[\"ﵴ\"]=\"طمي\";e[\"ﵵ\"]=\"عجم\";e[\"ﵶ\"]=\"عمم\";e[\"ﵷ\"]=\"عمم\";e[\"ﵸ\"]=\"عمى\";e[\"ﵹ\"]=\"غمم\";e[\"ﵺ\"]=\"غمي\";e[\"ﵻ\"]=\"غمى\";e[\"ﵼ\"]=\"فخم\";e[\"ﵽ\"]=\"فخم\";e[\"ﵾ\"]=\"قمح\";e[\"ﵿ\"]=\"قمم\";e[\"ﶀ\"]=\"لحم\";e[\"ﶁ\"]=\"لحي\";e[\"ﶂ\"]=\"لحى\";e[\"ﶃ\"]=\"لجج\";e[\"ﶄ\"]=\"لجج\";e[\"ﶅ\"]=\"لخم\";e[\"ﶆ\"]=\"لخم\";e[\"ﶇ\"]=\"لمح\";e[\"ﶈ\"]=\"لمح\";e[\"ﶉ\"]=\"محج\";e[\"ﶊ\"]=\"محم\";e[\"ﶋ\"]=\"محي\";e[\"ﶌ\"]=\"مجح\";e[\"ﶍ\"]=\"مجم\";e[\"ﶎ\"]=\"مخج\";e[\"ﶏ\"]=\"مخم\";e[\"ﶒ\"]=\"مجخ\";e[\"ﶓ\"]=\"همج\";e[\"ﶔ\"]=\"همم\";e[\"ﶕ\"]=\"نحم\";e[\"ﶖ\"]=\"نحى\";e[\"ﶗ\"]=\"نجم\";e[\"ﶘ\"]=\"نجم\";e[\"ﶙ\"]=\"نجى\";e[\"ﶚ\"]=\"نمي\";e[\"ﶛ\"]=\"نمى\";e[\"ﶜ\"]=\"يمم\";e[\"ﶝ\"]=\"يمم\";e[\"ﶞ\"]=\"بخي\";e[\"ﶟ\"]=\"تجي\";e[\"ﶠ\"]=\"تجى\";e[\"ﶡ\"]=\"تخي\";e[\"ﶢ\"]=\"تخى\";e[\"ﶣ\"]=\"تمي\";e[\"ﶤ\"]=\"تمى\";e[\"ﶥ\"]=\"جمي\";e[\"ﶦ\"]=\"جحى\";e[\"ﶧ\"]=\"جمى\";e[\"ﶨ\"]=\"سخى\";e[\"ﶩ\"]=\"صحي\";e[\"ﶪ\"]=\"شحي\";e[\"ﶫ\"]=\"ضحي\";e[\"ﶬ\"]=\"لجي\";e[\"ﶭ\"]=\"لمي\";e[\"ﶮ\"]=\"يحي\";e[\"ﶯ\"]=\"يجي\";e[\"ﶰ\"]=\"يمي\";e[\"ﶱ\"]=\"ممي\";e[\"ﶲ\"]=\"قمي\";e[\"ﶳ\"]=\"نحي\";e[\"ﶴ\"]=\"قمح\";e[\"ﶵ\"]=\"لحم\";e[\"ﶶ\"]=\"عمي\";e[\"ﶷ\"]=\"كمي\";e[\"ﶸ\"]=\"نجح\";e[\"ﶹ\"]=\"مخي\";e[\"ﶺ\"]=\"لجم\";e[\"ﶻ\"]=\"كمم\";e[\"ﶼ\"]=\"لجم\";e[\"ﶽ\"]=\"نجح\";e[\"ﶾ\"]=\"جحي\";e[\"ﶿ\"]=\"حجي\";e[\"ﷀ\"]=\"مجي\";e[\"ﷁ\"]=\"فمي\";e[\"ﷂ\"]=\"بحي\";e[\"ﷃ\"]=\"كمم\";e[\"ﷄ\"]=\"عجم\";e[\"ﷅ\"]=\"صمم\";e[\"ﷆ\"]=\"سخي\";e[\"ﷇ\"]=\"نجي\";e[\"﹉\"]=\"‾\";e[\"﹊\"]=\"‾\";e[\"﹋\"]=\"‾\";e[\"﹌\"]=\"‾\";e[\"﹍\"]=\"_\";e[\"﹎\"]=\"_\";e[\"﹏\"]=\"_\";e[\"ﺀ\"]=\"ء\";e[\"ﺁ\"]=\"آ\";e[\"ﺂ\"]=\"آ\";e[\"ﺃ\"]=\"أ\";e[\"ﺄ\"]=\"أ\";e[\"ﺅ\"]=\"ؤ\";e[\"ﺆ\"]=\"ؤ\";e[\"ﺇ\"]=\"إ\";e[\"ﺈ\"]=\"إ\";e[\"ﺉ\"]=\"ئ\";e[\"ﺊ\"]=\"ئ\";e[\"ﺋ\"]=\"ئ\";e[\"ﺌ\"]=\"ئ\";e[\"ﺍ\"]=\"ا\";e[\"ﺎ\"]=\"ا\";e[\"ﺏ\"]=\"ب\";e[\"ﺐ\"]=\"ب\";e[\"ﺑ\"]=\"ب\";e[\"ﺒ\"]=\"ب\";e[\"ﺓ\"]=\"ة\";e[\"ﺔ\"]=\"ة\";e[\"ﺕ\"]=\"ت\";e[\"ﺖ\"]=\"ت\";e[\"ﺗ\"]=\"ت\";e[\"ﺘ\"]=\"ت\";e[\"ﺙ\"]=\"ث\";e[\"ﺚ\"]=\"ث\";e[\"ﺛ\"]=\"ث\";e[\"ﺜ\"]=\"ث\";e[\"ﺝ\"]=\"ج\";e[\"ﺞ\"]=\"ج\";e[\"ﺟ\"]=\"ج\";e[\"ﺠ\"]=\"ج\";e[\"ﺡ\"]=\"ح\";e[\"ﺢ\"]=\"ح\";e[\"ﺣ\"]=\"ح\";e[\"ﺤ\"]=\"ح\";e[\"ﺥ\"]=\"خ\";e[\"ﺦ\"]=\"خ\";e[\"ﺧ\"]=\"خ\";e[\"ﺨ\"]=\"خ\";e[\"ﺩ\"]=\"د\";e[\"ﺪ\"]=\"د\";e[\"ﺫ\"]=\"ذ\";e[\"ﺬ\"]=\"ذ\";e[\"ﺭ\"]=\"ر\";e[\"ﺮ\"]=\"ر\";e[\"ﺯ\"]=\"ز\";e[\"ﺰ\"]=\"ز\";e[\"ﺱ\"]=\"س\";e[\"ﺲ\"]=\"س\";e[\"ﺳ\"]=\"س\";e[\"ﺴ\"]=\"س\";e[\"ﺵ\"]=\"ش\";e[\"ﺶ\"]=\"ش\";e[\"ﺷ\"]=\"ش\";e[\"ﺸ\"]=\"ش\";e[\"ﺹ\"]=\"ص\";e[\"ﺺ\"]=\"ص\";e[\"ﺻ\"]=\"ص\";e[\"ﺼ\"]=\"ص\";e[\"ﺽ\"]=\"ض\";e[\"ﺾ\"]=\"ض\";e[\"ﺿ\"]=\"ض\";e[\"ﻀ\"]=\"ض\";e[\"ﻁ\"]=\"ط\";e[\"ﻂ\"]=\"ط\";e[\"ﻃ\"]=\"ط\";e[\"ﻄ\"]=\"ط\";e[\"ﻅ\"]=\"ظ\";e[\"ﻆ\"]=\"ظ\";e[\"ﻇ\"]=\"ظ\";e[\"ﻈ\"]=\"ظ\";e[\"ﻉ\"]=\"ع\";e[\"ﻊ\"]=\"ع\";e[\"ﻋ\"]=\"ع\";e[\"ﻌ\"]=\"ع\";e[\"ﻍ\"]=\"غ\";e[\"ﻎ\"]=\"غ\";e[\"ﻏ\"]=\"غ\";e[\"ﻐ\"]=\"غ\";e[\"ﻑ\"]=\"ف\";e[\"ﻒ\"]=\"ف\";e[\"ﻓ\"]=\"ف\";e[\"ﻔ\"]=\"ف\";e[\"ﻕ\"]=\"ق\";e[\"ﻖ\"]=\"ق\";e[\"ﻗ\"]=\"ق\";e[\"ﻘ\"]=\"ق\";e[\"ﻙ\"]=\"ك\";e[\"ﻚ\"]=\"ك\";e[\"ﻛ\"]=\"ك\";e[\"ﻜ\"]=\"ك\";e[\"ﻝ\"]=\"ل\";e[\"ﻞ\"]=\"ل\";e[\"ﻟ\"]=\"ل\";e[\"ﻠ\"]=\"ل\";e[\"ﻡ\"]=\"م\";e[\"ﻢ\"]=\"م\";e[\"ﻣ\"]=\"م\";e[\"ﻤ\"]=\"م\";e[\"ﻥ\"]=\"ن\";e[\"ﻦ\"]=\"ن\";e[\"ﻧ\"]=\"ن\";e[\"ﻨ\"]=\"ن\";e[\"ﻩ\"]=\"ه\";e[\"ﻪ\"]=\"ه\";e[\"ﻫ\"]=\"ه\";e[\"ﻬ\"]=\"ه\";e[\"ﻭ\"]=\"و\";e[\"ﻮ\"]=\"و\";e[\"ﻯ\"]=\"ى\";e[\"ﻰ\"]=\"ى\";e[\"ﻱ\"]=\"ي\";e[\"ﻲ\"]=\"ي\";e[\"ﻳ\"]=\"ي\";e[\"ﻴ\"]=\"ي\";e[\"ﻵ\"]=\"لآ\";e[\"ﻶ\"]=\"لآ\";e[\"ﻷ\"]=\"لأ\";e[\"ﻸ\"]=\"لأ\";e[\"ﻹ\"]=\"لإ\";e[\"ﻺ\"]=\"لإ\";e[\"ﻻ\"]=\"لا\";e[\"ﻼ\"]=\"لا\"});function h(e){var t=e.length;if(t<=1||!l(e.charCodeAt(0))){return e}var r=\"\";for(var a=t-1;a>=0;a--){r+=e[a]}return r}e.mapSpecialUnicodeValues=i;e.reverseIfRtl=h;e.getUnicodeRangeFor=o;e.getNormalizedUnicodes=c;e.getUnicodeForGlyph=n});(function(e,t){t(e.pdfjsCoreStream={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreJbig2,e.pdfjsCoreJpg,e.pdfjsCoreJpx)})(this,function(e,t,r,a,i,n){var s=t.Util;var o=t.error;var l=t.info;var c=t.isInt;var h=t.isArray;var u=t.createObjectURL;var f=t.shadow;var d=t.warn;var g=t.isSpace;var v=r.Dict;var p=r.isDict;var m=r.isStream;var b=a.Jbig2Image;var y=i.JpegImage;var k=n.JpxImage;var w=function e(){function t(e,t,r,a){this.bytes=e instanceof Uint8Array?e:new Uint8Array(e);this.start=t||0;this.pos=this.start;this.end=t+r||this.bytes.length;this.dict=a}t.prototype={get length(){return this.end-this.start},get isEmpty(){return this.length===0},getByte:function e(){if(this.pos>=this.end){return-1}return this.bytes[this.pos++]},getUint16:function e(){var t=this.getByte();var r=this.getByte();if(t===-1||r===-1){return-1}return(t<<8)+r},getInt32:function e(){var t=this.getByte();var r=this.getByte();var a=this.getByte();var i=this.getByte();return(t<<24)+(r<<16)+(a<<8)+i},getBytes:function e(t){var r=this.bytes;var a=this.pos;var i=this.end;if(!t){return r.subarray(a,i)}var n=a+t;if(n>i){n=i}this.pos=n;return r.subarray(a,n)},peekByte:function e(){var t=this.getByte();this.pos--;return t},peekBytes:function e(t){var r=this.getBytes(t);this.pos-=r.length;return r},skip:function e(t){if(!t){t=1}this.pos+=t},reset:function e(){this.pos=this.start},moveStart:function e(){this.start=this.pos},makeSubStream:function e(r,a,i){return new t(this.bytes.buffer,r,a,i)},isStream:true};return t}();var C=function e(){function t(e){var t=e.length;var r=new Uint8Array(t);for(var a=0;a<t;++a){r[a]=e.charCodeAt(a)}w.call(this,r)}t.prototype=w.prototype;return t}();var x=function e(){var t=new Uint8Array(0);function r(e){this.pos=0;this.bufferLength=0;this.eof=false;this.buffer=t;this.minBufferLength=512;if(e){while(this.minBufferLength<e){this.minBufferLength*=2}}}r.prototype={get isEmpty(){while(!this.eof&&this.bufferLength===0){this.readBlock()}return this.bufferLength===0},ensureBuffer:function e(t){var r=this.buffer;if(t<=r.byteLength){return r}var a=this.minBufferLength;while(a<t){a*=2}var i=new Uint8Array(a);i.set(r);return this.buffer=i},getByte:function e(){var t=this.pos;while(this.bufferLength<=t){if(this.eof){return-1}this.readBlock()}return this.buffer[this.pos++]},getUint16:function e(){var t=this.getByte();var r=this.getByte();if(t===-1||r===-1){return-1}return(t<<8)+r},getInt32:function e(){var t=this.getByte();var r=this.getByte();var a=this.getByte();var i=this.getByte();return(t<<24)+(r<<16)+(a<<8)+i},getBytes:function e(t){var r,a=this.pos;if(t){this.ensureBuffer(a+t);r=a+t;while(!this.eof&&this.bufferLength<r){this.readBlock()}var i=this.bufferLength;if(r>i){r=i}}else{while(!this.eof){this.readBlock()}r=this.bufferLength}this.pos=r;return this.buffer.subarray(a,r)},peekByte:function e(){var t=this.getByte();this.pos--;return t},peekBytes:function e(t){var r=this.getBytes(t);this.pos-=r.length;return r},makeSubStream:function e(t,r,a){var i=t+r;while(this.bufferLength<=i&&!this.eof){this.readBlock()}return new w(this.buffer,t,r,a)},skip:function e(t){if(!t){t=1}this.pos+=t},reset:function e(){this.pos=0},getBaseStreams:function e(){if(this.str&&this.str.getBaseStreams){return this.str.getBaseStreams()}return[]}};return r}();var S=function e(){function t(e){this.streams=e;x.call(this,null)}t.prototype=Object.create(x.prototype);t.prototype.readBlock=function e(){var t=this.streams;if(t.length===0){this.eof=true;return}var r=t.shift();var a=r.getBytes();var i=this.bufferLength;var n=i+a.length;var s=this.ensureBuffer(n);s.set(a,i);this.bufferLength=n};t.prototype.getBaseStreams=function e(){var t=[];for(var r=0,a=this.streams.length;r<a;r++){var i=this.streams[r];if(i.getBaseStreams){s.appendToArray(t,i.getBaseStreams())}}return t};return t}();var A=function e(){var t=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);var r=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]);var a=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]);var i=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9];var n=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];function s(e,t){this.str=e;this.dict=e.dict;var r=e.getByte();var a=e.getByte();if(r===-1||a===-1){o(\"Invalid header in flate stream: \"+r+\", \"+a)}if((r&15)!==8){o(\"Unknown compression method in flate stream: \"+r+\", \"+a)}if(((r<<8)+a)%31!==0){o(\"Bad FCHECK in flate stream: \"+r+\", \"+a)}if(a&32){o(\"FDICT bit set in flate stream: \"+r+\", \"+a)}this.codeSize=0;this.codeBuf=0;x.call(this,t)}s.prototype=Object.create(x.prototype);s.prototype.getBits=function e(t){var r=this.str;var a=this.codeSize;var i=this.codeBuf;var n;while(a<t){if((n=r.getByte())===-1){o(\"Bad encoding in flate stream\")}i|=n<<a;a+=8}n=i&(1<<t)-1;this.codeBuf=i>>t;this.codeSize=a-=t;return n};s.prototype.getCode=function e(t){var r=this.str;var a=t[0];var i=t[1];var n=this.codeSize;var s=this.codeBuf;var l;while(n<i){if((l=r.getByte())===-1){break}s|=l<<n;n+=8}var c=a[s&(1<<i)-1];var h=c>>16;var u=c&65535;if(h<1||n<h){o(\"Bad encoding in flate stream\")}this.codeBuf=s>>h;this.codeSize=n-h;return u};s.prototype.generateHuffmanTable=function e(t){var r=t.length;var a=0;var i;for(i=0;i<r;++i){if(t[i]>a){a=t[i]}}var n=1<<a;var s=new Int32Array(n);for(var o=1,l=0,c=2;o<=a;++o,l<<=1,c<<=1){for(var h=0;h<r;++h){if(t[h]===o){var u=0;var f=l;for(i=0;i<o;++i){u=u<<1|f&1;f>>=1}for(i=u;i<n;i+=c){s[i]=o<<16|h}++l}}}return[s,a]};s.prototype.readBlock=function e(){var s,l;var c=this.str;var h=this.getBits(3);if(h&1){this.eof=true}h>>=1;if(h===0){var u;if((u=c.getByte())===-1){o(\"Bad block header in flate stream\")}var f=u;if((u=c.getByte())===-1){o(\"Bad block header in flate stream\")}f|=u<<8;if((u=c.getByte())===-1){o(\"Bad block header in flate stream\")}var d=u;if((u=c.getByte())===-1){o(\"Bad block header in flate stream\")}d|=u<<8;if(d!==(~f&65535)&&(f!==0||d!==0)){o(\"Bad uncompressed block length in flate stream\")}this.codeBuf=0;this.codeSize=0;var g=this.bufferLength;s=this.ensureBuffer(g+f);var v=g+f;this.bufferLength=v;if(f===0){if(c.peekByte()===-1){this.eof=true}}else{for(var p=g;p<v;++p){if((u=c.getByte())===-1){this.eof=true;break}s[p]=u}}return}var m;var b;if(h===1){m=i;b=n}else if(h===2){var y=this.getBits(5)+257;var k=this.getBits(5)+1;var w=this.getBits(4)+4;var C=new Uint8Array(t.length);var x;for(x=0;x<w;++x){C[t[x]]=this.getBits(3)}var S=this.generateHuffmanTable(C);l=0;x=0;var A=y+k;var I=new Uint8Array(A);var B,R,T;while(x<A){var O=this.getCode(S);if(O===16){B=2;R=3;T=l}else if(O===17){B=3;R=3;T=l=0}else if(O===18){B=7;R=11;T=l=0}else{I[x++]=l=O;continue}var P=this.getBits(B)+R;while(P-- >0){I[x++]=T}}m=this.generateHuffmanTable(I.subarray(0,y));b=this.generateHuffmanTable(I.subarray(y,A))}else{o(\"Unknown block type in flate stream\")}s=this.buffer;var E=s?s.length:0;var M=this.bufferLength;while(true){var L=this.getCode(m);if(L<256){if(M+1>=E){s=this.ensureBuffer(M+1);E=s.length}s[M++]=L;continue}if(L===256){this.bufferLength=M;return}L-=257;L=r[L];var D=L>>16;if(D>0){D=this.getBits(D)}l=(L&65535)+D;L=this.getCode(b);L=a[L];D=L>>16;if(D>0){D=this.getBits(D)}var F=(L&65535)+D;if(M+l>=E){s=this.ensureBuffer(M+l);E=s.length}for(var U=0;U<l;++U,++M){s[M]=s[M-F]}}};return s}();var I=function e(){function t(e,t,r){if(!p(r)){return e}var a=this.predictor=r.get(\"Predictor\")||1;if(a<=1){return e}if(a!==2&&(a<10||a>15)){o(\"Unsupported predictor: \"+a)}if(a===2){this.readBlock=this.readBlockTiff}else{this.readBlock=this.readBlockPng}this.str=e;this.dict=e.dict;var i=this.colors=r.get(\"Colors\")||1;var n=this.bits=r.get(\"BitsPerComponent\")||8;var s=this.columns=r.get(\"Columns\")||1;this.pixBytes=i*n+7>>3;this.rowBytes=s*i*n+7>>3;x.call(this,t);return this}t.prototype=Object.create(x.prototype);t.prototype.readBlockTiff=function e(){var t=this.rowBytes;var r=this.bufferLength;var a=this.ensureBuffer(r+t);var i=this.bits;var n=this.colors;var s=this.str.getBytes(t);this.eof=!s.length;if(this.eof){return}var o=0,l=0;var c=0,h=0;var u=r;var f;if(i===1&&n===1){for(f=0;f<t;++f){var d=s[f]^o;d^=d>>1;d^=d>>2;d^=d>>4;o=(d&1)<<7;a[u++]=d}}else if(i===8){for(f=0;f<n;++f){a[u++]=s[f]}for(;f<t;++f){a[u]=a[u-n]+s[f];u++}}else{var g=new Uint8Array(n+1);var v=(1<<i)-1;var p=0,m=r;var b=this.columns;for(f=0;f<b;++f){for(var y=0;y<n;++y){if(c<i){o=o<<8|s[p++]&255;c+=8}g[y]=g[y]+(o>>c-i)&v;c-=i;l=l<<i|g[y];h+=i;if(h>=8){a[m++]=l>>h-8&255;h-=8}}}if(h>0){a[m++]=(l<<8-h)+(o&(1<<8-h)-1)}}this.bufferLength+=t};t.prototype.readBlockPng=function e(){var t=this.rowBytes;var r=this.pixBytes;var a=this.str.getByte();var i=this.str.getBytes(t);this.eof=!i.length;if(this.eof){return}var n=this.bufferLength;var s=this.ensureBuffer(n+t);var l=s.subarray(n-t,n);if(l.length===0){l=new Uint8Array(t)}var c,h=n,u,f;switch(a){case 0:for(c=0;c<t;++c){s[h++]=i[c]}break;case 1:for(c=0;c<r;++c){s[h++]=i[c]}for(;c<t;++c){s[h]=s[h-r]+i[c]&255;h++}break;case 2:for(c=0;c<t;++c){s[h++]=l[c]+i[c]&255}break;case 3:for(c=0;c<r;++c){s[h++]=(l[c]>>1)+i[c]}for(;c<t;++c){s[h]=(l[c]+s[h-r]>>1)+i[c]&255;h++}break;case 4:for(c=0;c<r;++c){u=l[c];f=i[c];s[h++]=u+f}for(;c<t;++c){u=l[c];var d=l[c-r];var g=s[h-r];var v=g+u-d;var p=v-g;if(p<0){p=-p}var m=v-u;if(m<0){m=-m}var b=v-d;if(b<0){b=-b}f=i[c];if(p<=m&&p<=b){s[h++]=g+f}else if(m<=b){s[h++]=u+f}else{s[h++]=d+f}}break;default:o(\"Unsupported predictor: \"+a)}this.bufferLength+=t};return t}();var B=function e(){function t(e,t,r,a){var i;while((i=e.getByte())!==-1){if(i===255){e.skip(-1);break}}this.stream=e;this.maybeLength=t;this.dict=r;this.params=a;x.call(this,t)}t.prototype=Object.create(x.prototype);Object.defineProperty(t.prototype,\"bytes\",{get:function e(){return f(this,\"bytes\",this.stream.getBytes(this.maybeLength))},configurable:true});t.prototype.ensureBuffer=function e(t){if(this.bufferLength){return}var r=new y;var a=this.dict.getArray(\"Decode\",\"D\");if(this.forceRGB&&h(a)){var i=this.dict.get(\"BitsPerComponent\")||8;var n=a.length;var s=new Int32Array(n);var o=false;var l=(1<<i)-1;for(var u=0;u<n;u+=2){s[u]=(a[u+1]-a[u])*256|0;s[u+1]=a[u]*l|0;if(s[u]!==256||s[u+1]!==0){o=true}}if(o){r.decodeTransform=s}}if(p(this.params)){var f=this.params.get(\"ColorTransform\");if(c(f)){r.colorTransform=f}}r.parse(this.bytes);var d=r.getData(this.drawWidth,this.drawHeight,this.forceRGB);this.buffer=d;this.bufferLength=d.length;this.eof=true};t.prototype.getBytes=function e(t){this.ensureBuffer();return this.buffer};t.prototype.getIR=function e(t){return u(this.bytes,\"image/jpeg\",t)};return t}();var R=function e(){function t(e,t,r,a){this.stream=e;this.maybeLength=t;this.dict=r;this.params=a;x.call(this,t)}t.prototype=Object.create(x.prototype);Object.defineProperty(t.prototype,\"bytes\",{get:function e(){return f(this,\"bytes\",this.stream.getBytes(this.maybeLength))},configurable:true});t.prototype.ensureBuffer=function e(t){if(this.bufferLength){return}var r=new k;r.parse(this.bytes);var a=r.width;var i=r.height;var n=r.componentsCount;var s=r.tiles.length;if(s===1){this.buffer=r.tiles[0].items}else{var o=new Uint8Array(a*i*n);for(var l=0;l<s;l++){var c=r.tiles[l];var h=c.width;var u=c.height;var f=c.left;var d=c.top;var g=c.items;var v=0;var p=(a*d+f)*n;var m=a*n;var b=h*n;for(var y=0;y<u;y++){var w=g.subarray(v,v+b);o.set(w,p);v+=b;p+=m}}this.buffer=o}this.bufferLength=this.buffer.length;this.eof=true};return t}();var T=function e(){function t(e,t,r,a){this.stream=e;this.maybeLength=t;this.dict=r;this.params=a;x.call(this,t)}t.prototype=Object.create(x.prototype);Object.defineProperty(t.prototype,\"bytes\",{get:function e(){return f(this,\"bytes\",this.stream.getBytes(this.maybeLength))},configurable:true});t.prototype.ensureBuffer=function e(t){if(this.bufferLength){return}var r=new b;var a=[];if(p(this.params)){var i=this.params.get(\"JBIG2Globals\");if(m(i)){var n=i.getBytes();a.push({data:n,start:0,end:n.length})}}a.push({data:this.bytes,start:0,end:this.bytes.length});var s=r.parseChunks(a);var o=s.length;for(var l=0;l<o;l++){s[l]^=255}this.buffer=s;this.bufferLength=o;this.eof=true};return t}();var O=function e(){function t(e,t,r){this.str=e;this.dict=e.dict;this.decrypt=r;this.nextChunk=null;this.initialized=false;x.call(this,t)}var r=512;t.prototype=Object.create(x.prototype);t.prototype.readBlock=function e(){var t;if(this.initialized){t=this.nextChunk}else{t=this.str.getBytes(r);this.initialized=true}if(!t||t.length===0){this.eof=true;return}this.nextChunk=this.str.getBytes(r);var a=this.nextChunk&&this.nextChunk.length>0;var i=this.decrypt;t=i(t,!a);var n=this.bufferLength;var s,o=t.length;var l=this.ensureBuffer(n+o);for(s=0;s<o;s++){l[n++]=t[s]}this.bufferLength=n};return t}();var P=function e(){function t(e,t){this.str=e;this.dict=e.dict;this.input=new Uint8Array(5);if(t){t=.8*t}x.call(this,t)}t.prototype=Object.create(x.prototype);t.prototype.readBlock=function e(){var t=126;var r=122;var a=-1;var i=this.str;var n=i.getByte();while(g(n)){n=i.getByte()}if(n===a||n===t){this.eof=true;return}var s=this.bufferLength,o;var l;if(n===r){o=this.ensureBuffer(s+4);for(l=0;l<4;++l){o[s+l]=0}this.bufferLength+=4}else{var c=this.input;c[0]=n;for(l=1;l<5;++l){n=i.getByte();while(g(n)){n=i.getByte()}c[l]=n;if(n===a||n===t){break}}o=this.ensureBuffer(s+l-1);this.bufferLength+=l-1;if(l<5){for(;l<5;++l){c[l]=33+84}this.eof=true}var h=0;for(l=0;l<5;++l){h=h*85+(c[l]-33)}for(l=3;l>=0;--l){o[s+l]=h&255;h>>=8}}};return t}();var E=function e(){function t(e,t){this.str=e;this.dict=e.dict;this.firstDigit=-1;if(t){t=.5*t}x.call(this,t)}t.prototype=Object.create(x.prototype);t.prototype.readBlock=function e(){var t=8e3;var r=this.str.getBytes(t);if(!r.length){this.eof=true;return}var a=r.length+1>>1;var i=this.ensureBuffer(this.bufferLength+a);var n=this.bufferLength;var s=this.firstDigit;for(var o=0,l=r.length;o<l;o++){var c=r[o],h;if(c>=48&&c<=57){h=c&15}else if(c>=65&&c<=70||c>=97&&c<=102){h=(c&15)+9}else if(c===62){this.eof=true;break}else{continue}if(s<0){s=h}else{i[n++]=s<<4|h;s=-1}}if(s>=0&&this.eof){i[n++]=s<<4;s=-1}this.firstDigit=s;this.bufferLength=n};return t}();var M=function e(){function t(e,t){this.str=e;this.dict=e.dict;x.call(this,t)}t.prototype=Object.create(x.prototype);t.prototype.readBlock=function e(){var t=this.str.getBytes(2);if(!t||t.length<2||t[0]===128){this.eof=true;return}var r;var a=this.bufferLength;var i=t[0];if(i<128){r=this.ensureBuffer(a+i+1);r[a++]=t[1];if(i>0){var n=this.str.getBytes(i);r.set(n,a);a+=i}}else{i=257-i;var s=t[1];r=this.ensureBuffer(a+i+1);for(var o=0;o<i;o++){r[a++]=s}}this.bufferLength=a};return t}();var L=function e(){var t=-2;var r=-1;var a=0;var i=1;var n=2;var s=3;var o=4;var c=5;var h=6;var u=7;var f=8;var d=[[-1,-1],[-1,-1],[7,f],[7,u],[6,h],[6,h],[6,c],[6,c],[4,a],[4,a],[4,a],[4,a],[4,a],[4,a],[4,a],[4,a],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,i],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,o],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[3,s],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n],[1,n]];var g=[[-1,-1],[12,t],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]];var p=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]];var m=[[-1,-1],[-1,-1],[12,t],[12,t],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]];var b=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]];var y=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];function k(e,t,r){this.str=e;this.dict=e.dict;r=r||v.empty;this.encoding=r.get(\"K\")||0;this.eoline=r.get(\"EndOfLine\")||false;this.byteAlign=r.get(\"EncodedByteAlign\")||false;this.columns=r.get(\"Columns\")||1728;this.rows=r.get(\"Rows\")||0;var a=r.get(\"EndOfBlock\");if(a===null||a===undefined){a=true}this.eoblock=a;this.black=r.get(\"BlackIs1\")||false;this.codingLine=new Uint32Array(this.columns+1);this.refLine=new Uint32Array(this.columns+2);this.codingLine[0]=this.columns;this.codingPos=0;this.row=0;this.nextLine2D=this.encoding<0;this.inputBits=0;this.inputBuf=0;this.outputBits=0;var i;while((i=this.lookBits(12))===0){this.eatBits(1)}if(i===1){this.eatBits(12)}if(this.encoding>0){this.nextLine2D=!this.lookBits(1);this.eatBits(1)}x.call(this,t)}k.prototype=Object.create(x.prototype);k.prototype.readBlock=function e(){while(!this.eof){var t=this.lookChar();this.ensureBuffer(this.bufferLength+1);this.buffer[this.bufferLength++]=t}};k.prototype.addPixels=function e(t,r){var a=this.codingLine;var i=this.codingPos;if(t>a[i]){if(t>this.columns){l(\"row is wrong length\");this.err=true;t=this.columns}if(i&1^r){++i}a[i]=t}this.codingPos=i};k.prototype.addPixelsNeg=function e(t,r){var a=this.codingLine;var i=this.codingPos;if(t>a[i]){if(t>this.columns){l(\"row is wrong length\");this.err=true;t=this.columns}if(i&1^r){++i}a[i]=t}else if(t<a[i]){if(t<0){l(\"invalid code\");this.err=true;t=0}while(i>0&&t<a[i-1]){--i}a[i]=t}this.codingPos=i};k.prototype.lookChar=function e(){var t=this.refLine;var d=this.codingLine;var g=this.columns;var v,p,m,b;if(this.outputBits===0){if(this.eof){return null}this.err=false;var y,k,w;if(this.nextLine2D){for(b=0;d[b]<g;++b){t[b]=d[b]}t[b++]=g;t[b]=g;d[0]=0;this.codingPos=0;v=0;p=0;while(d[this.codingPos]<g){y=this.getTwoDimCode();switch(y){case a:this.addPixels(t[v+1],p);if(t[v+1]<g){v+=2}break;case i:y=k=0;if(p){do{y+=w=this.getBlackCode()}while(w>=64);do{k+=w=this.getWhiteCode()}while(w>=64)}else{do{y+=w=this.getWhiteCode()}while(w>=64);do{k+=w=this.getBlackCode()}while(w>=64)}this.addPixels(d[this.codingPos]+y,p);if(d[this.codingPos]<g){this.addPixels(d[this.codingPos]+k,p^1)}while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}break;case u:this.addPixels(t[v]+3,p);p^=1;if(d[this.codingPos]<g){++v;while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}}break;case c:this.addPixels(t[v]+2,p);p^=1;if(d[this.codingPos]<g){++v;while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}}break;case s:this.addPixels(t[v]+1,p);p^=1;if(d[this.codingPos]<g){++v;while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}}break;case n:this.addPixels(t[v],p);p^=1;if(d[this.codingPos]<g){++v;while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}}break;case f:this.addPixelsNeg(t[v]-3,p);p^=1;if(d[this.codingPos]<g){if(v>0){--v}else{++v}while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}}break;case h:this.addPixelsNeg(t[v]-2,p);p^=1;if(d[this.codingPos]<g){if(v>0){--v}else{++v}while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}}break;case o:this.addPixelsNeg(t[v]-1,p);p^=1;if(d[this.codingPos]<g){if(v>0){--v}else{++v}while(t[v]<=d[this.codingPos]&&t[v]<g){v+=2}}break;case r:this.addPixels(g,0);this.eof=true;break;default:l(\"bad 2d code\");this.addPixels(g,0);this.err=true}}}else{d[0]=0;this.codingPos=0;p=0;while(d[this.codingPos]<g){y=0;if(p){do{y+=w=this.getBlackCode()}while(w>=64)}else{do{y+=w=this.getWhiteCode()}while(w>=64)}this.addPixels(d[this.codingPos]+y,p);p^=1}}var C=false;if(this.byteAlign){this.inputBits&=~7}if(!this.eoblock&&this.row===this.rows-1){this.eof=true}else{y=this.lookBits(12);if(this.eoline){while(y!==r&&y!==1){this.eatBits(1);y=this.lookBits(12)}}else{while(y===0){this.eatBits(1);y=this.lookBits(12)}}if(y===1){this.eatBits(12);C=true}else if(y===r){this.eof=true}}if(!this.eof&&this.encoding>0){this.nextLine2D=!this.lookBits(1);this.eatBits(1)}if(this.eoblock&&C&&this.byteAlign){y=this.lookBits(12);if(y===1){this.eatBits(12);if(this.encoding>0){this.lookBits(1);this.eatBits(1)}if(this.encoding>=0){for(b=0;b<4;++b){y=this.lookBits(12);if(y!==1){l(\"bad rtc code: \"+y)}this.eatBits(12);if(this.encoding>0){this.lookBits(1);this.eatBits(1)}}}this.eof=true}}else if(this.err&&this.eoline){while(true){y=this.lookBits(13);if(y===r){this.eof=true;return null}if(y>>1===1){break}this.eatBits(1)}this.eatBits(12);if(this.encoding>0){this.eatBits(1);this.nextLine2D=!(y&1)}}if(d[0]>0){this.outputBits=d[this.codingPos=0]}else{this.outputBits=d[this.codingPos=1]}this.row++}var x;if(this.outputBits>=8){x=this.codingPos&1?0:255;this.outputBits-=8;if(this.outputBits===0&&d[this.codingPos]<g){this.codingPos++;this.outputBits=d[this.codingPos]-d[this.codingPos-1]}}else{m=8;x=0;do{if(this.outputBits>m){x<<=m;if(!(this.codingPos&1)){x|=255>>8-m}this.outputBits-=m;m=0}else{x<<=this.outputBits;if(!(this.codingPos&1)){x|=255>>8-this.outputBits}m-=this.outputBits;this.outputBits=0;if(d[this.codingPos]<g){this.codingPos++;this.outputBits=d[this.codingPos]-d[this.codingPos-1]}else if(m>0){x<<=m;m=0}}}while(m)}if(this.black){x^=255}return x};k.prototype.findTableCode=function e(t,a,i,n){var s=n||0;for(var o=t;o<=a;++o){var l=this.lookBits(o);if(l===r){return[true,1,false]}if(o<a){l<<=a-o}if(!s||l>=s){var c=i[l-s];if(c[0]===o){this.eatBits(o);return[true,c[1],true]}}}return[false,0,false]};k.prototype.getTwoDimCode=function e(){var t=0;var a;if(this.eoblock){t=this.lookBits(7);a=d[t];if(a&&a[0]>0){this.eatBits(a[0]);return a[1]}}else{var i=this.findTableCode(1,7,d);if(i[0]&&i[2]){return i[1]}}l(\"Bad two dim code\");return r};k.prototype.getWhiteCode=function e(){var t=0;var a;if(this.eoblock){t=this.lookBits(12);if(t===r){return 1}if(t>>5===0){a=g[t]}else{a=p[t>>3]}if(a[0]>0){this.eatBits(a[0]);return a[1]}}else{var i=this.findTableCode(1,9,p);if(i[0]){return i[1]}i=this.findTableCode(11,12,g);if(i[0]){return i[1]}}l(\"bad white code\");this.eatBits(1);return 1};k.prototype.getBlackCode=function e(){var t,a;if(this.eoblock){t=this.lookBits(13);if(t===r){return 1}if(t>>7===0){a=m[t]}else if(t>>9===0&&t>>7!==0){a=b[(t>>1)-64]}else{a=y[t>>7]}if(a[0]>0){this.eatBits(a[0]);return a[1]}}else{var i=this.findTableCode(2,6,y);if(i[0]){return i[1]}i=this.findTableCode(7,12,b,64);if(i[0]){return i[1]}i=this.findTableCode(10,13,m);if(i[0]){return i[1]}}l(\"bad black code\");this.eatBits(1);return 1};k.prototype.lookBits=function e(t){var a;while(this.inputBits<t){if((a=this.str.getByte())===-1){if(this.inputBits===0){return r}return this.inputBuf<<t-this.inputBits&65535>>16-t}this.inputBuf=this.inputBuf<<8|a;this.inputBits+=8}return this.inputBuf>>this.inputBits-t&65535>>16-t};k.prototype.eatBits=function e(t){if((this.inputBits-=t)<0){this.inputBits=0}};return k}();var D=function e(){function t(e,t,r){this.str=e;this.dict=e.dict;this.cachedData=0;this.bitsCached=0;var a=4096;var i={earlyChange:r,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(a),dictionaryLengths:new Uint16Array(a),dictionaryPrevCodes:new Uint16Array(a),currentSequence:new Uint8Array(a),currentSequenceLength:0};for(var n=0;n<256;++n){i.dictionaryValues[n]=n;i.dictionaryLengths[n]=1}this.lzwState=i;x.call(this,t)}t.prototype=Object.create(x.prototype);t.prototype.readBits=function e(t){var r=this.bitsCached;var a=this.cachedData;while(r<t){var i=this.str.getByte();if(i===-1){this.eof=true;return null}a=a<<8|i;r+=8}this.bitsCached=r-=t;this.cachedData=a;this.lastCode=null;return a>>>r&(1<<t)-1};t.prototype.readBlock=function e(){var t=512;var r=t*2,a=t;var i,n,s;var o=this.lzwState;if(!o){return}var l=o.earlyChange;var c=o.nextCode;var h=o.dictionaryValues;var u=o.dictionaryLengths;var f=o.dictionaryPrevCodes;var d=o.codeLength;var g=o.prevCode;var v=o.currentSequence;var p=o.currentSequenceLength;var m=0;var b=this.bufferLength;var y=this.ensureBuffer(this.bufferLength+r);for(i=0;i<t;i++){var k=this.readBits(d);var w=p>0;if(k<256){v[0]=k;p=1}else if(k>=258){if(k<c){p=u[k];for(n=p-1,s=k;n>=0;n--){v[n]=h[s];s=f[s]}}else{v[p++]=v[0]}}else if(k===256){d=9;c=258;p=0;continue}else{this.eof=true;delete this.lzwState;break}if(w){f[c]=g;u[c]=u[g]+1;h[c]=v[0];c++;d=c+l&c+l-1?d:Math.min(Math.log(c+l)/.6931471805599453+1,12)|0}g=k;m+=p;if(r<m){do{r+=a}while(r<m);y=this.ensureBuffer(this.bufferLength+r)}for(n=0;n<p;n++){y[b++]=v[n]}}o.nextCode=c;o.codeLength=d;o.prevCode=g;o.currentSequenceLength=p;this.bufferLength=b};return t}();var F=function e(){function t(){w.call(this,new Uint8Array(0))}t.prototype=w.prototype;return t}();e.Ascii85Stream=P;e.AsciiHexStream=E;e.CCITTFaxStream=L;e.DecryptStream=O;e.DecodeStream=x;e.FlateStream=A;e.Jbig2Stream=T;e.JpegStream=B;e.JpxStream=R;e.NullStream=F;e.PredictorStream=I;e.RunLengthStream=M;e.Stream=w;e.StreamsSequenceStream=S;e.StringStream=C;e.LZWStream=D});(function(e,t){t(e.pdfjsCoreCrypto={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreStream)})(this,function(e,t,r,a){var i=t.PasswordException;var n=t.PasswordResponses;var s=t.bytesToString;var o=t.warn;var l=t.error;var c=t.assert;var h=t.isInt;var u=t.stringToBytes;var f=t.utf8StringToString;var d=r.Name;var g=r.isName;var v=r.isDict;var p=a.DecryptStream;var m=function e(){function t(e){this.a=0;this.b=0;var t=new Uint8Array(256);var r,a=0,i,n=e.length;for(r=0;r<256;++r){t[r]=r}for(r=0;r<256;++r){i=t[r];a=a+i+e[r%n]&255;t[r]=t[a];t[a]=i}this.s=t}t.prototype={encryptBlock:function e(t){var r,a=t.length,i,n;var s=this.a,o=this.b,l=this.s;var c=new Uint8Array(a);for(r=0;r<a;++r){s=s+1&255;i=l[s];o=o+i&255;n=l[o];l[s]=n;l[o]=i;c[r]=t[r]^l[i+n&255]}this.a=s;this.b=o;return c}};t.prototype.decryptBlock=t.prototype.encryptBlock;return t}();var b=function e(){var t=new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]);var r=new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]);function a(e,a,i){var n=1732584193,s=-271733879,o=-1732584194,l=271733878;var c=i+72&~63;var h=new Uint8Array(c);var u,f,d;for(u=0;u<i;++u){h[u]=e[a++]}h[u++]=128;d=c-8;while(u<d){h[u++]=0}h[u++]=i<<3&255;h[u++]=i>>5&255;h[u++]=i>>13&255;h[u++]=i>>21&255;h[u++]=i>>>29&255;h[u++]=0;h[u++]=0;h[u++]=0;var g=new Int32Array(16);for(u=0;u<c;){for(f=0;f<16;++f,u+=4){g[f]=h[u]|h[u+1]<<8|h[u+2]<<16|h[u+3]<<24}var v=n,p=s,m=o,b=l,y,k;for(f=0;f<64;++f){if(f<16){y=p&m|~p&b;k=f}else if(f<32){y=b&p|~b&m;k=5*f+1&15}else if(f<48){y=p^m^b;k=3*f+5&15}else{y=m^(p|~b);k=7*f&15}var w=b,C=v+y+r[f]+g[k]|0,x=t[f];b=m;m=p;p=p+(C<<x|C>>>32-x)|0;v=w}n=n+v|0;s=s+p|0;o=o+m|0;l=l+b|0}return new Uint8Array([n&255,n>>8&255,n>>16&255,n>>>24&255,s&255,s>>8&255,s>>16&255,s>>>24&255,o&255,o>>8&255,o>>16&255,o>>>24&255,l&255,l>>8&255,l>>16&255,l>>>24&255])}return a}();var y=function e(){function t(e,t){this.high=e|0;this.low=t|0}t.prototype={and:function e(t){this.high&=t.high;this.low&=t.low},xor:function e(t){this.high^=t.high;this.low^=t.low},or:function e(t){this.high|=t.high;this.low|=t.low},shiftRight:function e(t){if(t>=32){this.low=this.high>>>t-32|0;this.high=0}else{this.low=this.low>>>t|this.high<<32-t;this.high=this.high>>>t|0}},shiftLeft:function e(t){if(t>=32){this.high=this.low<<t-32;this.low=0}else{this.high=this.high<<t|this.low>>>32-t;this.low=this.low<<t}},rotateRight:function e(t){var r,a;if(t&32){a=this.low;r=this.high}else{r=this.low;a=this.high}t&=31;this.low=r>>>t|a<<32-t;this.high=a>>>t|r<<32-t},not:function e(){this.high=~this.high;this.low=~this.low},add:function e(t){var r=(this.low>>>0)+(t.low>>>0);var a=(this.high>>>0)+(t.high>>>0);if(r>4294967295){a+=1}this.low=r|0;this.high=a|0},copyTo:function e(t,r){t[r]=this.high>>>24&255;t[r+1]=this.high>>16&255;t[r+2]=this.high>>8&255;t[r+3]=this.high&255;t[r+4]=this.low>>>24&255;t[r+5]=this.low>>16&255;t[r+6]=this.low>>8&255;t[r+7]=this.low&255},assign:function e(t){this.high=t.high;this.low=t.low}};return t}();var k=function e(){function t(e,t){return e>>>t|e<<32-t}function r(e,t,r){return e&t^~e&r}function a(e,t,r){return e&t^e&r^t&r}function i(e){return t(e,2)^t(e,13)^t(e,22)}function n(e){return t(e,6)^t(e,11)^t(e,25)}function s(e){return t(e,7)^t(e,18)^e>>>3}function o(e){return t(e,17)^t(e,19)^e>>>10}var l=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function c(e,t,c){var h=1779033703,u=3144134277,f=1013904242,d=2773480762,g=1359893119,v=2600822924,p=528734635,m=1541459225;var b=Math.ceil((c+9)/64)*64;var y=new Uint8Array(b);var k,w,C;for(k=0;k<c;++k){y[k]=e[t++]}y[k++]=128;C=b-8;while(k<C){y[k++]=0}y[k++]=0;y[k++]=0;y[k++]=0;y[k++]=c>>>29&255;y[k++]=c>>21&255;y[k++]=c>>13&255;y[k++]=c>>5&255;y[k++]=c<<3&255;var x=new Uint32Array(64);for(k=0;k<b;){for(w=0;w<16;++w){x[w]=y[k]<<24|y[k+1]<<16|y[k+2]<<8|y[k+3];k+=4}for(w=16;w<64;++w){x[w]=o(x[w-2])+x[w-7]+s(x[w-15])+x[w-16]|0}var S=h,A=u,I=f,B=d,R=g,T=v,O=p,P=m,E,M;for(w=0;w<64;++w){E=P+n(R)+r(R,T,O)+l[w]+x[w];M=i(S)+a(S,A,I);P=O;O=T;T=R;R=B+E|0;B=I;I=A;A=S;S=E+M|0}h=h+S|0;u=u+A|0;f=f+I|0;d=d+B|0;g=g+R|0;v=v+T|0;p=p+O|0;m=m+P|0}return new Uint8Array([h>>24&255,h>>16&255,h>>8&255,h&255,u>>24&255,u>>16&255,u>>8&255,u&255,f>>24&255,f>>16&255,f>>8&255,f&255,d>>24&255,d>>16&255,d>>8&255,d&255,g>>24&255,g>>16&255,g>>8&255,g&255,v>>24&255,v>>16&255,v>>8&255,v&255,p>>24&255,p>>16&255,p>>8&255,p&255,m>>24&255,m>>16&255,m>>8&255,m&255])}return c}();var w=function e(){function t(e,t,r,a,i){e.assign(t);e.and(r);i.assign(t);i.not();i.and(a);e.xor(i)}function r(e,t,r,a,i){e.assign(t);e.and(r);i.assign(t);i.and(a);e.xor(i);i.assign(r);i.and(a);e.xor(i)}function a(e,t,r){e.assign(t);e.rotateRight(28);r.assign(t);r.rotateRight(34);e.xor(r);r.assign(t);r.rotateRight(39);e.xor(r)}function i(e,t,r){e.assign(t);e.rotateRight(14);r.assign(t);r.rotateRight(18);e.xor(r);r.assign(t);r.rotateRight(41);e.xor(r)}function n(e,t,r){e.assign(t);e.rotateRight(1);r.assign(t);r.rotateRight(8);e.xor(r);r.assign(t);r.shiftRight(7);e.xor(r)}function s(e,t,r){e.assign(t);e.rotateRight(19);r.assign(t);r.rotateRight(61);e.xor(r);r.assign(t);r.shiftRight(6);e.xor(r)}var o=[new y(1116352408,3609767458),new y(1899447441,602891725),new y(3049323471,3964484399),new y(3921009573,2173295548),new y(961987163,4081628472),new y(1508970993,3053834265),new y(2453635748,2937671579),new y(2870763221,3664609560),new y(3624381080,2734883394),new y(310598401,1164996542),new y(607225278,1323610764),new y(1426881987,3590304994),new y(1925078388,4068182383),new y(2162078206,991336113),new y(2614888103,633803317),new y(3248222580,3479774868),new y(3835390401,2666613458),new y(4022224774,944711139),new y(264347078,2341262773),new y(604807628,2007800933),new y(770255983,1495990901),new y(1249150122,1856431235),new y(1555081692,3175218132),new y(1996064986,2198950837),new y(2554220882,3999719339),new y(2821834349,766784016),new y(2952996808,2566594879),new y(3210313671,3203337956),new y(3336571891,1034457026),new y(3584528711,2466948901),new y(113926993,3758326383),new y(338241895,168717936),new y(666307205,1188179964),new y(773529912,1546045734),new y(1294757372,1522805485),new y(1396182291,2643833823),new y(1695183700,2343527390),new y(1986661051,1014477480),new y(2177026350,1206759142),new y(2456956037,344077627),new y(2730485921,1290863460),new y(2820302411,3158454273),new y(3259730800,3505952657),new y(3345764771,106217008),new y(3516065817,3606008344),new y(3600352804,1432725776),new y(4094571909,1467031594),new y(275423344,851169720),new y(430227734,3100823752),new y(506948616,1363258195),new y(659060556,3750685593),new y(883997877,3785050280),new y(958139571,3318307427),new y(1322822218,3812723403),new y(1537002063,2003034995),new y(1747873779,3602036899),new y(1955562222,1575990012),new y(2024104815,1125592928),new y(2227730452,2716904306),new y(2361852424,442776044),new y(2428436474,593698344),new y(2756734187,3733110249),new y(3204031479,2999351573),new y(3329325298,3815920427),new y(3391569614,3928383900),new y(3515267271,566280711),new y(3940187606,3454069534),new y(4118630271,4000239992),new y(116418474,1914138554),new y(174292421,2731055270),new y(289380356,3203993006),new y(460393269,320620315),new y(685471733,587496836),new y(852142971,1086792851),new y(1017036298,365543100),new y(1126000580,2618297676),new y(1288033470,3409855158),new y(1501505948,4234509866),new y(1607167915,987167468),new y(1816402316,1246189591)];function l(e,l,c,h){h=!!h;var u,f,d,g,v,p,m,b;if(!h){u=new y(1779033703,4089235720);f=new y(3144134277,2227873595);d=new y(1013904242,4271175723);g=new y(2773480762,1595750129);v=new y(1359893119,2917565137);p=new y(2600822924,725511199);m=new y(528734635,4215389547);b=new y(1541459225,327033209)}else{u=new y(3418070365,3238371032);f=new y(1654270250,914150663);d=new y(2438529370,812702999);g=new y(355462360,4144912697);v=new y(1731405415,4290775857);p=new y(2394180231,1750603025);m=new y(3675008525,1694076839);b=new y(1203062813,3204075428)}var k=Math.ceil((c+17)/128)*128;var w=new Uint8Array(k);var C,x,S;for(C=0;C<c;++C){w[C]=e[l++]}w[C++]=128;S=k-16;while(C<S){w[C++]=0}w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=0;w[C++]=c>>>29&255;w[C++]=c>>21&255;w[C++]=c>>13&255;w[C++]=c>>5&255;w[C++]=c<<3&255;var A=new Array(80);for(C=0;C<80;C++){A[C]=new y(0,0)}var I=new y(0,0),B=new y(0,0),R=new y(0,0);var T=new y(0,0),O=new y(0,0),P=new y(0,0);var E=new y(0,0),M=new y(0,0);var L=new y(0,0),D=new y(0,0);var F=new y(0,0),U=new y(0,0),j;for(C=0;C<k;){for(x=0;x<16;++x){A[x].high=w[C]<<24|w[C+1]<<16|w[C+2]<<8|w[C+3];A[x].low=w[C+4]<<24|w[C+5]<<16|w[C+6]<<8|w[C+7];C+=8}for(x=16;x<80;++x){j=A[x];s(j,A[x-2],U);j.add(A[x-7]);n(F,A[x-15],U);j.add(F);j.add(A[x-16])}I.assign(u);B.assign(f);R.assign(d);T.assign(g);O.assign(v);P.assign(p);E.assign(m);M.assign(b);for(x=0;x<80;++x){L.assign(M);i(F,O,U);L.add(F);t(F,O,P,E,U);L.add(F);L.add(o[x]);L.add(A[x]);a(D,I,U);r(F,I,B,R,U);D.add(F);j=M;M=E;E=P;P=O;T.add(L);O=T;T=R;R=B;B=I;j.assign(L);j.add(D);I=j}u.add(I);f.add(B);d.add(R);g.add(T);v.add(O);p.add(P);m.add(E);b.add(M)}var q;if(!h){q=new Uint8Array(64);u.copyTo(q,0);f.copyTo(q,8);d.copyTo(q,16);g.copyTo(q,24);v.copyTo(q,32);p.copyTo(q,40);m.copyTo(q,48);b.copyTo(q,56)}else{q=new Uint8Array(48);u.copyTo(q,0);f.copyTo(q,8);d.copyTo(q,16);g.copyTo(q,24);v.copyTo(q,32);p.copyTo(q,40)}return q}return l}();var C=function e(){function t(e,t,r){return w(e,t,r,true)}return t}();var x=function e(){function t(){}t.prototype={decryptBlock:function e(t){return t}};return t}();var S=function e(){var t=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]);var r=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]);var a=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]);var i=new Uint8Array(256);for(var n=0;n<256;n++){if(n<128){i[n]=n<<1}else{i[n]=n<<1^27}}var s=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);function o(e){var a=176,i=new Uint8Array(a);i.set(e);for(var n=16,s=1;n<a;++s){var o=i[n-3],l=i[n-2],c=i[n-1],h=i[n-4];o=r[o];l=r[l];c=r[c];h=r[h];o=o^t[s];for(var u=0;u<4;++u){i[n]=o^=i[n-16];n++;i[n]=l^=i[n-16];n++;i[n]=c^=i[n-16];n++;i[n]=h^=i[n-16];n++}}return i}function l(e,t){var r=new Uint8Array(16);r.set(e);var i,n,o;var l,c,h;for(n=0,o=160;n<16;++n,++o){r[n]^=t[o]}for(i=9;i>=1;--i){l=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=l;l=r[14];c=r[10];r[14]=r[6];r[10]=r[2];r[6]=l;r[2]=c;l=r[15];c=r[11];h=r[7];r[15]=r[3];r[11]=l;r[7]=c;r[3]=h;for(n=0;n<16;++n){r[n]=a[r[n]]}for(n=0,o=i*16;n<16;++n,++o){r[n]^=t[o]}for(n=0;n<16;n+=4){var u=s[r[n]],f=s[r[n+1]],d=s[r[n+2]],g=s[r[n+3]];l=u^f>>>8^f<<24^d>>>16^d<<16^g>>>24^g<<8;r[n]=l>>>24&255;r[n+1]=l>>16&255;r[n+2]=l>>8&255;r[n+3]=l&255}}l=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=l;l=r[14];c=r[10];r[14]=r[6];r[10]=r[2];r[6]=l;r[2]=c;l=r[15];c=r[11];h=r[7];r[15]=r[3];r[11]=l;r[7]=c;r[3]=h;for(n=0;n<16;++n){r[n]=a[r[n]];r[n]^=t[n]}return r}function c(e,t){var a,s,o,l;var c=new Uint8Array(16);c.set(e);for(h=0;h<16;++h){c[h]^=t[h]}for(n=1;n<10;n++){for(h=0;h<16;++h){c[h]=r[c[h]]}o=c[1];c[1]=c[5];c[5]=c[9];c[9]=c[13];c[13]=o;o=c[2];s=c[6];c[2]=c[10];c[6]=c[14];c[10]=o;c[14]=s;o=c[3];s=c[7];a=c[11];c[3]=c[15];c[7]=o;c[11]=s;c[15]=a;for(var h=0;h<16;h+=4){var u=c[h+0],f=c[h+1];var d=c[h+2],g=c[h+3];a=u^f^d^g;c[h+0]^=a^i[u^f];c[h+1]^=a^i[f^d];c[h+2]^=a^i[d^g];c[h+3]^=a^i[g^u]}for(h=0,l=n*16;h<16;++h,++l){c[h]^=t[l]}}for(h=0;h<16;++h){c[h]=r[c[h]]}o=c[1];c[1]=c[5];c[5]=c[9];c[9]=c[13];c[13]=o;o=c[2];s=c[6];c[2]=c[10];c[6]=c[14];c[10]=o;c[14]=s;o=c[3];s=c[7];a=c[11];c[3]=c[15];c[7]=o;c[11]=s;c[15]=a;for(h=0,l=160;h<16;++h,++l){c[h]^=t[l]}return c}function h(e){this.key=o(e);this.buffer=new Uint8Array(16);this.bufferPosition=0}function u(e,t){var r,a,i,n=e.length,s=this.buffer,o=this.bufferPosition,c=[],h=this.iv;for(r=0;r<n;++r){s[o]=e[r];++o;if(o<16){continue}var u=l(s,this.key);for(a=0;a<16;++a){u[a]^=h[a]}h=s;c.push(u);s=new Uint8Array(16);o=0}this.buffer=s;this.bufferLength=o;this.iv=h;if(c.length===0){return new Uint8Array([])}var f=16*c.length;if(t){var d=c[c.length-1];var g=d[15];if(g<=16){for(r=15,i=16-g;r>=i;--r){if(d[r]!==g){g=0;break}}f-=g;c[c.length-1]=d.subarray(0,16-g)}}var v=new Uint8Array(f);for(r=0,a=0,i=c.length;r<i;++r,a+=16){v.set(c[r],a)}return v}h.prototype={decryptBlock:function e(t,r){var a,i=t.length;var n=this.buffer,s=this.bufferPosition;for(a=0;s<16&&a<i;++a,++s){n[s]=t[a]}if(s<16){this.bufferLength=s;return new Uint8Array([])}this.iv=n;this.buffer=new Uint8Array(16);this.bufferLength=0;this.decryptBlock=u;return this.decryptBlock(t.subarray(16),r)},encrypt:function e(t,r){var a,i,n,s=t.length,o=this.buffer,l=this.bufferPosition,h=[];if(!r){r=new Uint8Array(16)}for(a=0;a<s;++a){o[l]=t[a];++l;if(l<16){continue}for(i=0;i<16;++i){o[i]^=r[i]}var u=c(o,this.key);r=u;h.push(u);o=new Uint8Array(16);l=0}this.buffer=o;this.bufferLength=l;this.iv=r;if(h.length===0){return new Uint8Array([])}var f=16*h.length;var d=new Uint8Array(f);for(a=0,i=0,n=h.length;a<n;++a,i+=16){d.set(h[a],i)}return d}};return h}();var A=function e(){var t=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]);var r=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]);var a=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]);var i=new Uint8Array(256);for(var n=0;n<256;n++){if(n<128){i[n]=n<<1}else{i[n]=n<<1^27}}var s=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);function o(e){var t=240,a=new Uint8Array(t);var i=1;a.set(e);for(var n=32,s=1;n<t;++s){if(n%32===16){o=r[o];l=r[l];c=r[c];h=r[h]}else if(n%32===0){var o=a[n-3],l=a[n-2],c=a[n-1],h=a[n-4];o=r[o];l=r[l];c=r[c];h=r[h];o=o^i;if((i<<=1)>=256){i=(i^27)&255}}for(var u=0;u<4;++u){a[n]=o^=a[n-32];n++;a[n]=l^=a[n-32];n++;a[n]=c^=a[n-32];n++;a[n]=h^=a[n-32];n++}}return a}function l(e,t){var r=new Uint8Array(16);r.set(e);var i,n,o;var l,c,h;for(n=0,o=224;n<16;++n,++o){r[n]^=t[o]}for(i=13;i>=1;--i){l=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=l;l=r[14];c=r[10];r[14]=r[6];r[10]=r[2];r[6]=l;r[2]=c;l=r[15];c=r[11];h=r[7];r[15]=r[3];r[11]=l;r[7]=c;r[3]=h;for(n=0;n<16;++n){r[n]=a[r[n]]}for(n=0,o=i*16;n<16;++n,++o){r[n]^=t[o]}for(n=0;n<16;n+=4){var u=s[r[n]],f=s[r[n+1]],d=s[r[n+2]],g=s[r[n+3]];l=u^f>>>8^f<<24^d>>>16^d<<16^g>>>24^g<<8;r[n]=l>>>24&255;r[n+1]=l>>16&255;r[n+2]=l>>8&255;r[n+3]=l&255}}l=r[13];r[13]=r[9];r[9]=r[5];r[5]=r[1];r[1]=l;l=r[14];c=r[10];r[14]=r[6];r[10]=r[2];r[6]=l;r[2]=c;l=r[15];c=r[11];h=r[7];r[15]=r[3];r[11]=l;r[7]=c;r[3]=h;for(n=0;n<16;++n){r[n]=a[r[n]];r[n]^=t[n]}return r}function c(e,t){var a,s,o,l;var c=new Uint8Array(16);c.set(e);for(h=0;h<16;++h){c[h]^=t[h]}for(n=1;n<14;n++){for(h=0;h<16;++h){c[h]=r[c[h]]}o=c[1];c[1]=c[5];c[5]=c[9];c[9]=c[13];c[13]=o;o=c[2];s=c[6];c[2]=c[10];c[6]=c[14];c[10]=o;c[14]=s;o=c[3];s=c[7];a=c[11];c[3]=c[15];c[7]=o;c[11]=s;c[15]=a;for(var h=0;h<16;h+=4){var u=c[h+0],f=c[h+1];var d=c[h+2],g=c[h+3];a=u^f^d^g;c[h+0]^=a^i[u^f];c[h+1]^=a^i[f^d];c[h+2]^=a^i[d^g];c[h+3]^=a^i[g^u]}for(h=0,l=n*16;h<16;++h,++l){c[h]^=t[l]}}for(h=0;h<16;++h){c[h]=r[c[h]]}o=c[1];c[1]=c[5];c[5]=c[9];c[9]=c[13];c[13]=o;o=c[2];s=c[6];c[2]=c[10];c[6]=c[14];c[10]=o;c[14]=s;o=c[3];s=c[7];a=c[11];c[3]=c[15];c[7]=o;c[11]=s;c[15]=a;for(h=0,l=224;h<16;++h,++l){c[h]^=t[l]}return c}function h(e){this.key=o(e);this.buffer=new Uint8Array(16);this.bufferPosition=0}function u(e,t){var r,a,i,n=e.length,s=this.buffer,o=this.bufferPosition,c=[],h=this.iv;for(r=0;r<n;++r){s[o]=e[r];++o;if(o<16){continue}var u=l(s,this.key);for(a=0;a<16;++a){u[a]^=h[a]}h=s;c.push(u);s=new Uint8Array(16);o=0}this.buffer=s;this.bufferLength=o;this.iv=h;if(c.length===0){return new Uint8Array([])}var f=16*c.length;if(t){var d=c[c.length-1];var g=d[15];if(g<=16){for(r=15,i=16-g;r>=i;--r){if(d[r]!==g){g=0;break}}f-=g;c[c.length-1]=d.subarray(0,16-g)}}var v=new Uint8Array(f);for(r=0,a=0,i=c.length;r<i;++r,a+=16){v.set(c[r],a)}return v}h.prototype={decryptBlock:function e(t,r,a){var i,n=t.length;var s=this.buffer,o=this.bufferPosition;if(a){this.iv=a}else{for(i=0;o<16&&i<n;++i,++o){s[o]=t[i]}if(o<16){this.bufferLength=o;return new Uint8Array([])}this.iv=s;t=t.subarray(16)}this.buffer=new Uint8Array(16);this.bufferLength=0;this.decryptBlock=u;return this.decryptBlock(t,r)},encrypt:function e(t,r){var a,i,n,s=t.length,o=this.buffer,l=this.bufferPosition,h=[];if(!r){r=new Uint8Array(16)}for(a=0;a<s;++a){o[l]=t[a];++l;if(l<16){continue}for(i=0;i<16;++i){o[i]^=r[i]}var u=c(o,this.key);this.iv=u;h.push(u);o=new Uint8Array(16);l=0}this.buffer=o;this.bufferLength=l;this.iv=r;if(h.length===0){return new Uint8Array([])}var f=16*h.length;var d=new Uint8Array(f);for(a=0,i=0,n=h.length;a<n;++a,i+=16){d.set(h[a],i)}return d}};return h}();var I=function e(){function t(e,t){if(e.length!==t.length){return false}for(var r=0;r<e.length;r++){if(e[r]!==t[r]){return false}}return true}function r(){}r.prototype={checkOwnerPassword:function e(r,a,i,n){var s=new Uint8Array(r.length+56);s.set(r,0);s.set(a,r.length);s.set(i,r.length+a.length);var o=k(s,0,s.length);return t(o,n)},checkUserPassword:function e(r,a,i){var n=new Uint8Array(r.length+8);n.set(r,0);n.set(a,r.length);var s=k(n,0,n.length);return t(s,i)},getOwnerKey:function e(t,r,a,i){var n=new Uint8Array(t.length+56);n.set(t,0);n.set(r,t.length);n.set(a,t.length+r.length);var s=k(n,0,n.length);var o=new A(s);return o.decryptBlock(i,false,new Uint8Array(16))},getUserKey:function e(t,r,a){var i=new Uint8Array(t.length+8);i.set(t,0);i.set(r,t.length);var n=k(i,0,i.length);var s=new A(n);return s.decryptBlock(a,false,new Uint8Array(16))}};return r}();var B=function e(){function t(e,t){var r=new Uint8Array(e.length+t.length);r.set(e,0);r.set(t,e.length);return r}function r(e,r,a){var i=k(r,0,r.length).subarray(0,32);var n=[0];var s=0;while(s<64||n[n.length-1]>s-32){var o=e.length+i.length+a.length;var l=new Uint8Array(o*64);var c=t(e,i);c=t(c,a);for(var h=0,u=0;h<64;h++,u+=o){l.set(c,u)}var f=new S(i.subarray(0,16));n=f.encrypt(l,i.subarray(16,32));var d=0;for(var g=0;g<16;g++){d*=256%3;d%=3;d+=(n[g]>>>0)%3;d%=3}if(d===0){i=k(n,0,n.length)}else if(d===1){i=C(n,0,n.length)}else if(d===2){i=w(n,0,n.length)}s++}return i.subarray(0,32)}function a(){}function i(e,t){if(e.length!==t.length){return false}for(var r=0;r<e.length;r++){if(e[r]!==t[r]){return false}}return true}a.prototype={hash:function e(t,a,i){return r(t,a,i)},checkOwnerPassword:function e(t,a,n,s){var o=new Uint8Array(t.length+56);o.set(t,0);o.set(a,t.length);o.set(n,t.length+a.length);var l=r(t,o,n);return i(l,s)},checkUserPassword:function e(t,a,n){var s=new Uint8Array(t.length+8);s.set(t,0);s.set(a,t.length);var o=r(t,s,[]);return i(o,n)},getOwnerKey:function e(t,a,i,n){var s=new Uint8Array(t.length+56);s.set(t,0);s.set(a,t.length);s.set(i,t.length+a.length);var o=r(t,s,i);var l=new A(o);return l.decryptBlock(n,false,new Uint8Array(16))},getUserKey:function e(t,a,i){var n=new Uint8Array(t.length+8);n.set(t,0);n.set(a,t.length);var s=r(t,n,[]);var o=new A(s);return o.decryptBlock(i,false,new Uint8Array(16))}};return a}();var R=function e(){function t(e,t){this.StringCipherConstructor=e;this.StreamCipherConstructor=t}t.prototype={createStream:function e(t,r){var a=new this.StreamCipherConstructor;return new p(t,r,function e(t,r){return a.decryptBlock(t,r)})},decryptString:function e(t){var r=new this.StringCipherConstructor;var a=u(t);a=r.decryptBlock(a,true);return s(a)}};return t}();var T=function e(){var t=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function r(e,t,r,a,i,n,s,o,l,c,h,u){if(t){var f=Math.min(127,t.length);t=t.subarray(0,f)}else{t=[]}var d;if(e===6){d=new B}else{d=new I}if(d.checkUserPassword(t,o,s)){return d.getUserKey(t,l,h)}else if(t.length&&d.checkOwnerPassword(t,a,n,r)){return d.getOwnerKey(t,i,n,c)}return null}function a(e,r,a,i,n,s,o,l){var c=40+a.length+e.length;var h=new Uint8Array(c),u=0,f,d;if(r){d=Math.min(32,r.length);for(;u<d;++u){h[u]=r[u]}}f=0;while(u<32){h[u++]=t[f++]}for(f=0,d=a.length;f<d;++f){h[u++]=a[f]}h[u++]=n&255;h[u++]=n>>8&255;h[u++]=n>>16&255;h[u++]=n>>>24&255;for(f=0,d=e.length;f<d;++f){h[u++]=e[f]}if(s>=4&&!l){h[u++]=255;h[u++]=255;h[u++]=255;h[u++]=255}var g=b(h,0,u);var v=o>>3;if(s>=3){for(f=0;f<50;++f){g=b(g,0,v)}}var p=g.subarray(0,v);var y,k;if(s>=3){for(u=0;u<32;++u){h[u]=t[u]}for(f=0,d=e.length;f<d;++f){h[u++]=e[f]}y=new m(p);k=y.encryptBlock(b(h,0,u));d=p.length;var w=new Uint8Array(d),C;for(f=1;f<=19;++f){for(C=0;C<d;++C){w[C]=p[C]^f}y=new m(w);k=y.encryptBlock(k)}for(f=0,d=k.length;f<d;++f){if(i[f]!==k[f]){return null}}}else{y=new m(p);k=y.encryptBlock(t);for(f=0,d=k.length;f<d;++f){if(i[f]!==k[f]){return null}}}return p}function s(e,r,a,i){var n=new Uint8Array(32),s=0,o,l;l=Math.min(32,e.length);for(;s<l;++s){n[s]=e[s]}o=0;while(s<32){n[s++]=t[o++]}var c=b(n,0,s);var h=i>>3;if(a>=3){for(o=0;o<50;++o){c=b(c,0,c.length)}}var u,f;if(a>=3){f=r;var d=new Uint8Array(h),g;for(o=19;o>=0;o--){for(g=0;g<h;++g){d[g]=c[g]^o}u=new m(d);f=u.encryptBlock(f)}}else{u=new m(c.subarray(0,h));f=u.encryptBlock(r)}return f}var p=d.get(\"Identity\");function y(e,t,c){var d=e.get(\"Filter\");if(!g(d,\"Standard\")){l(\"unknown encryption method\")}this.dict=e;var m=e.get(\"V\");if(!h(m)||m!==1&&m!==2&&m!==4&&m!==5){l(\"unsupported encryption algorithm\")}this.algorithm=m;var b=e.get(\"Length\");if(!b){if(m<=3){b=40}else{var y=e.get(\"CF\");var k=e.get(\"StmF\");if(v(y)&&g(k)){y.suppressEncryption=true;var w=y.get(k.name);b=w&&w.get(\"Length\")||128;if(b<40){b<<=3}}}}if(!h(b)||b<40||b%8!==0){l(\"invalid key length\")}var C=u(e.get(\"O\")).subarray(0,32);var x=u(e.get(\"U\")).subarray(0,32);var S=e.get(\"P\");var A=e.get(\"R\");var I=(m===4||m===5)&&e.get(\"EncryptMetadata\")!==false;this.encryptMetadata=I;var B=u(t);var R;if(c){if(A===6){try{c=f(c)}catch(e){o(\"CipherTransformFactory: \"+\"Unable to convert UTF8 encoded password.\")}}R=u(c)}var T;if(m!==5){T=a(B,R,C,x,S,A,b,I)}else{var O=u(e.get(\"O\")).subarray(32,40);var P=u(e.get(\"O\")).subarray(40,48);var E=u(e.get(\"U\")).subarray(0,48);var M=u(e.get(\"U\")).subarray(32,40);var L=u(e.get(\"U\")).subarray(40,48);var D=u(e.get(\"OE\"));var F=u(e.get(\"UE\"));var U=u(e.get(\"Perms\"));T=r(A,R,C,O,P,E,x,M,L,D,F,U)}if(!T&&!c){throw new i(\"No password given\",n.NEED_PASSWORD)}else if(!T&&c){var j=s(R,C,A,b);T=a(B,j,C,x,S,A,b,I)}if(!T){throw new i(\"Incorrect Password\",n.INCORRECT_PASSWORD)}this.encryptionKey=T;if(m>=4){var q=e.get(\"CF\");if(v(q)){q.suppressEncryption=true}this.cf=q;this.stmf=e.get(\"StmF\")||p;this.strf=e.get(\"StrF\")||p;this.eff=e.get(\"EFF\")||this.stmf}}function k(e,t,r,a){var i=new Uint8Array(r.length+9),n,s;for(n=0,s=r.length;n<s;++n){i[n]=r[n]}i[n++]=e&255;i[n++]=e>>8&255;i[n++]=e>>16&255;i[n++]=t&255;i[n++]=t>>8&255;if(a){i[n++]=115;i[n++]=65;i[n++]=108;i[n++]=84}var o=b(i,0,n);return o.subarray(0,Math.min(r.length+5,16))}function w(e,t,r,a,i){c(g(t),\"Invalid crypt filter name.\");var n=e.get(t.name);var s;if(n!==null&&n!==undefined){s=n.get(\"CFM\")}if(!s||s.name===\"None\"){return function e(){return new x}}if(s.name===\"V2\"){return function e(){return new m(k(r,a,i,false))}}if(s.name===\"AESV2\"){return function e(){return new S(k(r,a,i,true))}}if(s.name===\"AESV3\"){return function e(){return new A(i)}}l(\"Unknown crypto method\")}y.prototype={createCipherTransform:function e(t,r){if(this.algorithm===4||this.algorithm===5){return new R(w(this.cf,this.stmf,t,r,this.encryptionKey),w(this.cf,this.strf,t,r,this.encryptionKey))}var a=k(t,r,this.encryptionKey,false);var i=function e(){return new m(a)};return new R(i,i)}};return y}();e.AES128Cipher=S;e.AES256Cipher=A;e.ARCFourCipher=m;e.CipherTransformFactory=T;e.PDF17=I;e.PDF20=B;e.calculateMD5=b;e.calculateSHA256=k;e.calculateSHA384=C;e.calculateSHA512=w});(function(e,t){t(e.pdfjsCoreFontRenderer={},e.pdfjsSharedUtil,e.pdfjsCoreStream,e.pdfjsCoreGlyphList,e.pdfjsCoreEncodings,e.pdfjsCoreCFFParser)})(this,function(e,t,r,a,i,n){var s=t.Util;var o=t.bytesToString;var l=t.error;var c=r.Stream;var h=a.getGlyphsUnicode;var u=i.StandardEncoding;var f=n.CFFParser;var d=function e(){function t(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]}function r(e,t){return e[t]<<8|e[t+1]}function a(e,a,i){var n=r(e,a+2)===1?t(e,a+8):t(e,a+16);var s=r(e,a+n);var o,c,h,u;if(s===4){o=r(e,a+n+2);var f=r(e,a+n+6)>>1;h=a+n+14;c=[];for(u=0;u<f;u++,h+=2){c[u]={end:r(e,h)}}h+=2;for(u=0;u<f;u++,h+=2){c[u].start=r(e,h)}for(u=0;u<f;u++,h+=2){c[u].idDelta=r(e,h)}for(u=0;u<f;u++,h+=2){var d=r(e,h);if(d===0){continue}c[u].ids=[];for(var g=0,v=c[u].end-c[u].start+1;g<v;g++){c[u].ids[g]=r(e,h+d);d+=2}}return c}else if(s===12){o=t(e,a+n+4);var p=t(e,a+n+12);h=a+n+16;c=[];for(u=0;u<p;u++){c.push({start:t(e,h),end:t(e,h+4),idDelta:t(e,h+8)-t(e,h)});h+=12}return c}l(\"not supported cmap: \"+s)}function i(e,t,r,a){var i={};var n=new f(new c(e,t,r-t),i,a);var s=n.parse();return{glyphs:s.charStrings.objects,subrs:s.topDict.privateDict&&s.topDict.privateDict.subrsIndex&&s.topDict.privateDict.subrsIndex.objects,gsubrs:s.globalSubrIndex&&s.globalSubrIndex.objects}}function n(e,t,r){var a,i;if(r){a=4;i=function e(t,r){return t[r]<<24|t[r+1]<<16|t[r+2]<<8|t[r+3]}}else{a=2;i=function e(t,r){return t[r]<<9|t[r+1]<<1}}var n=[];var s=i(t,0);for(var o=a;o<t.length;o+=a){var l=i(t,o);n.push(e.subarray(s,l));s=l}return n}function d(e,t){var r=t.charCodeAt(0),a=0;var i=0,n=e.length-1;while(i<n){var s=i+n+1>>1;if(r<e[s].start){n=s-1}else{i=s}}if(e[i].start<=r&&r<=e[i].end){a=e[i].idDelta+(e[i].ids?e[i].ids[r-e[i].start]:r)&65535}return{charCode:r,glyphId:a}}function g(e,t,r){function a(e,r){t.push({cmd:\"moveTo\",args:[e,r]})}function i(e,r){t.push({cmd:\"lineTo\",args:[e,r]})}function n(e,r,a,i){t.push({cmd:\"quadraticCurveTo\",args:[e,r,a,i]})}var s=0;var o=(e[s]<<24|e[s+1]<<16)>>16;var l;var c=0,h=0;s+=10;if(o<0){do{l=e[s]<<8|e[s+1];var u=e[s+2]<<8|e[s+3];s+=4;var f,d;if(l&1){f=(e[s]<<24|e[s+1]<<16)>>16;d=(e[s+2]<<24|e[s+3]<<16)>>16;s+=4}else{f=e[s++];d=e[s++]}if(l&2){c=f;h=d}else{c=0;h=0}var v=1,p=1,m=0,b=0;if(l&8){v=p=(e[s]<<24|e[s+1]<<16)/1073741824;s+=2}else if(l&64){v=(e[s]<<24|e[s+1]<<16)/1073741824;p=(e[s+2]<<24|e[s+3]<<16)/1073741824;s+=4}else if(l&128){v=(e[s]<<24|e[s+1]<<16)/1073741824;m=(e[s+2]<<24|e[s+3]<<16)/1073741824;b=(e[s+4]<<24|e[s+5]<<16)/1073741824;p=(e[s+6]<<24|e[s+7]<<16)/1073741824;s+=8}var y=r.glyphs[u];if(y){t.push({cmd:\"save\"});t.push({cmd:\"transform\",args:[v,m,b,p,c,h]});g(y,t,r);t.push({cmd:\"restore\"})}}while(l&32)}else{var k=[];var w,C;for(w=0;w<o;w++){k.push(e[s]<<8|e[s+1]);s+=2}var x=e[s]<<8|e[s+1];s+=2+x;var S=k[k.length-1]+1;var A=[];while(A.length<S){l=e[s++];var I=1;if(l&8){I+=e[s++]}while(I-- >0){A.push({flags:l})}}for(w=0;w<S;w++){switch(A[w].flags&18){case 0:c+=(e[s]<<24|e[s+1]<<16)>>16;s+=2;break;case 2:c-=e[s++];break;case 18:c+=e[s++];break}A[w].x=c}for(w=0;w<S;w++){switch(A[w].flags&36){case 0:h+=(e[s]<<24|e[s+1]<<16)>>16;s+=2;break;case 4:h-=e[s++];break;case 36:h+=e[s++];break}A[w].y=h}var B=0;for(s=0;s<o;s++){var R=k[s];var T=A.slice(B,R+1);if(T[0].flags&1){T.push(T[0])}else if(T[T.length-1].flags&1){T.unshift(T[T.length-1])}else{var O={flags:1,x:(T[0].x+T[T.length-1].x)/2,y:(T[0].y+T[T.length-1].y)/2};T.unshift(O);T.push(O)}a(T[0].x,T[0].y);for(w=1,C=T.length;w<C;w++){if(T[w].flags&1){i(T[w].x,T[w].y)}else if(T[w+1].flags&1){n(T[w].x,T[w].y,T[w+1].x,T[w+1].y);w++}else{n(T[w].x,T[w].y,(T[w].x+T[w+1].x)/2,(T[w].y+T[w+1].y)/2)}}B=R+1}}}function v(e,t,r){var a=[];var i=0,n=0;var s=0;function o(e,r){t.push({cmd:\"moveTo\",args:[e,r]})}function c(e,r){t.push({cmd:\"lineTo\",args:[e,r]})}function h(e,r,a,i,n,s){t.push({cmd:\"bezierCurveTo\",args:[e,r,a,i,n,s]})}function f(e){var g=0;while(g<e.length){var p=false;var m=e[g++];var b,y,k,w,C,x,S,A,I;switch(m){case 1:s+=a.length>>1;p=true;break;case 3:s+=a.length>>1;p=true;break;case 4:n+=a.pop();o(i,n);p=true;break;case 5:while(a.length>0){i+=a.shift();n+=a.shift();c(i,n)}break;case 6:while(a.length>0){i+=a.shift();c(i,n);if(a.length===0){break}n+=a.shift();c(i,n)}break;case 7:while(a.length>0){n+=a.shift();c(i,n);if(a.length===0){break}i+=a.shift();c(i,n)}break;case 8:while(a.length>0){b=i+a.shift();k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+a.shift();h(b,k,y,w,i,n)}break;case 10:A=a.pop()+r.subrsBias;I=r.subrs[A];if(I){f(I)}break;case 11:return;case 12:m=e[g++];switch(m){case 34:b=i+a.shift();y=b+a.shift();C=n+a.shift();i=y+a.shift();h(b,n,y,C,i,C);b=i+a.shift();y=b+a.shift();i=y+a.shift();h(b,C,y,n,i,n);break;case 35:b=i+a.shift();k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+a.shift();h(b,k,y,w,i,n);b=i+a.shift();k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+a.shift();h(b,k,y,w,i,n);a.pop();break;case 36:b=i+a.shift();C=n+a.shift();y=b+a.shift();x=C+a.shift();i=y+a.shift();h(b,C,y,x,i,x);b=i+a.shift();y=b+a.shift();S=x+a.shift();i=y+a.shift();h(b,x,y,S,i,n);break;case 37:var B=i,R=n;b=i+a.shift();k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+a.shift();h(b,k,y,w,i,n);b=i+a.shift();k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y;n=w;if(Math.abs(i-B)>Math.abs(n-R)){i+=a.shift()}else{n+=a.shift()}h(b,k,y,w,i,n);break;default:l(\"unknown operator: 12 \"+m)}break;case 14:if(a.length>=4){var T=a.pop();var O=a.pop();n=a.pop();i=a.pop();t.push({cmd:\"save\"});t.push({cmd:\"translate\",args:[i,n]});var P=d(r.cmap,String.fromCharCode(r.glyphNameMap[u[T]]));v(r.glyphs[P.glyphId],t,r);t.push({cmd:\"restore\"});P=d(r.cmap,String.fromCharCode(r.glyphNameMap[u[O]]));v(r.glyphs[P.glyphId],t,r)}return;case 18:s+=a.length>>1;p=true;break;case 19:s+=a.length>>1;g+=s+7>>3;p=true;break;case 20:s+=a.length>>1;g+=s+7>>3;p=true;break;case 21:n+=a.pop();i+=a.pop();o(i,n);p=true;break;case 22:i+=a.pop();o(i,n);p=true;break;case 23:s+=a.length>>1;p=true;break;case 24:while(a.length>2){b=i+a.shift();k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+a.shift();h(b,k,y,w,i,n)}i+=a.shift();n+=a.shift();c(i,n);break;case 25:while(a.length>6){i+=a.shift();n+=a.shift();c(i,n)}b=i+a.shift();k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+a.shift();h(b,k,y,w,i,n);break;case 26:if(a.length%2){i+=a.shift()}while(a.length>0){b=i;k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y;n=w+a.shift();h(b,k,y,w,i,n)}break;case 27:if(a.length%2){n+=a.shift()}while(a.length>0){b=i+a.shift();k=n;y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w;h(b,k,y,w,i,n)}break;case 28:a.push((e[g]<<24|e[g+1]<<16)>>16);g+=2;break;case 29:A=a.pop()+r.gsubrsBias;I=r.gsubrs[A];if(I){f(I)}break;case 30:while(a.length>0){b=i;k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+(a.length===1?a.shift():0);h(b,k,y,w,i,n);if(a.length===0){break}b=i+a.shift();k=n;y=b+a.shift();w=k+a.shift();n=w+a.shift();i=y+(a.length===1?a.shift():0);h(b,k,y,w,i,n)}break;case 31:while(a.length>0){b=i+a.shift();k=n;y=b+a.shift();w=k+a.shift();n=w+a.shift();i=y+(a.length===1?a.shift():0);h(b,k,y,w,i,n);if(a.length===0){break}b=i;k=n+a.shift();y=b+a.shift();w=k+a.shift();i=y+a.shift();n=w+(a.length===1?a.shift():0);h(b,k,y,w,i,n)}break;default:if(m<32){l(\"unknown operator: \"+m)}if(m<247){a.push(m-139)}else if(m<251){a.push((m-247)*256+e[g++]+108)}else if(m<255){a.push(-(m-251)*256-e[g++]-108)}else{a.push((e[g]<<24|e[g+1]<<16|e[g+2]<<8|e[g+3])/65536);g+=4}break}if(p){a.length=0}}}f(e)}var p=\"\";function m(e){this.compiledGlyphs=Object.create(null);this.compiledCharCodeToGlyphId=Object.create(null);this.fontMatrix=e}m.prototype={getPathJs:function(e){var t=d(this.cmap,e);var r=this.compiledGlyphs[t.glyphId];if(!r){r=this.compileGlyph(this.glyphs[t.glyphId]);this.compiledGlyphs[t.glyphId]=r}if(this.compiledCharCodeToGlyphId[t.charCode]===undefined){this.compiledCharCodeToGlyphId[t.charCode]=t.glyphId}return r},compileGlyph:function(e){if(!e||e.length===0||e[0]===14){return p}var t=[];t.push({cmd:\"save\"});t.push({cmd:\"transform\",args:this.fontMatrix.slice()});t.push({cmd:\"scale\",args:[\"size\",\"-size\"]});this.compileGlyphImpl(e,t);t.push({cmd:\"restore\"});return t},compileGlyphImpl:function(){l(\"Children classes should implement this.\")},hasBuiltPath:function(e){var t=d(this.cmap,e);return this.compiledGlyphs[t.glyphId]!==undefined&&this.compiledCharCodeToGlyphId[t.charCode]!==undefined}};function b(e,t,r){r=r||[488e-6,0,0,488e-6,0,0];m.call(this,r);this.glyphs=e;this.cmap=t}s.inherit(b,m,{compileGlyphImpl:function(e,t){g(e,t,this)}});function y(e,t,r,a){r=r||[.001,0,0,.001,0,0];m.call(this,r);this.glyphs=e.glyphs;this.gsubrs=e.gsubrs||[];this.subrs=e.subrs||[];this.cmap=t;this.glyphNameMap=a||h();this.gsubrsBias=this.gsubrs.length<1240?107:this.gsubrs.length<33900?1131:32768;this.subrsBias=this.subrs.length<1240?107:this.subrs.length<33900?1131:32768}s.inherit(y,m,{compileGlyphImpl:function(e,t){v(e,t,this)}});return{create:function e(s,l){var c=new Uint8Array(s.data);var h,u,f,d,g,v;var p=r(c,4);for(var m=0,k=12;m<p;m++,k+=16){var w=o(c.subarray(k,k+4));var C=t(c,k+8);var x=t(c,k+12);switch(w){case\"cmap\":h=a(c,C,C+x);break;case\"glyf\":u=c.subarray(C,C+x);break;case\"loca\":f=c.subarray(C,C+x);break;case\"head\":v=r(c,C+18);g=r(c,C+50);break;case\"CFF \":d=i(c,C,C+x,l);break}}if(u){var S=!v?s.fontMatrix:[1/v,0,0,1/v,0,0];return new b(n(u,f,g),h,S)}return new y(d,h,s.fontMatrix,s.glyphNameMap)}}}();e.FontRendererFactory=d});(function(e,t){t(e.pdfjsCoreParser={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreStream)})(this,function(e,t,r,a){var i=t.MissingDataException;var n=t.StreamType;var s=t.assert;var o=t.error;var l=t.info;var c=t.isArray;var h=t.isInt;var u=t.isNum;var f=t.isString;var d=t.warn;var g=r.Cmd;var v=r.Dict;var p=r.Name;var m=r.Ref;var b=r.isCmd;var y=r.isDict;var k=r.isName;var w=a.Ascii85Stream;var C=a.AsciiHexStream;var x=a.CCITTFaxStream;var S=a.FlateStream;var A=a.Jbig2Stream;var I=a.JpegStream;var B=a.JpxStream;var R=a.LZWStream;var T=a.NullStream;var O=a.PredictorStream;var P=a.RunLengthStream;var E={};function M(e){return e===E}var L=1e3;var D=function e(){function t(e,t,r,a){this.lexer=e;this.allowStreams=t;this.xref=r;this.recoveryMode=a||false;this.imageCache=Object.create(null);this.refill()}t.prototype={refill:function e(){this.buf1=this.lexer.getObj();this.buf2=this.lexer.getObj()},shift:function e(){if(b(this.buf2,\"ID\")){this.buf1=this.buf2;this.buf2=null}else{this.buf1=this.buf2;this.buf2=this.lexer.getObj()}},tryShift:function e(){try{this.shift();return true}catch(e){if(e instanceof i){throw e}return false}},getObj:function e(t){var r=this.buf1;this.shift();if(r instanceof g){switch(r.cmd){case\"BI\":return this.makeInlineImage(t);case\"[\":var a=[];while(!b(this.buf1,\"]\")&&!M(this.buf1)){a.push(this.getObj(t))}if(M(this.buf1)){if(!this.recoveryMode){o(\"End of file inside array\")}return a}this.shift();return a;case\"<<\":var i=new v(this.xref);while(!b(this.buf1,\">>\")&&!M(this.buf1)){if(!k(this.buf1)){l(\"Malformed dictionary: key must be a name object\");this.shift();continue}var n=this.buf1.name;this.shift();if(M(this.buf1)){break}i.set(n,this.getObj(t))}if(M(this.buf1)){if(!this.recoveryMode){o(\"End of file inside dictionary\")}return i}if(b(this.buf2,\"stream\")){return this.allowStreams?this.makeStream(i,t):i}this.shift();return i;default:return r}}if(h(r)){var s=r;if(h(this.buf1)&&b(this.buf2,\"R\")){var c=new m(s,this.buf1);this.shift();this.shift();return c}return s}if(f(r)){var u=r;if(t){u=t.decryptString(u)}return u}return r},findDefaultInlineStreamEnd:function e(t){var r=69,a=73,i=32,n=10,o=13;var l=t.pos,c=0,h,u,f,d;while((h=t.getByte())!==-1){if(c===0){c=h===r?1:0}else if(c===1){c=h===a?2:0}else{s(c===2);if(h===i||h===n||h===o){f=5;d=t.peekBytes(f);for(u=0;u<f;u++){h=d[u];if(h!==n&&h!==o&&(h<i||h>127)){c=0;break}}if(c===2){break}}else{c=0}}}return t.pos-4-l},findDCTDecodeInlineStreamEnd:function e(t){var r=t.pos,a=false,i,n,s;while((i=t.getByte())!==-1){if(i!==255){continue}switch(t.getByte()){case 0:break;case 255:t.skip(-1);break;case 217:a=true;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:n=t.getUint16();if(n>2){t.skip(n-2)}else{t.skip(-2)}break}if(a){break}}s=t.pos-r;if(i===-1){d(\"Inline DCTDecode image stream: \"+\"EOI marker not found, searching for /EI/ instead.\");t.skip(-s);return this.findDefaultInlineStreamEnd(t)}this.inlineStreamSkipEI(t);return s},findASCII85DecodeInlineStreamEnd:function e(t){var r=126,a=62;var i=t.pos,n,s;while((n=t.getByte())!==-1){if(n===r&&t.peekByte()===a){t.skip();break}}s=t.pos-i;if(n===-1){d(\"Inline ASCII85Decode image stream: \"+\"EOD marker not found, searching for /EI/ instead.\");t.skip(-s);return this.findDefaultInlineStreamEnd(t)}this.inlineStreamSkipEI(t);return s},findASCIIHexDecodeInlineStreamEnd:function e(t){var r=62;var a=t.pos,i,n;while((i=t.getByte())!==-1){if(i===r){break}}n=t.pos-a;if(i===-1){d(\"Inline ASCIIHexDecode image stream: \"+\"EOD marker not found, searching for /EI/ instead.\");t.skip(-n);return this.findDefaultInlineStreamEnd(t)}this.inlineStreamSkipEI(t);return n},inlineStreamSkipEI:function e(t){var r=69,a=73;var i=0,n;while((n=t.getByte())!==-1){if(i===0){i=n===r?1:0}else if(i===1){i=n===a?2:0}else if(i===2){break}}},makeInlineImage:function e(t){var r=this.lexer;var a=r.stream;var i=new v(this.xref);while(!b(this.buf1,\"ID\")&&!M(this.buf1)){if(!k(this.buf1)){o(\"Dictionary key must be a name object\")}var n=this.buf1.name;this.shift();if(M(this.buf1)){break}i.set(n,this.getObj(t))}var s=i.get(\"Filter\",\"F\"),l;if(k(s)){l=s.name}else if(c(s)){var h=this.xref.fetchIfRef(s[0]);if(k(h)){l=h.name}}var u=a.pos,f,d,p;if(l===\"DCTDecode\"||l===\"DCT\"){f=this.findDCTDecodeInlineStreamEnd(a)}else if(l===\"ASCII85Decide\"||l===\"A85\"){f=this.findASCII85DecodeInlineStreamEnd(a)}else if(l===\"ASCIIHexDecode\"||l===\"AHx\"){f=this.findASCIIHexDecodeInlineStreamEnd(a)}else{f=this.findDefaultInlineStreamEnd(a)}var m=a.makeSubStream(u,f,i);var y;if(f<L){var w=m.getBytes();m.reset();var C=1;var x=0;for(d=0,p=w.length;d<p;++d){C+=w[d]&255;x+=C}y=x%65521<<16|C%65521;if(this.imageCache.adler32===y){this.buf2=g.get(\"EI\");this.shift();this.imageCache[y].reset();return this.imageCache[y]}}if(t){m=t.createStream(m,f)}m=this.filter(m,i,f);m.dict=i;if(y!==undefined){m.cacheKey=\"inline_\"+f+\"_\"+y;this.imageCache[y]=m}this.buf2=g.get(\"EI\");this.shift();return m},makeStream:function e(t,r){var a=this.lexer;var i=a.stream;a.skipToNextLine();var n=i.pos-1;var s=t.get(\"Length\");if(!h(s)){l(\"Bad \"+s+\" attribute in stream\");s=0}i.pos=n+s;a.nextChar();if(this.tryShift()&&b(this.buf2,\"endstream\")){this.shift()}else{i.pos=n;var c=2048;var u=9;var f=[101,110,100,115,116,114,101,97,109];var d=0,g=false,v,p;while(i.pos<i.end){var m=i.peekBytes(c);var y=m.length-u;if(y<=0){break}g=false;v=0;while(v<y){p=0;while(p<u&&m[v+p]===f[p]){p++}if(p>=u){g=true;break}v++}if(g){d+=v;i.pos+=v;break}d+=y;i.pos+=y}if(!g){o(\"Missing endstream\")}s=d;a.nextChar();this.shift();this.shift()}this.shift();i=i.makeSubStream(n,s,t);if(r){i=r.createStream(i,s)}i=this.filter(i,t,s);i.dict=t;return i},filter:function e(t,r,a){var i=r.get(\"Filter\",\"F\");var n=r.get(\"DecodeParms\",\"DP\");if(k(i)){if(c(n)){n=this.xref.fetchIfRef(n[0])}return this.makeFilter(t,i.name,a,n)}var s=a;if(c(i)){var l=i;var h=n;for(var u=0,f=l.length;u<f;++u){i=this.xref.fetchIfRef(l[u]);if(!k(i)){o(\"Bad filter name: \"+i)}n=null;if(c(h)&&u in h){n=this.xref.fetchIfRef(h[u])}t=this.makeFilter(t,i.name,s,n);s=null}}return t},makeFilter:function e(t,r,a,s){if(a===0){d('Empty \"'+r+'\" stream.');return new T(t)}try{var o=this.xref.stats.streamTypes;if(r===\"FlateDecode\"||r===\"Fl\"){o[n.FLATE]=true;if(s){return new O(new S(t,a),a,s)}return new S(t,a)}if(r===\"LZWDecode\"||r===\"LZW\"){o[n.LZW]=true;var l=1;if(s){if(s.has(\"EarlyChange\")){l=s.get(\"EarlyChange\")}return new O(new R(t,a,l),a,s)}return new R(t,a,l)}if(r===\"DCTDecode\"||r===\"DCT\"){o[n.DCT]=true;return new I(t,a,t.dict,s)}if(r===\"JPXDecode\"||r===\"JPX\"){o[n.JPX]=true;return new B(t,a,t.dict,s)}if(r===\"ASCII85Decode\"||r===\"A85\"){o[n.A85]=true;return new w(t,a)}if(r===\"ASCIIHexDecode\"||r===\"AHx\"){o[n.AHX]=true;return new C(t,a)}if(r===\"CCITTFaxDecode\"||r===\"CCF\"){o[n.CCF]=true;return new x(t,a,s)}if(r===\"RunLengthDecode\"||r===\"RL\"){o[n.RL]=true;return new P(t,a)}if(r===\"JBIG2Decode\"){o[n.JBIG]=true;return new A(t,a,t.dict,s)}d('filter \"'+r+'\" not supported yet');return t}catch(e){if(e instanceof i){throw e}d('Invalid stream: \"'+e+'\"');return new T(t)}}};return t}();var F=function e(){function t(e,t){this.stream=e;this.nextChar();this.strBuf=[];this.knownCommands=t}var r=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];function a(e){if(e>=48&&e<=57){return e&15}if(e>=65&&e<=70||e>=97&&e<=102){return(e&15)+9}return-1}t.prototype={nextChar:function e(){return this.currentChar=this.stream.getByte()},peekChar:function e(){return this.stream.peekByte()},getNumber:function e(){var t=this.currentChar;var r=false;var a=0;var i=1;if(t===45){i=-1;t=this.nextChar();if(t===45){t=this.nextChar()}}else if(t===43){t=this.nextChar()}if(t===46){a=10;t=this.nextChar()}if(t<48||t>57){o(\"Invalid number: \"+String.fromCharCode(t));return 0}var n=t-48;var s=0;var l=1;while((t=this.nextChar())>=0){if(48<=t&&t<=57){var c=t-48;if(r){s=s*10+c}else{if(a!==0){a*=10}n=n*10+c}}else if(t===46){if(a===0){a=1}else{break}}else if(t===45){d(\"Badly formatted number\")}else if(t===69||t===101){t=this.peekChar();if(t===43||t===45){l=t===45?-1:1;this.nextChar()}else if(t<48||t>57){break}r=true}else{break}}if(a!==0){n/=a}if(r){n*=Math.pow(10,l*s)}return i*n},getString:function e(){var t=1;var r=false;var a=this.strBuf;a.length=0;var i=this.nextChar();while(true){var n=false;switch(i|0){case-1:d(\"Unterminated string\");r=true;break;case 40:++t;a.push(\"(\");break;case 41:if(--t===0){this.nextChar();r=true}else{a.push(\")\")}break;case 92:i=this.nextChar();switch(i){case-1:d(\"Unterminated string\");r=true;break;case 110:a.push(\"\\n\");break;case 114:a.push(\"\\r\");break;case 116:a.push(\"\\t\");break;case 98:a.push(\"\\b\");break;case 102:a.push(\"\\f\");break;case 92:case 40:case 41:a.push(String.fromCharCode(i));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:var s=i&15;i=this.nextChar();n=true;if(i>=48&&i<=55){s=(s<<3)+(i&15);i=this.nextChar();if(i>=48&&i<=55){n=false;s=(s<<3)+(i&15)}}a.push(String.fromCharCode(s));break;case 13:if(this.peekChar()===10){this.nextChar()}break;case 10:break;default:a.push(String.fromCharCode(i));break}break;default:a.push(String.fromCharCode(i));break}if(r){break}if(!n){i=this.nextChar()}}return a.join(\"\")},getName:function e(){var t,i;var n=this.strBuf;n.length=0;while((t=this.nextChar())>=0&&!r[t]){if(t===35){t=this.nextChar();if(r[t]){d(\"Lexer_getName: \"+\"NUMBER SIGN (#) should be followed by a hexadecimal number.\");n.push(\"#\");break}var s=a(t);if(s!==-1){i=t;t=this.nextChar();var o=a(t);if(o===-1){d(\"Lexer_getName: Illegal digit (\"+String.fromCharCode(t)+\") in hexadecimal number.\");n.push(\"#\",String.fromCharCode(i));if(r[t]){break}n.push(String.fromCharCode(t));continue}n.push(String.fromCharCode(s<<4|o))}else{n.push(\"#\",String.fromCharCode(t))}}else{n.push(String.fromCharCode(t))}}if(n.length>127){d(\"name token is longer than allowed by the spec: \"+n.length)}return p.get(n.join(\"\"))},getHexString:function e(){var t=this.strBuf;t.length=0;var i=this.currentChar;var n=true;var s;var o;while(true){if(i<0){d(\"Unterminated hex string\");break}else if(i===62){this.nextChar();break}else if(r[i]===1){i=this.nextChar();continue}else{if(n){s=a(i);if(s===-1){d('Ignoring invalid character \"'+i+'\" in hex string');i=this.nextChar();continue}}else{o=a(i);if(o===-1){d('Ignoring invalid character \"'+i+'\" in hex string');i=this.nextChar();continue}t.push(String.fromCharCode(s<<4|o))}n=!n;i=this.nextChar()}}return t.join(\"\")},getObj:function e(){var t=false;var a=this.currentChar;while(true){if(a<0){return E}if(t){if(a===10||a===13){t=false}}else if(a===37){t=true}else if(r[a]!==1){break}a=this.nextChar()}switch(a|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:this.nextChar();return g.get(\"[\");case 93:this.nextChar();return g.get(\"]\");case 60:a=this.nextChar();if(a===60){this.nextChar();return g.get(\"<<\")}return this.getHexString();case 62:a=this.nextChar();if(a===62){this.nextChar();return g.get(\">>\")}return g.get(\">\");case 123:this.nextChar();return g.get(\"{\");case 125:this.nextChar();return g.get(\"}\");case 41:o(\"Illegal character: \"+a);break}var i=String.fromCharCode(a);var n=this.knownCommands;var s=n&&n[i]!==undefined;while((a=this.nextChar())>=0&&!r[a]){var l=i+String.fromCharCode(a);if(s&&n[l]===undefined){break}if(i.length===128){o(\"Command token too long: \"+i.length)}i=l;s=n&&n[i]!==undefined}if(i===\"true\"){return true}if(i===\"false\"){return false}if(i===\"null\"){return null}return g.get(i)},skipToNextLine:function e(){var t=this.currentChar;while(t>=0){if(t===13){t=this.nextChar();if(t===10){this.nextChar()}break}else if(t===10){this.nextChar();break}t=this.nextChar()}}};return t}();var U={create:function e(t){function r(e,t){var r=l.get(e);if(h(r)&&(t?r>=0:r>0)){return r}throw new Error('The \"'+e+'\" parameter in the linearization '+\"dictionary is invalid.\")}function a(){var e=l.get(\"H\"),t,r;if(c(e)&&((t=e.length)===2||t===4)){for(var a=0;a<t;a++){if(!(h(r=e[a])&&r>0)){throw new Error(\"Hint (\"+a+\") in the linearization dictionary is invalid.\")}}return e}throw new Error(\"Hint array in the linearization dictionary is invalid.\")}var i=new D(new F(t),false,null);var n=i.getObj();var s=i.getObj();var o=i.getObj();var l=i.getObj();var f,d;if(!(h(n)&&h(s)&&b(o,\"obj\")&&y(l)&&u(f=l.get(\"Linearized\"))&&f>0)){return null}else if((d=r(\"L\"))!==t.length){throw new Error('The \"L\" parameter in the linearization dictionary '+\"does not equal the stream length.\")}return{length:d,hints:a(),objectNumberFirst:r(\"O\"),endFirst:r(\"E\"),numPages:r(\"N\"),mainXRefEntriesOffset:r(\"T\"),pageFirst:l.has(\"P\")?r(\"P\",true):0}}};e.EOF=E;e.Lexer=F;e.Linearization=U;e.Parser=D;e.isEOF=M});(function(e,t){t(e.pdfjsCoreType1Parser={},e.pdfjsSharedUtil,e.pdfjsCoreStream,e.pdfjsCoreEncodings)})(this,function(e,t,r,a){var i=t.warn;var n=t.isSpace;var s=r.Stream;var o=a.getEncoding;var l=false;var c=function e(){var t={hstem:[1],vstem:[3],vmoveto:[4],rlineto:[5],hlineto:[6],vlineto:[7],rrcurveto:[8],callsubr:[10],flex:[12,35],drop:[12,18],endchar:[14],rmoveto:[21],hmoveto:[22],vhcurveto:[30],hvcurveto:[31]};function r(){this.width=0;this.lsb=0;this.flexing=false;this.output=[];this.stack=[]}r.prototype={convert:function e(r,a,n){var s=r.length;var o=false;var c,h,u;for(var f=0;f<s;f++){var d=r[f];if(d<32){if(d===12){d=(d<<8)+r[++f]}switch(d){case 1:if(!l){this.stack=[];break}o=this.executeCommand(2,t.hstem);break;case 3:if(!l){this.stack=[];break}o=this.executeCommand(2,t.vstem);break;case 4:if(this.flexing){if(this.stack.length<1){o=true;break}var g=this.stack.pop();this.stack.push(0,g);break}o=this.executeCommand(1,t.vmoveto);break;case 5:o=this.executeCommand(2,t.rlineto);break;case 6:o=this.executeCommand(1,t.hlineto);break;case 7:o=this.executeCommand(1,t.vlineto);break;case 8:o=this.executeCommand(6,t.rrcurveto);break;case 9:this.stack=[];break;case 10:if(this.stack.length<1){o=true;break}u=this.stack.pop();o=this.convert(a[u],a,n);break;case 11:return o;case 13:if(this.stack.length<2){o=true;break}c=this.stack.pop();h=this.stack.pop();this.lsb=h;this.width=c;this.stack.push(c,h);o=this.executeCommand(2,t.hmoveto);break;case 14:this.output.push(t.endchar[0]);break;case 21:if(this.flexing){break}o=this.executeCommand(2,t.rmoveto);break;case 22:if(this.flexing){this.stack.push(0);break}o=this.executeCommand(1,t.hmoveto);break;case 30:o=this.executeCommand(4,t.vhcurveto);break;case 31:o=this.executeCommand(4,t.hvcurveto);break;case(12<<8)+0:this.stack=[];break;case(12<<8)+1:if(!l){this.stack=[];break}o=this.executeCommand(2,t.vstem);break;case(12<<8)+2:if(!l){this.stack=[];break}o=this.executeCommand(2,t.hstem);break;case(12<<8)+6:if(n){this.seac=this.stack.splice(-4,4);o=this.executeCommand(0,t.endchar)}else{o=this.executeCommand(4,t.endchar)}break;case(12<<8)+7:if(this.stack.length<4){o=true;break}var v=this.stack.pop();c=this.stack.pop();var p=this.stack.pop();h=this.stack.pop();this.lsb=h;this.width=c;this.stack.push(c,h,p);o=this.executeCommand(3,t.rmoveto);break;case(12<<8)+12:if(this.stack.length<2){o=true;break}var m=this.stack.pop();var b=this.stack.pop();this.stack.push(b/m);break;case(12<<8)+16:if(this.stack.length<2){o=true;break}u=this.stack.pop();var y=this.stack.pop();if(u===0&&y===3){var k=this.stack.splice(this.stack.length-17,17);this.stack.push(k[2]+k[0],k[3]+k[1],k[4],k[5],k[6],k[7],k[8],k[9],k[10],k[11],k[12],k[13],k[14]);o=this.executeCommand(13,t.flex,true);this.flexing=false;this.stack.push(k[15],k[16])}else if(u===1&&y===0){this.flexing=true}break;case(12<<8)+17:break;case(12<<8)+33:this.stack=[];break;default:i('Unknown type 1 charstring command of \"'+d+'\"');break}if(o){break}continue}else if(d<=246){d=d-139}else if(d<=250){d=(d-247)*256+r[++f]+108}else if(d<=254){d=-((d-251)*256)-r[++f]-108}else{d=(r[++f]&255)<<24|(r[++f]&255)<<16|(r[++f]&255)<<8|(r[++f]&255)<<0}this.stack.push(d)}return o},executeCommand:function(e,t,r){var a=this.stack.length;if(e>a){return true}var i=a-e;for(var n=i;n<a;n++){var s=this.stack[n];if(s===(s|0)){this.output.push(28,s>>8&255,s&255)}else{s=65536*s|0;this.output.push(255,s>>24&255,s>>16&255,s>>8&255,s&255)}}this.output.push.apply(this.output,t);if(r){this.stack.splice(i,e)}else{this.stack.length=0}return false}};return r}();var h=function e(){var t=55665;var r=4330;function a(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function i(e,t,r){if(r>=e.length){return new Uint8Array(0)}var a=t|0,i=52845,n=22719,s,o;for(s=0;s<r;s++){a=(e[s]+a)*i+n&(1<<16)-1}var l=e.length-r;var c=new Uint8Array(l);for(s=r,o=0;o<l;s++,o++){var h=e[s];c[o]=h^a>>8;a=(h+a)*i+n&(1<<16)-1}return c}function h(e,t,r){var i=t|0,n=52845,s=22719;var o=e.length,l=o>>>1;var c=new Uint8Array(l);var h,u;for(h=0,u=0;h<o;h++){var f=e[h];if(!a(f)){continue}h++;var d;while(h<o&&!a(d=e[h])){h++}if(h<o){var g=parseInt(String.fromCharCode(f,d),16);c[u++]=g^i>>8;i=(g+i)*n+s&(1<<16)-1}}return Array.prototype.slice.call(c,r,u)}function u(e){return e===47||e===91||e===93||e===123||e===125||e===40||e===41}function f(e,r,n){if(r){var o=e.getBytes();var l=!(a(o[0])&&a(o[1])&&a(o[2])&&a(o[3]));e=new s(l?i(o,t,4):h(o,t,4))}this.seacAnalysisEnabled=!!n;this.stream=e;this.nextChar()}f.prototype={readNumberArray:function e(){this.getToken();var t=[];while(true){var r=this.getToken();if(r===null||r===\"]\"||r===\"}\"){break}t.push(parseFloat(r||0))}return t},readNumber:function e(){var t=this.getToken();return parseFloat(t||0)},readInt:function e(){var t=this.getToken();return parseInt(t||0,10)|0},readBoolean:function e(){var t=this.getToken();return t===\"true\"?1:0},nextChar:function e(){return this.currentChar=this.stream.getByte()},getToken:function e(){var t=false;var r=this.currentChar;while(true){if(r===-1){return null}if(t){if(r===10||r===13){t=false}}else if(r===37){t=true}else if(!n(r)){break}r=this.nextChar()}if(u(r)){this.nextChar();return String.fromCharCode(r)}var a=\"\";do{a+=String.fromCharCode(r);r=this.nextChar()}while(r>=0&&!n(r)&&!u(r));return a},extractFontProgram:function e(){var t=this.stream;var a=[],n=[];var s=Object.create(null);s[\"lenIV\"]=4;var o={subrs:[],charstrings:[],properties:{privateData:s}};var h,u,f,d,g;while((h=this.getToken())!==null){if(h!==\"/\"){continue}h=this.getToken();switch(h){case\"CharStrings\":this.getToken();this.getToken();this.getToken();this.getToken();while(true){h=this.getToken();if(h===null||h===\"end\"){break}if(h!==\"/\"){continue}var v=this.getToken();u=this.readInt();this.getToken();f=t.makeSubStream(t.pos,u);d=o.properties.privateData[\"lenIV\"];g=i(f.getBytes(),r,d);t.skip(u);this.nextChar();h=this.getToken();if(h===\"noaccess\"){this.getToken()}n.push({glyph:v,encoded:g})}break;case\"Subrs\":var p=this.readInt();this.getToken();while((h=this.getToken())===\"dup\"){var m=this.readInt();u=this.readInt();this.getToken();f=t.makeSubStream(t.pos,u);d=o.properties.privateData[\"lenIV\"];g=i(f.getBytes(),r,d);t.skip(u);this.nextChar();h=this.getToken();if(h===\"noaccess\"){this.getToken()}a[m]=g}break;case\"BlueValues\":case\"OtherBlues\":case\"FamilyBlues\":case\"FamilyOtherBlues\":var b=this.readNumberArray();if(b.length>0&&b.length%2===0&&l){o.properties.privateData[h]=b}break;case\"StemSnapH\":case\"StemSnapV\":o.properties.privateData[h]=this.readNumberArray();break;case\"StdHW\":case\"StdVW\":o.properties.privateData[h]=this.readNumberArray()[0];break;case\"BlueShift\":case\"lenIV\":case\"BlueFuzz\":case\"BlueScale\":case\"LanguageGroup\":case\"ExpansionFactor\":o.properties.privateData[h]=this.readNumber();break;case\"ForceBold\":o.properties.privateData[h]=this.readBoolean();break}}for(var y=0;y<n.length;y++){v=n[y].glyph;g=n[y].encoded;var k=new c;var w=k.convert(g,a,this.seacAnalysisEnabled);var C=k.output;if(w){C=[14]}o.charstrings.push({glyphName:v,charstring:C,width:k.width,lsb:k.lsb,seac:k.seac})}return o},extractFontHeader:function e(t){var r;while((r=this.getToken())!==null){if(r!==\"/\"){continue}r=this.getToken();switch(r){case\"FontMatrix\":var a=this.readNumberArray();t.fontMatrix=a;break;case\"Encoding\":var i=this.getToken();var n;if(!/^\\d+$/.test(i)){n=o(i)}else{n=[];var s=parseInt(i,10)|0;this.getToken();for(var l=0;l<s;l++){r=this.getToken();while(r!==\"dup\"&&r!==\"def\"){r=this.getToken();if(r===null){return}}if(r===\"def\"){break}var c=this.readInt();this.getToken();var h=this.getToken();n[c]=h;this.getToken()}}t.builtInEncoding=n;break;case\"FontBBox\":var u=this.readNumberArray();t.ascent=u[3];t.descent=u[1];t.ascentScaled=true;break}}}};return f}();e.Type1Parser=h});(function(e,t){t(e.pdfjsCoreCMap={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreStream,e.pdfjsCoreParser)})(this,function(e,t,r,a,i){var n=t.Util;var s=t.assert;var o=t.warn;var l=t.error;var c=t.isInt;var h=t.isString;var u=t.MissingDataException;var f=r.isName;var d=r.isCmd;var g=r.isStream;var v=a.StringStream;var p=i.Lexer;var m=i.isEOF;var b=[\"Adobe-GB1-UCS2\",\"Adobe-CNS1-UCS2\",\"Adobe-Japan1-UCS2\",\"Adobe-Korea1-UCS2\",\"78-EUC-H\",\"78-EUC-V\",\"78-H\",\"78-RKSJ-H\",\"78-RKSJ-V\",\"78-V\",\"78ms-RKSJ-H\",\"78ms-RKSJ-V\",\"83pv-RKSJ-H\",\"90ms-RKSJ-H\",\"90ms-RKSJ-V\",\"90msp-RKSJ-H\",\"90msp-RKSJ-V\",\"90pv-RKSJ-H\",\"90pv-RKSJ-V\",\"Add-H\",\"Add-RKSJ-H\",\"Add-RKSJ-V\",\"Add-V\",\"Adobe-CNS1-0\",\"Adobe-CNS1-1\",\"Adobe-CNS1-2\",\"Adobe-CNS1-3\",\"Adobe-CNS1-4\",\"Adobe-CNS1-5\",\"Adobe-CNS1-6\",\"Adobe-GB1-0\",\"Adobe-GB1-1\",\"Adobe-GB1-2\",\"Adobe-GB1-3\",\"Adobe-GB1-4\",\"Adobe-GB1-5\",\"Adobe-Japan1-0\",\"Adobe-Japan1-1\",\"Adobe-Japan1-2\",\"Adobe-Japan1-3\",\"Adobe-Japan1-4\",\"Adobe-Japan1-5\",\"Adobe-Japan1-6\",\"Adobe-Korea1-0\",\"Adobe-Korea1-1\",\"Adobe-Korea1-2\",\"B5-H\",\"B5-V\",\"B5pc-H\",\"B5pc-V\",\"CNS-EUC-H\",\"CNS-EUC-V\",\"CNS1-H\",\"CNS1-V\",\"CNS2-H\",\"CNS2-V\",\"ETHK-B5-H\",\"ETHK-B5-V\",\"ETen-B5-H\",\"ETen-B5-V\",\"ETenms-B5-H\",\"ETenms-B5-V\",\"EUC-H\",\"EUC-V\",\"Ext-H\",\"Ext-RKSJ-H\",\"Ext-RKSJ-V\",\"Ext-V\",\"GB-EUC-H\",\"GB-EUC-V\",\"GB-H\",\"GB-V\",\"GBK-EUC-H\",\"GBK-EUC-V\",\"GBK2K-H\",\"GBK2K-V\",\"GBKp-EUC-H\",\"GBKp-EUC-V\",\"GBT-EUC-H\",\"GBT-EUC-V\",\"GBT-H\",\"GBT-V\",\"GBTpc-EUC-H\",\"GBTpc-EUC-V\",\"GBpc-EUC-H\",\"GBpc-EUC-V\",\"H\",\"HKdla-B5-H\",\"HKdla-B5-V\",\"HKdlb-B5-H\",\"HKdlb-B5-V\",\"HKgccs-B5-H\",\"HKgccs-B5-V\",\"HKm314-B5-H\",\"HKm314-B5-V\",\"HKm471-B5-H\",\"HKm471-B5-V\",\"HKscs-B5-H\",\"HKscs-B5-V\",\"Hankaku\",\"Hiragana\",\"KSC-EUC-H\",\"KSC-EUC-V\",\"KSC-H\",\"KSC-Johab-H\",\"KSC-Johab-V\",\"KSC-V\",\"KSCms-UHC-H\",\"KSCms-UHC-HW-H\",\"KSCms-UHC-HW-V\",\"KSCms-UHC-V\",\"KSCpc-EUC-H\",\"KSCpc-EUC-V\",\"Katakana\",\"NWP-H\",\"NWP-V\",\"RKSJ-H\",\"RKSJ-V\",\"Roman\",\"UniCNS-UCS2-H\",\"UniCNS-UCS2-V\",\"UniCNS-UTF16-H\",\"UniCNS-UTF16-V\",\"UniCNS-UTF32-H\",\"UniCNS-UTF32-V\",\"UniCNS-UTF8-H\",\"UniCNS-UTF8-V\",\"UniGB-UCS2-H\",\"UniGB-UCS2-V\",\"UniGB-UTF16-H\",\"UniGB-UTF16-V\",\"UniGB-UTF32-H\",\"UniGB-UTF32-V\",\"UniGB-UTF8-H\",\"UniGB-UTF8-V\",\"UniJIS-UCS2-H\",\"UniJIS-UCS2-HW-H\",\"UniJIS-UCS2-HW-V\",\"UniJIS-UCS2-V\",\"UniJIS-UTF16-H\",\"UniJIS-UTF16-V\",\"UniJIS-UTF32-H\",\"UniJIS-UTF32-V\",\"UniJIS-UTF8-H\",\"UniJIS-UTF8-V\",\"UniJIS2004-UTF16-H\",\"UniJIS2004-UTF16-V\",\"UniJIS2004-UTF32-H\",\"UniJIS2004-UTF32-V\",\"UniJIS2004-UTF8-H\",\"UniJIS2004-UTF8-V\",\"UniJISPro-UCS2-HW-V\",\"UniJISPro-UCS2-V\",\"UniJISPro-UTF8-V\",\"UniJISX0213-UTF32-H\",\"UniJISX0213-UTF32-V\",\"UniJISX02132004-UTF32-H\",\"UniJISX02132004-UTF32-V\",\"UniKS-UCS2-H\",\"UniKS-UCS2-V\",\"UniKS-UTF16-H\",\"UniKS-UTF16-V\",\"UniKS-UTF32-H\",\"UniKS-UTF32-V\",\"UniKS-UTF8-H\",\"UniKS-UTF8-V\",\"V\",\"WP-Symbol\"];var y=function e(){function t(e){this.codespaceRanges=[[],[],[],[]];this.numCodespaceRanges=0;this._map=[];this.name=\"\";this.vertical=false;this.useCMap=null;this.builtInCMap=e}t.prototype={addCodespaceRange:function(e,t,r){this.codespaceRanges[e-1].push(t,r);this.numCodespaceRanges++},mapCidRange:function(e,t,r){while(e<=t){this._map[e++]=r++}},mapBfRange:function(e,t,r){var a=r.length-1;while(e<=t){this._map[e++]=r;r=r.substr(0,a)+String.fromCharCode(r.charCodeAt(a)+1)}},mapBfRangeToArray:function(e,t,r){var a=0,i=r.length;while(e<=t&&a<i){this._map[e]=r[a++];++e}},mapOne:function(e,t){this._map[e]=t},lookup:function(e){return this._map[e]},contains:function(e){return this._map[e]!==undefined},forEach:function(e){var t=this._map;var r=t.length;var a;if(r<=65536){for(a=0;a<r;a++){if(t[a]!==undefined){e(a,t[a])}}}else{for(a in this._map){e(a,t[a])}}},charCodeOf:function(e){return this._map.indexOf(e)},getMap:function(){return this._map},readCharCode:function(e,t,r){var a=0;var i=this.codespaceRanges;var n=this.codespaceRanges.length;for(var s=0;s<n;s++){a=(a<<8|e.charCodeAt(t+s))>>>0;var o=i[s];for(var l=0,c=o.length;l<c;){var h=o[l++];var u=o[l++];if(a>=h&&a<=u){r.charcode=a;r.length=s+1;return}}}r.charcode=0;r.length=1},get length(){return this._map.length},get isIdentityCMap(){if(!(this.name===\"Identity-H\"||this.name===\"Identity-V\")){return false}if(this._map.length!==65536){return false}for(var e=0;e<65536;e++){if(this._map[e]!==e){return false}}return true}};return t}();var k=function e(){function t(e,t){y.call(this);this.vertical=e;this.addCodespaceRange(t,0,65535)}n.inherit(t,y,{});t.prototype={addCodespaceRange:y.prototype.addCodespaceRange,mapCidRange:function(e,t,r){l(\"should not call mapCidRange\")},mapBfRange:function(e,t,r){l(\"should not call mapBfRange\")},mapBfRangeToArray:function(e,t,r){l(\"should not call mapBfRangeToArray\")},mapOne:function(e,t){l(\"should not call mapCidOne\")},lookup:function(e){return c(e)&&e<=65535?e:undefined},contains:function(e){return c(e)&&e<=65535},forEach:function(e){for(var t=0;t<=65535;t++){e(t,t)}},charCodeOf:function(e){return c(e)&&e<=65535?e:-1},getMap:function(){var e=new Array(65536);for(var t=0;t<=65535;t++){e[t]=t}return e},readCharCode:y.prototype.readCharCode,get length(){return 65536},get isIdentityCMap(){l(\"should not access .isIdentityCMap\")}};return t}();var w=function e(){function t(e){return new Promise(function(t,r){var a=new XMLHttpRequest;a.open(\"GET\",e,true);a.responseType=\"arraybuffer\";a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE){if(!a.response||a.status!==200&&a.status!==0){r(new Error(\"Unable to get binary cMap at: \"+e))}else{t(new Uint8Array(a.response))}}};a.send(null)})}function r(e,t){var r=0;for(var a=0;a<=t;a++){r=r<<8|e[a]}return r>>>0}function a(e,t){if(t===1){return String.fromCharCode(e[0],e[1])}if(t===3){return String.fromCharCode(e[0],e[1],e[2],e[3])}return String.fromCharCode.apply(null,e.subarray(0,t+1))}function i(e,t,r){var a=0;for(var i=r;i>=0;i--){a+=e[i]+t[i];e[i]=a&255;a>>=8}}function n(e,t){var r=1;for(var a=t;a>=0&&r>0;a--){r+=e[a];e[a]=r&255;r>>=8}}var o=16;var c=19;function h(e){this.buffer=e;this.pos=0;this.end=e.length;this.tmpBuf=new Uint8Array(c)}h.prototype={readByte:function(){if(this.pos>=this.end){return-1}return this.buffer[this.pos++]},readNumber:function(){var e=0;var t;do{var r=this.readByte();if(r<0){l(\"unexpected EOF in bcmap\")}t=!(r&128);e=e<<7|r&127}while(!t);return e},readSigned:function(){var e=this.readNumber();return e&1?~(e>>>1):e>>>1},readHex:function(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1));this.pos+=t+1},readHexNumber:function(e,t){var r;var a=this.tmpBuf,i=0;do{var n=this.readByte();if(n<0){l(\"unexpected EOF in bcmap\")}r=!(n&128);a[i++]=n&127}while(!r);var s=t,o=0,c=0;while(s>=0){while(c<8&&a.length>0){o=a[--i]<<c|o;c+=7}e[s]=o&255;s--;o>>=8;c-=8}},readHexSigned:function(e,t){this.readHexNumber(e,t);var r=e[t]&1?255:0;var a=0;for(var i=0;i<=t;i++){a=(a&1)<<8|e[i];e[i]=a>>1^r}},readString:function(){var e=this.readNumber();var t=\"\";for(var r=0;r<e;r++){t+=String.fromCharCode(this.readNumber())}return t}};function u(e,c,u){return t(e).then(function(e){var t=new h(e);var f=t.readByte();c.vertical=!!(f&1);var d=null;var g=new Uint8Array(o);var v=new Uint8Array(o);var p=new Uint8Array(o);var m=new Uint8Array(o);var b=new Uint8Array(o);var y;var k;while((k=t.readByte())>=0){var w=k>>5;if(w===7){switch(k&31){case 0:t.readString();break;case 1:d=t.readString();break}continue}var C=!!(k&16);var x=k&15;s(x+1<=o);var S=1;var A=t.readNumber();var I;switch(w){case 0:t.readHex(g,x);t.readHexNumber(v,x);i(v,g,x);c.addCodespaceRange(x+1,r(g,x),r(v,x));for(I=1;I<A;I++){n(v,x);t.readHexNumber(g,x);i(g,v,x);t.readHexNumber(v,x);i(v,g,x);c.addCodespaceRange(x+1,r(g,x),r(v,x))}break;case 1:t.readHex(g,x);t.readHexNumber(v,x);i(v,g,x);y=t.readNumber();for(I=1;I<A;I++){n(v,x);t.readHexNumber(g,x);i(g,v,x);t.readHexNumber(v,x);i(v,g,x);y=t.readNumber()}break;case 2:t.readHex(p,x);y=t.readNumber();c.mapOne(r(p,x),y);for(I=1;I<A;I++){n(p,x);if(!C){t.readHexNumber(b,x);i(p,b,x)}y=t.readSigned()+(y+1);c.mapOne(r(p,x),y)}break;case 3:t.readHex(g,x);t.readHexNumber(v,x);i(v,g,x);y=t.readNumber();c.mapCidRange(r(g,x),r(v,x),y);for(I=1;I<A;I++){n(v,x);if(!C){t.readHexNumber(g,x);i(g,v,x)}else{g.set(v)}t.readHexNumber(v,x);i(v,g,x);y=t.readNumber();c.mapCidRange(r(g,x),r(v,x),y)}break;case 4:t.readHex(p,S);t.readHex(m,x);c.mapOne(r(p,S),a(m,x));for(I=1;I<A;I++){n(p,S);if(!C){t.readHexNumber(b,S);i(p,b,S)}n(m,x);t.readHexSigned(b,x);i(m,b,x);c.mapOne(r(p,S),a(m,x))}break;case 5:t.readHex(g,S);t.readHexNumber(v,S);i(v,g,S);t.readHex(m,x);c.mapBfRange(r(g,S),r(v,S),a(m,x));for(I=1;I<A;I++){n(v,S);if(!C){t.readHexNumber(g,S);i(g,v,S)}else{g.set(v)}t.readHexNumber(v,S);i(v,g,S);t.readHex(m,x);c.mapBfRange(r(g,S),r(v,S),a(m,x))}break;default:l(\"Unknown type: \"+w);break}}if(d){return u(d)}return c})}function f(){}f.prototype={read:u};return f}();var C=function e(){function t(e){var t=0;for(var r=0;r<e.length;r++){t=t<<8|e.charCodeAt(r)}return t>>>0}function r(e){if(!h(e)){l(\"Malformed CMap: expected string.\")}}function a(e){if(!c(e)){l(\"Malformed CMap: expected int.\")}}function i(e,a){while(true){var i=a.getObj();if(m(i)){break}if(d(i,\"endbfchar\")){return}r(i);var n=t(i);i=a.getObj();r(i);var s=i;e.mapOne(n,s)}}function n(e,a){while(true){var i=a.getObj();if(m(i)){break}if(d(i,\"endbfrange\")){return}r(i);var n=t(i);i=a.getObj();r(i);var s=t(i);i=a.getObj();if(c(i)||h(i)){var o=c(i)?String.fromCharCode(i):i;e.mapBfRange(n,s,o)}else if(d(i,\"[\")){i=a.getObj();var u=[];while(!d(i,\"]\")&&!m(i)){u.push(i);i=a.getObj()}e.mapBfRangeToArray(n,s,u)}else{break}}l(\"Invalid bf range.\")}function C(e,i){while(true){var n=i.getObj();if(m(n)){break}if(d(n,\"endcidchar\")){return}r(n);var s=t(n);n=i.getObj();a(n);var o=n;e.mapOne(s,o)}}function x(e,i){while(true){var n=i.getObj();if(m(n)){break}if(d(n,\"endcidrange\")){return}r(n);var s=t(n);n=i.getObj();r(n);var o=t(n);n=i.getObj();a(n);var l=n;e.mapCidRange(s,o,l)}}function S(e,r){while(true){var a=r.getObj();if(m(a)){break}if(d(a,\"endcodespacerange\")){return}if(!h(a)){break}var i=t(a);a=r.getObj();if(!h(a)){break}var n=t(a);e.addCodespaceRange(a.length,i,n)}l(\"Invalid codespace range.\")}function A(e,t){var r=t.getObj();if(c(r)){e.vertical=!!r}}function I(e,t){var r=t.getObj();if(f(r)&&h(r.name)){e.name=r.name}}function B(e,t,r,a){var s;var l;e:while(true){try{var c=t.getObj();if(m(c)){break}else if(f(c)){if(c.name===\"WMode\"){A(e,t)}else if(c.name===\"CMapName\"){I(e,t)}s=c}else if(d(c)){switch(c.cmd){case\"endcmap\":break e;case\"usecmap\":if(f(s)){l=s.name}break;case\"begincodespacerange\":S(e,t);break;case\"beginbfchar\":i(e,t);break;case\"begincidchar\":C(e,t);break;case\"beginbfrange\":n(e,t);break;case\"begincidrange\":x(e,t);break}}}catch(e){if(e instanceof u){throw e}o(\"Invalid cMap data: \"+e);continue}}if(!a&&l){a=l}if(a){return R(e,r,a)}return Promise.resolve(e)}function R(e,t,r){return O(r,t).then(function(t){e.useCMap=t;if(e.numCodespaceRanges===0){var r=e.useCMap.codespaceRanges;for(var a=0;a<r.length;a++){e.codespaceRanges[a]=r[a].slice()}e.numCodespaceRanges=e.useCMap.numCodespaceRanges}e.useCMap.forEach(function(t,r){if(!e.contains(t)){e.mapOne(t,e.useCMap.lookup(t))}});return e})}function T(e,t){var r=t.url+e+\".bcmap\";var a=new y(true);return(new w).read(r,a,function(e){return R(a,t,e)})}function O(e,t){if(e===\"Identity-H\"){return Promise.resolve(new k(false,2))}else if(e===\"Identity-V\"){return Promise.resolve(new k(true,2))}if(b.indexOf(e)===-1){return Promise.reject(new Error(\"Unknown cMap name: \"+e))}s(t,\"built-in cMap parameters are not provided\");if(t.packed){return T(e,t)}return new Promise(function(r,a){var i=t.url+e;var n=new XMLHttpRequest;n.onreadystatechange=function(){if(n.readyState===XMLHttpRequest.DONE){if(n.status===200||n.status===0){var e=new y(true);var s=new p(new v(n.responseText));B(e,s,t,null).then(function(e){r(e)})}else{a(new Error(\"Unable to get cMap at: \"+i))}}};n.open(\"GET\",i,true);n.send(null)})}return{create:function(e,t,r){if(f(e)){return O(e.name,t)}else if(g(e)){var a=new y;var i=new p(e);return B(a,i,t,r).then(function(e){if(e.isIdentityCMap){return O(e.name,t)}return e})}return Promise.reject(new Error(\"Encoding required.\"))}}}();e.CMap=y;e.CMapFactory=C;e.IdentityCMap=k});(function(e,t){t(e.pdfjsCoreFonts={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreStream,e.pdfjsCoreGlyphList,e.pdfjsCoreFontRenderer,e.pdfjsCoreEncodings,e.pdfjsCoreStandardFonts,e.pdfjsCoreUnicode,e.pdfjsCoreType1Parser,e.pdfjsCoreCFFParser)})(this,function(e,t,r,a,i,n,s,o,l,c,h){var u=t.FONT_IDENTITY_MATRIX;var f=t.FontType;var d=t.assert;var g=t.bytesToString;var v=t.error;var p=t.info;var m=t.isArray;var b=t.isInt;var y=t.isNum;var k=t.readUint32;var w=t.shadow;var C=t.string32;var x=t.warn;var S=t.MissingDataException;var A=t.isSpace;var I=a.Stream;var B=i.getGlyphsUnicode;var R=i.getDingbatsGlyphsUnicode;var T=n.FontRendererFactory;var O=s.StandardEncoding;var P=s.MacRomanEncoding;var E=s.SymbolSetEncoding;var M=s.ZapfDingbatsEncoding;var L=s.getEncoding;var D=o.getStdFontMap;var F=o.getNonStdFontMap;var U=o.getGlyphMapForStandardFonts;var j=o.getSupplementalGlyphMapForArialBlack;var q=l.getUnicodeRangeFor;var N=l.mapSpecialUnicodeValues;var _=l.getUnicodeForGlyph;var z=c.Type1Parser;var H=h.CFFStandardStrings;var G=h.CFFParser;var X=h.CFFCompiler;var W=h.CFF;var V=h.CFFHeader;var K=h.CFFTopDict;var Y=h.CFFPrivateDict;var J=h.CFFStrings;var Z=h.CFFIndex;var Q=h.CFFCharset;var $=57344;var ee=63743;var te=false;var re=1e3;var ae=false;var ie={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144};var ne=[\".notdef\",\".null\",\"nonmarkingreturn\",\"space\",\"exclam\",\"quotedbl\",\"numbersign\",\"dollar\",\"percent\",\"ampersand\",\"quotesingle\",\"parenleft\",\"parenright\",\"asterisk\",\"plus\",\"comma\",\"hyphen\",\"period\",\"slash\",\"zero\",\"one\",\"two\",\"three\",\"four\",\"five\",\"six\",\"seven\",\"eight\",\"nine\",\"colon\",\"semicolon\",\"less\",\"equal\",\"greater\",\"question\",\"at\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"bracketleft\",\"backslash\",\"bracketright\",\"asciicircum\",\"underscore\",\"grave\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"braceleft\",\"bar\",\"braceright\",\"asciitilde\",\"Adieresis\",\"Aring\",\"Ccedilla\",\"Eacute\",\"Ntilde\",\"Odieresis\",\"Udieresis\",\"aacute\",\"agrave\",\"acircumflex\",\"adieresis\",\"atilde\",\"aring\",\"ccedilla\",\"eacute\",\"egrave\",\"ecircumflex\",\"edieresis\",\"iacute\",\"igrave\",\"icircumflex\",\"idieresis\",\"ntilde\",\"oacute\",\"ograve\",\"ocircumflex\",\"odieresis\",\"otilde\",\"uacute\",\"ugrave\",\"ucircumflex\",\"udieresis\",\"dagger\",\"degree\",\"cent\",\"sterling\",\"section\",\"bullet\",\"paragraph\",\"germandbls\",\"registered\",\"copyright\",\"trademark\",\"acute\",\"dieresis\",\"notequal\",\"AE\",\"Oslash\",\"infinity\",\"plusminus\",\"lessequal\",\"greaterequal\",\"yen\",\"mu\",\"partialdiff\",\"summation\",\"product\",\"pi\",\"integral\",\"ordfeminine\",\"ordmasculine\",\"Omega\",\"ae\",\"oslash\",\"questiondown\",\"exclamdown\",\"logicalnot\",\"radical\",\"florin\",\"approxequal\",\"Delta\",\"guillemotleft\",\"guillemotright\",\"ellipsis\",\"nonbreakingspace\",\"Agrave\",\"Atilde\",\"Otilde\",\"OE\",\"oe\",\"endash\",\"emdash\",\"quotedblleft\",\"quotedblright\",\"quoteleft\",\"quoteright\",\"divide\",\"lozenge\",\"ydieresis\",\"Ydieresis\",\"fraction\",\"currency\",\"guilsinglleft\",\"guilsinglright\",\"fi\",\"fl\",\"daggerdbl\",\"periodcentered\",\"quotesinglbase\",\"quotedblbase\",\"perthousand\",\"Acircumflex\",\"Ecircumflex\",\"Aacute\",\"Edieresis\",\"Egrave\",\"Iacute\",\"Icircumflex\",\"Idieresis\",\"Igrave\",\"Oacute\",\"Ocircumflex\",\"apple\",\"Ograve\",\"Uacute\",\"Ucircumflex\",\"Ugrave\",\"dotlessi\",\"circumflex\",\"tilde\",\"macron\",\"breve\",\"dotaccent\",\"ring\",\"cedilla\",\"hungarumlaut\",\"ogonek\",\"caron\",\"Lslash\",\"lslash\",\"Scaron\",\"scaron\",\"Zcaron\",\"zcaron\",\"brokenbar\",\"Eth\",\"eth\",\"Yacute\",\"yacute\",\"Thorn\",\"thorn\",\"minus\",\"multiply\",\"onesuperior\",\"twosuperior\",\"threesuperior\",\"onehalf\",\"onequarter\",\"threequarters\",\"franc\",\"Gbreve\",\"gbreve\",\"Idotaccent\",\"Scedilla\",\"scedilla\",\"Cacute\",\"cacute\",\"Ccaron\",\"ccaron\",\"dcroat\"];function se(e){if(!e.fontMatrix){return}if(e.fontMatrix[0]===u[0]){return}var t=.001/e.fontMatrix[0];var r=e.widths;for(var a in r){r[a]*=t}e.defaultWidth*=t}function oe(e,t){if(e.hasIncludedToUnicodeMap){return}if(e.hasEncoding){return}if(t===e.defaultEncoding){return}if(e.toUnicode instanceof fe){return}var r=[],a=B();for(var i in t){var n=t[i];var s=_(n,a);if(s!==-1){r[i]=String.fromCharCode(s)}}e.toUnicode.amend(r)}function le(e,t){switch(e){case\"Type1\":return t===\"Type1C\"?f.TYPE1C:f.TYPE1;case\"CIDFontType0\":return t===\"CIDFontType0C\"?f.CIDFONTTYPE0C:f.CIDFONTTYPE0;case\"OpenType\":return f.OPENTYPE;case\"TrueType\":return f.TRUETYPE;case\"CIDFontType2\":return f.CIDFONTTYPE2;case\"MMType1\":return f.MMTYPE1;case\"Type0\":return f.TYPE0;default:return f.UNKNOWN}}function ce(e,t){if(t[e]!==undefined){return e}var r=_(e,t);if(r!==-1){for(var a in t){if(t[a]===r){return a}}}p(\"Unable to recover a standard glyph name for: \"+e);return e}var he=function e(){function t(e,t,r,a,i,n,s,o){this.fontChar=e;this.unicode=t;this.accent=r;this.width=a;this.vmetric=i;this.operatorListId=n;this.isSpace=s;this.isInFont=o}t.prototype.matchesForCache=function(e,t,r,a,i,n,s,o){return this.fontChar===e&&this.unicode===t&&this.accent===r&&this.width===a&&this.vmetric===i&&this.operatorListId===n&&this.isSpace===s&&this.isInFont===o};return t}();var ue=function e(){function t(e){this._map=e}t.prototype={get length(){return this._map.length},forEach:function(e){for(var t in this._map){e(t,this._map[t].charCodeAt(0))}},has:function(e){return this._map[e]!==undefined},get:function(e){return this._map[e]},charCodeOf:function(e){return this._map.indexOf(e)},amend:function(e){for(var t in e){this._map[t]=e[t]}}};return t}();var fe=function e(){function t(e,t){this.firstChar=e;this.lastChar=t}t.prototype={get length(){return this.lastChar+1-this.firstChar},forEach:function(e){for(var t=this.firstChar,r=this.lastChar;t<=r;t++){e(t,t)}},has:function(e){return this.firstChar<=e&&e<=this.lastChar},get:function(e){if(this.firstChar<=e&&e<=this.lastChar){return String.fromCharCode(e)}return undefined},charCodeOf:function(e){return b(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1},amend:function(e){v(\"Should not call amend()\")}};return t}();var de=function e(){function t(e,t,r){e[t]=r>>8&255;e[t+1]=r&255}function r(e,t,r){e[t]=r>>24&255;e[t+1]=r>>16&255;e[t+2]=r>>8&255;e[t+3]=r&255}function a(e,t,r){var a,i;if(r instanceof Uint8Array){e.set(r,t)}else if(typeof r===\"string\"){for(a=0,i=r.length;a<i;a++){e[t++]=r.charCodeAt(a)&255}}else{for(a=0,i=r.length;a<i;a++){e[t++]=r[a]&255}}}function i(e){this.sfnt=e;this.tables=Object.create(null)}i.getSearchParams=function e(t,r){var a=1,i=0;while((a^t)>a){a<<=1;i++}var n=a*r;return{range:n,entry:i,rangeShift:r*t-n}};var n=12;var s=16;i.prototype={toArray:function e(){var o=this.sfnt;var l=this.tables;var c=Object.keys(l);c.sort();var h=c.length;var u,f,d,g,v;var p=n+h*s;var m=[p];for(u=0;u<h;u++){g=l[c[u]];var b=(g.length+3&~3)>>>0;p+=b;m.push(p)}var y=new Uint8Array(p);for(u=0;u<h;u++){g=l[c[u]];a(y,m[u],g)}if(o===\"true\"){o=C(65536)}y[0]=o.charCodeAt(0)&255;y[1]=o.charCodeAt(1)&255;y[2]=o.charCodeAt(2)&255;y[3]=o.charCodeAt(3)&255;t(y,4,h);var w=i.getSearchParams(h,16);t(y,6,w.range);t(y,8,w.entry);t(y,10,w.rangeShift);p=n;for(u=0;u<h;u++){v=c[u];y[p]=v.charCodeAt(0)&255;y[p+1]=v.charCodeAt(1)&255;y[p+2]=v.charCodeAt(2)&255;y[p+3]=v.charCodeAt(3)&255;var x=0;for(f=m[u],d=m[u+1];f<d;f+=4){var S=k(y,f);x=x+S>>>0}r(y,p+4,x);r(y,p+8,m[u]);r(y,p+12,l[v].length);p+=s}return y},addTable:function e(t,r){if(t in this.tables){throw new Error(\"Table \"+t+\" already exists\")}this.tables[t]=r}};return i}();var ge=new Int32Array([0,32,127,161,173,174,1536,1920,2208,4256,6016,6144,7168,7248,8192,8208,8209,8210,8232,8240,8287,8304,9676,9677,12288,12289,43616,43648,65520,65536]);var ve=function e(){function t(e,t,r){var a,i,n;this.name=e;this.loadedName=r.loadedName;this.isType3Font=r.isType3Font;this.sizes=[];this.missingFile=false;this.glyphCache=Object.create(null);var s=e.split(\"+\");s=s.length>1?s[1]:s[0];s=s.split(/[-,_]/g)[0];this.isSerifFont=!!(r.flags&ie.Serif);this.isSymbolicFont=!!(r.flags&ie.Symbolic);this.isMonospace=!!(r.flags&ie.FixedPitch);var u=r.type;var d=r.subtype;this.type=u;this.fallbackName=this.isMonospace?\"monospace\":this.isSerifFont?\"serif\":\"sans-serif\";this.differences=r.differences;this.widths=r.widths;this.defaultWidth=r.defaultWidth;this.composite=r.composite;this.wideChars=r.wideChars;this.cMap=r.cMap;this.ascent=r.ascent/re;this.descent=r.descent/re;this.fontMatrix=r.fontMatrix;this.bbox=r.bbox;this.toUnicode=r.toUnicode;this.toFontChar=[];if(r.type===\"Type3\"){for(a=0;a<256;a++){this.toFontChar[a]=this.differences[a]||r.defaultEncoding[a]}this.fontType=f.TYPE3;return}this.cidEncoding=r.cidEncoding;this.vertical=r.vertical;if(this.vertical){this.vmetrics=r.vmetrics;this.defaultVMetrics=r.defaultVMetrics}var g;if(!t||t.isEmpty){if(t){x('Font file is empty in \"'+e+'\" ('+this.loadedName+\")\")}this.missingFile=true;var m=e.replace(/[,_]/g,\"-\");var b=D(),y=F();var k=!!b[m]||!!(y[m]&&b[y[m]]);m=b[m]||y[m]||m;this.bold=m.search(/bold/gi)!==-1;this.italic=m.search(/oblique/gi)!==-1||m.search(/italic/gi)!==-1;this.black=e.search(/Black/g)!==-1;this.remeasure=Object.keys(this.widths).length>0;if(k&&u===\"CIDFontType2\"&&r.cidEncoding.indexOf(\"Identity-\")===0){var w=U();var C=[];for(a in w){C[+a]=w[a]}if(/Arial-?Black/i.test(e)){var S=j();for(a in S){C[+a]=S[a]}}var A=this.toUnicode instanceof fe;if(!A){this.toUnicode.forEach(function(e,t){C[+e]=t})}this.toFontChar=C;this.toUnicode=new ue(C)}else if(/Symbol/i.test(m)){this.toFontChar=h(E,B(),r.differences)}else if(/Dingbats/i.test(m)){if(/Wingdings/i.test(e)){x(\"Non-embedded Wingdings font, falling back to ZapfDingbats.\")}this.toFontChar=h(M,R(),r.differences)}else if(k){this.toFontChar=h(r.defaultEncoding,B(),r.differences)}else{g=B();this.toUnicode.forEach(function(e,t){if(!this.composite){i=r.differences[e]||r.defaultEncoding[e];n=_(i,g);if(n!==-1){t=n}}this.toFontChar[e]=t}.bind(this))}this.loadedName=m.split(\"-\")[0];this.loading=false;this.fontType=le(u,d);return}if(d===\"Type1C\"){if(u!==\"Type1\"&&u!==\"MMType1\"){if(o(t)){d=\"TrueType\"}else{u=\"Type1\"}}else if(l(t)){u=d=\"OpenType\"}}if(d===\"CIDFontType0C\"&&u!==\"CIDFontType0\"){u=\"CIDFontType0\"}if(d===\"OpenType\"){u=\"OpenType\"}if(u===\"CIDFontType0\"){if(c(t)){d=\"CIDFontType0\"}else if(l(t)){u=d=\"OpenType\"}else{d=\"CIDFontType0C\"}}var I;switch(u){case\"MMType1\":p(\"MMType1 font (\"+e+\"), falling back to Type1.\");case\"Type1\":case\"CIDFontType0\":this.mimetype=\"font/opentype\";var T=d===\"Type1C\"||d===\"CIDFontType0C\"?new ye(t,r):new be(e,t,r);se(r);I=this.convert(e,T,r);break;case\"OpenType\":case\"TrueType\":case\"CIDFontType2\":this.mimetype=\"font/opentype\";I=this.checkAndRepair(e,t,r);if(this.isOpenType){se(r);u=\"OpenType\"}break;default:v(\"Font \"+u+\" is not supported\");break}this.data=I;this.fontType=le(u,d);this.fontMatrix=r.fontMatrix;this.widths=r.widths;this.defaultWidth=r.defaultWidth;this.toUnicode=r.toUnicode;this.encoding=r.baseEncoding;this.seacMap=r.seacMap;this.loading=true}t.getFontID=function(){var e=1;return function t(){return String(e++)}}();function r(e,t){return(e<<8)+t}function a(e,t){var r=(e<<8)+t;return r&1<<15?r-65536:r}function i(e,t,r,a){return(e<<24)+(t<<16)+(r<<8)+a}function n(e){return String.fromCharCode(e>>8&255,e&255)}function s(e){e=e>32767?32767:e<-32768?-32768:e;return String.fromCharCode(e>>8&255,e&255)}function o(e){var t=e.peekBytes(4);return k(t,0)===65536}function l(e){var t=e.peekBytes(4);return g(t)===\"OTTO\"}function c(e){var t=e.peekBytes(2);if(t[0]===37&&t[1]===33){return true}if(t[0]===128&&t[1]===1){return true}return false}function h(e,t,r){var a=[],i;for(var n=0,s=e.length;n<s;n++){i=_(e[n],t);if(i!==-1){a[n]=i}}for(var o in r){i=_(r[o],t);if(i!==-1){a[+o]=i}}return a}function m(e){var t=0,r=ge.length-1;while(t<r){var a=t+r+1>>1;if(e<ge[a]){r=a-1}else{t=a}}return!(t&1)}function b(e,t){var r=t.toUnicode;var a=!!(t.flags&ie.Symbolic);var i=t.toUnicode instanceof fe;var n=Object.create(null);var s=[];var o=[];var l=$;for(var c in e){c|=0;var h=e[c];var u=c;var f=false;if(!i&&r.has(c)){f=true;var d=r.get(u);if(d.length===1){u=d.charCodeAt(0)}}if((o[u]!==undefined||m(u)||a&&!f)&&l<=ee){do{u=l++;if(te&&u===61440){u=61472;l=u+1}}while(o[u]!==undefined&&l<=ee)}n[u]=h;s[c]=u;o[u]=true}return{toFontChar:s,charCodeToGlyphId:n,nextAvailableFontCharCode:l}}function S(e,t){var r=[];for(var a in e){if(e[a]>=t){continue}r.push({fontCharCode:a|0,glyphId:e[a]})}r.sort(function e(t,r){return t.fontCharCode-r.fontCharCode});var i=[];var n=r.length;for(var s=0;s<n;){var o=r[s].fontCharCode;var l=[r[s].glyphId];++s;var c=o;while(s<n&&c+1===r[s].fontCharCode){l.push(r[s].glyphId);++c;++s;if(c===65535){break}}i.push([o,c,l])}return i}function A(e,t){var r=S(e,t);var a=r[r.length-1][1]>65535?2:1;var i=\"\\0\\0\"+n(a)+\"\\0\u0003\"+\"\\0\u0001\"+C(4+a*8);var s,o,l,c;for(s=r.length-1;s>=0;--s){if(r[s][0]<=65535){break}}var h=s+1;if(r[s][0]<65535&&r[s][1]===65535){r[s][1]=65534}var u=r[s][1]<65535?1:0;var f=h+u;var d=de.getSearchParams(f,2);var g=\"\";var v=\"\";var p=\"\";var m=\"\";var b=\"\";var y=0;var k,w,x,A;for(s=0,o=h;s<o;s++){k=r[s];w=k[0];x=k[1];g+=n(w);v+=n(x);A=k[2];var I=true;for(l=1,c=A.length;l<c;++l){if(A[l]!==A[l-1]+1){I=false;break}}if(!I){var B=(f-s)*2+y*2;y+=x-w+1;p+=n(0);m+=n(B);for(l=0,c=A.length;l<c;++l){b+=n(A[l])}}else{var R=A[0];p+=n(R-w&65535);m+=n(0)}}if(u>0){v+=\"ÿÿ\";g+=\"ÿÿ\";p+=\"\\0\u0001\";m+=\"\\0\\0\"}var T=\"\\0\\0\"+n(2*f)+n(d.range)+n(d.entry)+n(d.rangeShift)+v+\"\\0\\0\"+g+p+m+b;var O=\"\";var P=\"\";if(a>1){i+=\"\\0\u0003\"+\"\\0\\n\"+C(4+a*8+4+T.length);O=\"\";for(s=0,o=r.length;s<o;s++){k=r[s];w=k[0];A=k[2];var E=A[0];for(l=1,c=A.length;l<c;++l){if(A[l]!==A[l-1]+1){x=k[0]+l-1;O+=C(w)+C(x)+C(E);w=x+1;E=A[l]}}O+=C(w)+C(k[1])+C(E)}P=\"\\0\\f\"+\"\\0\\0\"+C(O.length+16)+\"\\0\\0\\0\\0\"+C(O.length/12)}return i+\"\\0\u0004\"+n(T.length+4)+T+P+O}function z(e){var t=new I(e.data);var r=t.getUint16();t.getBytes(60);var a=t.getUint16();if(r<4&&a&768){return false}var i=t.getUint16();var n=t.getUint16();if(i>n){return false}t.getBytes(6);var s=t.getUint16();if(s===0){return false}e.data[8]=e.data[9]=0;return true}function H(e,t,r){r=r||{unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0};var a=0;var i=0;var s=0;var o=0;var l=null;var c=0;if(t){for(var h in t){h|=0;if(l>h||!l){l=h}if(c<h){c=h}var f=q(h);if(f<32){a|=1<<f}else if(f<64){i|=1<<f-32}else if(f<96){s|=1<<f-64}else if(f<123){o|=1<<f-96}else{v(\"Unicode ranges Bits > 123 are reserved for internal usage\")}}}else{l=0;c=255}var d=e.bbox||[0,0,0,0];var g=r.unitsPerEm||1/(e.fontMatrix||u)[0];var p=e.ascentScaled?1:g/re;var m=r.ascent||Math.round(p*(e.ascent||d[3]));var b=r.descent||Math.round(p*(e.descent||d[1]));if(b>0&&e.descent>0&&d[1]<0){b=-b}var y=r.yMax||m;var k=-r.yMin||-b;return\"\\0\u0003\"+\"\u0002$\"+\"\u0001ô\"+\"\\0\u0005\"+\"\\0\\0\"+\"\u0002\"+\"\u0002»\"+\"\\0\\0\"+\"\\0\"+\"\u0002\"+\"\u0002»\"+\"\\0\\0\"+\"\u0001ß\"+\"\\x001\"+\"\u0001\u0002\"+\"\\0\\0\"+\"\\0\\0\u0006\"+String.fromCharCode(e.fixedPitch?9:0)+\"\\0\\0\\0\\0\\0\\0\"+C(a)+C(i)+C(s)+C(o)+\"*21*\"+n(e.italicAngle?1:0)+n(l||e.firstChar)+n(c||e.lastChar)+n(m)+n(b)+\"\\0d\"+n(y)+n(k)+\"\\0\\0\\0\\0\"+\"\\0\\0\\0\\0\"+n(e.xHeight)+n(e.capHeight)+n(0)+n(l||e.firstChar)+\"\\0\u0003\"}function W(e){var t=Math.floor(e.italicAngle*Math.pow(2,16));return\"\\0\u0003\\0\\0\"+C(t)+\"\\0\\0\"+\"\\0\\0\"+C(e.fixedPitch)+\"\\0\\0\\0\\0\"+\"\\0\\0\\0\\0\"+\"\\0\\0\\0\\0\"+\"\\0\\0\\0\\0\"}function V(e,t){if(!t){t=[[],[]]}var r=[t[0][0]||\"Original licence\",t[0][1]||e,t[0][2]||\"Unknown\",t[0][3]||\"uniqueID\",t[0][4]||e,t[0][5]||\"Version 0.11\",t[0][6]||\"\",t[0][7]||\"Unknown\",t[0][8]||\"Unknown\",t[0][9]||\"Unknown\"];var a=[];var i,s,o,l,c;for(i=0,s=r.length;i<s;i++){c=t[1][i]||r[i];var h=[];for(o=0,l=c.length;o<l;o++){h.push(n(c.charCodeAt(o)))}a.push(h.join(\"\"))}var u=[r,a];var f=[\"\\0\u0001\",\"\\0\u0003\"];var d=[\"\\0\\0\",\"\\0\u0001\"];var g=[\"\\0\\0\",\"\u0004\\t\"];var v=r.length*f.length;var p=\"\\0\\0\"+n(v)+n(v*12+6);var m=0;for(i=0,s=f.length;i<s;i++){var b=u[i];for(o=0,l=b.length;o<l;o++){c=b[o];var y=f[i]+d[i]+g[i]+n(o)+n(c.length)+n(m);p+=y;m+=c.length}}p+=r.join(\"\")+a.join(\"\");return p}t.prototype={name:null,font:null,mimetype:null,encoding:null,get renderer(){var e=T.create(this,ae);return w(this,\"renderer\",e)},exportData:function e(){var t={};for(var r in this){if(this.hasOwnProperty(r)){t[r]=this[r]}}return t},checkAndRepair:function e(t,n,s){function o(e){var t=g(e.getBytes(4));var r=e.getInt32()>>>0;var a=e.getInt32()>>>0;var i=e.getInt32()>>>0;var n=e.pos;e.pos=e.start?e.start:0;e.skip(a);var s=e.getBytes(i);e.pos=n;if(t===\"head\"){s[8]=s[9]=s[10]=s[11]=0;s[17]|=32}return{tag:t,checksum:r,length:i,offset:a,data:s}}function l(e){return{version:g(e.getBytes(4)),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function c(e,t,r,a){if(!e){x(\"No cmap table available.\");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:false}}var i;var n=(t.start?t.start:0)+e.offset;t.pos=n;var s=t.getUint16();var o=t.getUint16();var l;var c=false;for(var h=0;h<o;h++){var u=t.getUint16();var f=t.getUint16();var d=t.getInt32()>>>0;var g=false;if(u===0&&f===0){g=true}else if(u===1&&f===0){g=true}else if(u===3&&f===1&&(!r&&a||!l)){g=true;if(!r){c=true}}else if(r&&u===3&&f===0){g=true;c=true}if(g){l={platformId:u,encodingId:f,offset:d}}if(c){break}}if(l){t.pos=n+l.offset}if(!l||t.peekByte()===-1){x(\"Could not find a preferred cmap table.\");return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:false}}var v=t.getUint16();var p=t.getUint16();var m=t.getUint16();var b=false;var y=[];var k,w;if(v===0){for(k=0;k<256;k++){var C=t.getByte();if(!C){continue}y.push({charCode:k,glyphId:C})}b=true}else if(v===4){var S=t.getUint16()>>1;t.getBytes(6);var A,I=[];for(A=0;A<S;A++){I.push({end:t.getUint16()})}t.getUint16();for(A=0;A<S;A++){I[A].start=t.getUint16()}for(A=0;A<S;A++){I[A].delta=t.getUint16()}var B=0;for(A=0;A<S;A++){i=I[A];var R=t.getUint16();if(!R){i.offsetIndex=-1;continue}var T=(R>>1)-(S-A);i.offsetIndex=T;B=Math.max(B,T+i.end-i.start+1)}var O=[];for(k=0;k<B;k++){O.push(t.getUint16())}for(A=0;A<S;A++){i=I[A];n=i.start;var P=i.end;var E=i.delta;T=i.offsetIndex;for(k=n;k<=P;k++){if(k===65535){continue}w=T<0?k:O[T+k-n];w=w+E&65535;if(w===0){continue}y.push({charCode:k,glyphId:w})}}}else if(v===6){var M=t.getUint16();var L=t.getUint16();for(k=0;k<L;k++){w=t.getUint16();var D=M+k;y.push({charCode:D,glyphId:w})}}else{x(\"cmap table has unsupported format: \"+v);return{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:false}}y.sort(function(e,t){return e.charCode-t.charCode});for(h=1;h<y.length;h++){if(y[h-1].charCode===y[h].charCode){y.splice(h,1);h--}}return{platformId:l.platformId,encodingId:l.encodingId,mappings:y,hasShortCmap:b}}function h(e,t,r,a){if(!t){if(r){r.data=null}return}e.pos=(e.start?e.start:0)+t.offset;e.pos+=t.length-2;var i=e.getUint16();if(i>a){p(\"The numOfMetrics (\"+i+\") should not be \"+\"greater than the numGlyphs (\"+a+\")\");i=a;t.data[34]=(i&65280)>>8;t.data[35]=i&255}var n=a-i;var s=n-(r.length-i*4>>1);if(s>0){var o=new Uint8Array(r.length+s*2);o.set(r.data);r.data=o}}function u(e,t,r,a,i,n){if(r-t<=12){return 0}var s=e.subarray(t,r);var o=s[0]<<8|s[1];if(o&32768){a.set(s,i);return s.length}var l,c=10,h=0;for(l=0;l<o;l++){var u=s[c]<<8|s[c+1];h=u+1;c+=2}var f=c;var d=s[c]<<8|s[c+1];c+=2+d;var g=c;var v=0;for(l=0;l<h;l++){var p=s[c++];if(p&192){s[c-1]=p&63}var m=(p&2?1:p&16?0:2)+(p&4?1:p&32?0:2);v+=m;if(p&8){var b=s[c++];l+=b;v+=b*m}}if(v===0){return 0}var y=c+v;if(y>s.length){return 0}if(!n&&d>0){a.set(s.subarray(0,f),i);a.set([0,0],i+f);a.set(s.subarray(g,y),i+f+2);y-=d;if(s.length-y>3){y=y+3&~3}return y}if(s.length-y>3){y=y+3&~3;a.set(s.subarray(0,y),i);return y}a.set(s,i);return s.length}function f(e,t,a){var n=e.data;var s=i(n[0],n[1],n[2],n[3]);if(s>>16!==1){p(\"Attempting to fix invalid version in head table: \"+s);n[0]=0;n[1]=1;n[2]=0;n[3]=0}var o=r(n[50],n[51]);if(o<0||o>1){p(\"Attempting to fix invalid indexToLocFormat in head table: \"+o);var l=t+1;if(a===l<<1){n[50]=0;n[51]=0}else if(a===l<<2){n[50]=0;n[51]=1}else{x(\"Could not fix indexToLocFormat: \"+o)}}}function m(e,t,r,a,i,n){var s,o,l;if(a){s=4;o=function e(t,r){return t[r]<<24|t[r+1]<<16|t[r+2]<<8|t[r+3]};l=function e(t,r,a){t[r]=a>>>24&255;t[r+1]=a>>16&255;t[r+2]=a>>8&255;t[r+3]=a&255}}else{s=2;o=function e(t,r){return t[r]<<9|t[r+1]<<1};l=function e(t,r,a){t[r]=a>>9&255;t[r+1]=a>>1&255}}var c=e.data;var h=s*(1+r);if(c.length!==h){c=new Uint8Array(h);c.set(e.data.subarray(0,h));e.data=c}var f=t.data;var d=f.length;var g=new Uint8Array(d);var v=o(c,0);var p=0;var m=Object.create(null);l(c,0,p);var b,y;for(b=0,y=s;b<r;b++,y+=s){var k=o(c,y);if(k>d&&(d+3&~3)===k){k=d}if(k>d){l(c,y,p);v=k;continue}if(v===k){m[b]=true}var w=u(f,v,k,g,p,i);p+=w;l(c,y,p);v=k}if(p===0){var C=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(b=0,y=s;b<r;b++,y+=s){l(c,y,C.length)}t.data=C;return m}if(n){var x=o(c,s);if(g.length>x+p){t.data=g.subarray(0,x+p)}else{t.data=new Uint8Array(x+p);t.data.set(g.subarray(0,p))}t.data.set(g.subarray(0,x),p);l(e.data,c.length-s,p+x)}else{t.data=g.subarray(0,p)}return m}function k(e,t,r){var a=(n.start?n.start:0)+e.offset;n.pos=a;var i=e.length,s=a+i;var o=n.getInt32();n.getBytes(28);var l;var c=true;var h;switch(o){case 65536:l=ne;break;case 131072:var u=n.getUint16();if(u!==r){c=false;break}var f=[];for(h=0;h<u;++h){var d=n.getUint16();if(d>=32768){c=false;break}f.push(d)}if(!c){break}var g=[];var v=[];while(n.pos<s){var p=n.getByte();v.length=p;for(h=0;h<p;++h){v[h]=String.fromCharCode(n.getByte())}g.push(v.join(\"\"))}l=[];for(h=0;h<u;++h){var m=f[h];if(m<258){l.push(ne[m]);continue}l.push(g[m-258])}break;case 196608:break;default:x(\"Unknown/unsupported post table version \"+o);c=false;if(t.defaultEncoding){l=t.defaultEncoding}break}t.glyphNames=l;return c}function w(e){var t=(n.start?n.start:0)+e.offset;n.pos=t;var r=[[],[]];var a=e.length,i=t+a;var s=n.getUint16();var o=6;if(s!==0||a<o){return r}var l=n.getUint16();var c=n.getUint16();var h=[];var u=12;var f,d;for(f=0;f<l&&n.pos+u<=i;f++){var v={platform:n.getUint16(),encoding:n.getUint16(),language:n.getUint16(),name:n.getUint16(),length:n.getUint16(),offset:n.getUint16()};if(v.platform===1&&v.encoding===0&&v.language===0||v.platform===3&&v.encoding===1&&v.language===1033){h.push(v)}}for(f=0,d=h.length;f<d;f++){var p=h[f];if(p.length<=0){continue}var m=t+c+p.offset;if(m+p.length>i){continue}n.pos=m;var b=p.name;if(p.encoding){var y=\"\";for(var k=0,w=p.length;k<w;k+=2){y+=String.fromCharCode(n.getUint16())}r[1][b]=y}else{r[0][b]=g(n.getBytes(p.length))}}return r}var C=[0,0,0,0,0,0,0,0,-2,-2,-2,-2,0,0,-2,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,-1,-1,1,-1,-999,0,1,0,-1,-2,0,-1,-2,-1,-1,0,-1,-1,0,0,-999,-999,-1,-1,-1,-1,-2,-999,-2,-2,-999,0,-2,-2,0,0,-2,0,-2,0,0,0,-2,-1,-1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,0,-999,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-2,-999,-999,-999,-999,-999,-1,-1,-2,-2,0,0,0,0,-1,-1,-999,-2,-2,0,0,-1,-2,-2,0,0,0,-1,-1,-1,-2];function S(e,t){var r=e.data;var a=0,i,n,s,o,l,c=0,h=0;var u=[];var f=[];var d=[];var g=t.tooComplexToFollowFunctions;var v=false,p=0,m=0;for(var b=r.length;a<b;){var y=r[a++];if(y===64){n=r[a++];if(v||m){a+=n}else{for(i=0;i<n;i++){u.push(r[a++])}}}else if(y===65){n=r[a++];if(v||m){a+=n*2}else{for(i=0;i<n;i++){s=r[a++];u.push(s<<8|r[a++])}}}else if((y&248)===176){n=y-176+1;if(v||m){a+=n}else{for(i=0;i<n;i++){u.push(r[a++])}}}else if((y&248)===184){n=y-184+1;if(v||m){a+=n*2}else{for(i=0;i<n;i++){s=r[a++];u.push(s<<8|r[a++])}}}else if(y===43&&!g){if(!v&&!m){o=u[u.length-1];t.functionsUsed[o]=true;if(o in t.functionsStackDeltas){u.length+=t.functionsStackDeltas[o]}else if(o in t.functionsDefined&&d.indexOf(o)<0){f.push({data:r,i:a,stackTop:u.length-1});d.push(o);l=t.functionsDefined[o];if(!l){x(\"TT: CALL non-existent function\");t.hintsValid=false;return}r=l.data;a=l.i}}}else if(y===44&&!g){if(v||m){x(\"TT: nested FDEFs not allowed\");g=true}v=true;h=a;o=u.pop();t.functionsDefined[o]={data:r,i:a}}else if(y===45){if(v){v=false;c=a}else{l=f.pop();if(!l){x(\"TT: ENDF bad stack\");t.hintsValid=false;return}o=d.pop();r=l.data;a=l.i;t.functionsStackDeltas[o]=u.length-l.stackTop}}else if(y===137){if(v||m){x(\"TT: nested IDEFs not allowed\");g=true}v=true;h=a}else if(y===88){++p}else if(y===27){m=p}else if(y===89){if(m===p){m=0}--p}else if(y===28){if(!v&&!m){var k=u[u.length-1];if(k>0){a+=k-1}}}if(!v&&!m){var w=y<=142?C[y]:y>=192&&y<=223?-1:y>=224?-2:0;if(y>=113&&y<=117){n=u.pop();if(!isNaN(n)){w=-n*2}}while(w<0&&u.length>0){u.pop();w++}while(w>0){u.push(NaN);w--}}}t.tooComplexToFollowFunctions=g;var S=[r];if(a>r.length){S.push(new Uint8Array(a-r.length))}if(h>c){x(\"TT: complementing a missing function tail\");S.push(new Uint8Array([34,45]))}T(e,S)}function R(e,t){if(e.tooComplexToFollowFunctions){return}if(e.functionsDefined.length>t){x(\"TT: more functions defined than expected\");e.hintsValid=false;return}for(var r=0,a=e.functionsUsed.length;r<a;r++){if(r>t){x(\"TT: invalid function id: \"+r);e.hintsValid=false;return}if(e.functionsUsed[r]&&!e.functionsDefined[r]){x(\"TT: undefined function: \"+r);e.hintsValid=false;return}}}function T(e,t){if(t.length>1){var r=0;var a,i;for(a=0,i=t.length;a<i;a++){r+=t[a].length}r=r+3&~3;var n=new Uint8Array(r);var s=0;for(a=0,i=t.length;a<i;a++){n.set(t[a],s);s+=t[a].length}e.data=n;e.length=r}}function E(e,t,r,a){var i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:false,hintsValid:true};if(e){S(e,i)}if(t){S(t,i)}if(e){R(i,a)}if(r&&r.length&1){var n=new Uint8Array(r.length+1);n.set(r.data);r.data=n}return i.hintsValid}n=new I(new Uint8Array(n.getBytes()));var M=[\"OS/2\",\"cmap\",\"head\",\"hhea\",\"hmtx\",\"maxp\",\"name\",\"post\",\"loca\",\"glyf\",\"fpgm\",\"prep\",\"cvt \",\"CFF \"];var D=l(n);var F=D.numTables;var U,j;var q=Object.create(null);q[\"OS/2\"]=null;q[\"cmap\"]=null;q[\"head\"]=null;q[\"hhea\"]=null;q[\"hmtx\"]=null;q[\"maxp\"]=null;q[\"name\"]=null;q[\"post\"]=null;var N;for(var _=0;_<F;_++){N=o(n);if(M.indexOf(N.tag)<0){continue}if(N.length===0){continue}q[N.tag]=N}var K=!q[\"CFF \"];if(!K){if(D.version===\"OTTO\"&&!s.composite||!q[\"head\"]||!q[\"hhea\"]||!q[\"maxp\"]||!q[\"post\"]){j=new I(q[\"CFF \"].data);U=new ye(j,s);se(s);return this.convert(t,U,s)}delete q[\"glyf\"];delete q[\"loca\"];delete q[\"fpgm\"];delete q[\"prep\"];delete q[\"cvt \"];this.isOpenType=true}else{if(!q[\"loca\"]){v('Required \"loca\" table is not found')}if(!q[\"glyf\"]){x('Required \"glyf\" table is not found -- trying to recover.');q[\"glyf\"]={tag:\"glyf\",data:new Uint8Array(0)}}this.isOpenType=false}if(!q[\"maxp\"]){v('Required \"maxp\" table is not found')}n.pos=(n.start||0)+q[\"maxp\"].offset;var Y=n.getInt32();var J=n.getUint16();var Z=0;if(Y>=65536&&q[\"maxp\"].length>=22){n.pos+=8;var Q=n.getUint16();if(Q>2){q[\"maxp\"].data[14]=0;q[\"maxp\"].data[15]=2}n.pos+=4;Z=n.getUint16()}var $=false;if(s.type===\"CIDFontType2\"&&s.toUnicode&&s.toUnicode.get(0)>\"\\0\"){$=true;J++;q[\"maxp\"].data[4]=J>>8;q[\"maxp\"].data[5]=J&255}var ee=E(q[\"fpgm\"],q[\"prep\"],q[\"cvt \"],Z);if(!ee){delete q[\"fpgm\"];delete q[\"prep\"];delete q[\"cvt \"]}h(n,q[\"hhea\"],q[\"hmtx\"],J);if(!q[\"head\"]){v('Required \"head\" table is not found')}f(q[\"head\"],J,K?q[\"loca\"].length:0);var te=Object.create(null);if(K){var re=r(q[\"head\"].data[50],q[\"head\"].data[51]);te=m(q[\"loca\"],q[\"glyf\"],J,re,ee,$)}if(!q[\"hhea\"]){v('Required \"hhea\" table is not found')}if(q[\"hhea\"].data[10]===0&&q[\"hhea\"].data[11]===0){q[\"hhea\"].data[10]=255;q[\"hhea\"].data[11]=255}var ie={unitsPerEm:r(q[\"head\"].data[18],q[\"head\"].data[19]),yMax:r(q[\"head\"].data[42],q[\"head\"].data[43]),yMin:a(q[\"head\"].data[38],q[\"head\"].data[39]),ascent:r(q[\"hhea\"].data[4],q[\"hhea\"].data[5]),descent:a(q[\"hhea\"].data[6],q[\"hhea\"].data[7])};this.ascent=ie.ascent/ie.unitsPerEm;this.descent=ie.descent/ie.unitsPerEm;if(q[\"post\"]){var oe=k(q[\"post\"],s,J);if(!oe){q[\"post\"]=null}}var le=[],he;var ue=s.toUnicode,ge=s.widths;var ve=ue instanceof fe||ue.length===65536;function pe(e,t,r){if(!te[e]){return true}if(!ve&&t>=0&&ue.has(t)){return true}if(ge&&r>=0&&y(ge[r])){return true}return false}if(s.composite){var me=s.cidToGidMap||[];var be=me.length===0;s.cMap.forEach(function(e,t){d(t<=65535,\"Max size of CID is 65,535\");var r=-1;if(be){r=t}else if(me[t]!==undefined){r=me[t]}if(r>=0&&r<J&&pe(r,e,t)){le[e]=r}});if($&&(be||!le[0])){le[0]=J-1}}else{var ke=c(q[\"cmap\"],n,this.isSymbolicFont,s.hasEncoding);var we=ke.platformId;var Ce=ke.encodingId;var xe=ke.mappings;var Se=xe.length;if(s.hasEncoding&&(we===3&&Ce===1||we===1&&Ce===0)||we===-1&&Ce===-1&&!!L(s.baseEncodingName)){var Ae=[];if(s.baseEncodingName===\"MacRomanEncoding\"||s.baseEncodingName===\"WinAnsiEncoding\"){Ae=L(s.baseEncodingName)}var Ie=B();for(he=0;he<256;he++){var Be,Re;if(this.differences&&he in this.differences){Be=this.differences[he]}else if(he in Ae&&Ae[he]!==\"\"){Be=Ae[he]}else{Be=O[he]}if(!Be){continue}Re=ce(Be,Ie);var Te,Oe=false;if(we===3&&Ce===1){Te=Ie[Re];Oe=true}else if(we===1&&Ce===0){Te=P.indexOf(Re)}var Pe=false;for(_=0;_<Se;++_){if(xe[_].charCode!==Te){continue}var Ee=Oe?he:Te;if(pe(xe[_].glyphId,Ee,-1)){le[he]=xe[_].glyphId;Pe=true;break}}if(!Pe&&s.glyphNames){var Me=s.glyphNames.indexOf(Be);if(Me===-1&&Re!==Be){Me=s.glyphNames.indexOf(Re)}if(Me>0&&pe(Me,-1,-1)){le[he]=Me;Pe=true}}if(!Pe){le[he]=0}}}else if(we===0&&Ce===0){for(_=0;_<Se;++_){le[xe[_].charCode]=xe[_].glyphId}}else{for(_=0;_<Se;++_){he=xe[_].charCode&255;le[he]=xe[_].glyphId}}}if(le.length===0){le[0]=0}var Le=b(le,s);this.toFontChar=Le.toFontChar;q[\"cmap\"]={tag:\"cmap\",data:A(Le.charCodeToGlyphId,J)};if(!q[\"OS/2\"]||!z(q[\"OS/2\"])){q[\"OS/2\"]={tag:\"OS/2\",data:H(s,Le.charCodeToGlyphId,ie)}}if(!q[\"post\"]){q[\"post\"]={tag:\"post\",data:W(s)}}if(!K){try{j=new I(q[\"CFF \"].data);var De=new G(j,s,ae);U=De.parse();var Fe=new X(U);q[\"CFF \"].data=Fe.compile()}catch(e){x(\"Failed to compile font \"+s.loadedName)}}if(!q[\"name\"]){q[\"name\"]={tag:\"name\",data:V(this.name)}}else{var Ue=w(q[\"name\"]);q[\"name\"].data=V(t,Ue)}var je=new de(D.version);for(var qe in q){je.addTable(qe,q[qe].data)}return je.toArray()},convert:function e(t,r,a){a.fixedPitch=false;if(a.builtInEncoding){oe(a,a.builtInEncoding)}var i=r.getGlyphMapping(a);var o=b(i,a);this.toFontChar=o.toFontChar;var l=r.numGlyphs;function c(e,t){var r=null;for(var a in e){if(t===e[a]){if(!r){r=[]}r.push(a|0)}}return r}function h(e,t){for(var r in e){if(t===e[r]){return r|0}}o.charCodeToGlyphId[o.nextAvailableFontCharCode]=t;return o.nextAvailableFontCharCode++}var f=r.seacs;if(ae&&f&&f.length){var d=a.fontMatrix||u;var g=r.getCharset();var v=Object.create(null);for(var p in f){p|=0;var m=f[p];var y=O[m[2]];var k=O[m[3]];var w=g.indexOf(y);var C=g.indexOf(k);if(w<0||C<0){continue}var x={x:m[0]*d[0]+m[1]*d[2]+d[4],y:m[0]*d[1]+m[1]*d[3]+d[5]};var S=c(i,p);if(!S){continue}for(var I=0,B=S.length;I<B;I++){var R=S[I];var T=o.charCodeToGlyphId;var P=h(T,w);var E=h(T,C);v[R]={baseFontCharCode:P,accentFontCharCode:E,accentOffset:x}}}a.seacMap=v}var M=1/(a.fontMatrix||u)[0];var L=new de(\"OTTO\");L.addTable(\"CFF \",r.data);L.addTable(\"OS/2\",H(a,o.charCodeToGlyphId));L.addTable(\"cmap\",A(o.charCodeToGlyphId,l));L.addTable(\"head\",\"\\0\u0001\\0\\0\"+\"\\0\\0\u0010\\0\"+\"\\0\\0\\0\\0\"+\"_\u000f<õ\"+\"\\0\\0\"+s(M)+\"\\0\\0\\0\\0\\v~'\"+\"\\0\\0\\0\\0\\v~'\"+\"\\0\\0\"+s(a.descent)+\"\u000fÿ\"+s(a.ascent)+n(a.italicAngle?2:0)+\"\\0\u0011\"+\"\\0\\0\"+\"\\0\\0\"+\"\\0\\0\");L.addTable(\"hhea\",\"\\0\u0001\\0\\0\"+s(a.ascent)+s(a.descent)+\"\\0\\0\"+\"ÿÿ\"+\"\\0\\0\"+\"\\0\\0\"+\"\\0\\0\"+s(a.capHeight)+s(Math.tan(a.italicAngle)*a.xHeight)+\"\\0\\0\"+\"\\0\\0\"+\"\\0\\0\"+\"\\0\\0\"+\"\\0\\0\"+\"\\0\\0\"+n(l));L.addTable(\"hmtx\",function e(){var t=r.charstrings;var a=r.cff?r.cff.widths:null;var i=\"\\0\\0\\0\\0\";for(var s=1,o=l;s<o;s++){var c=0;if(t){var h=t[s-1];c=\"width\"in h?h.width:0}else if(a){c=Math.ceil(a[s]||0)}i+=n(c)+n(0)}return i}());L.addTable(\"maxp\",\"\\0\\0P\\0\"+n(l));L.addTable(\"name\",V(t));L.addTable(\"post\",W(a));return L.toArray()},get spaceWidth(){if(\"_shadowWidth\"in this){return this._shadowWidth}var e=[\"space\",\"minus\",\"one\",\"i\",\"I\"];var t;for(var r=0,a=e.length;r<a;r++){var i=e[r];if(i in this.widths){t=this.widths[i];break}var n=B();var s=n[i];var o=0;if(this.composite){if(this.cMap.contains(s)){o=this.cMap.lookup(s)}}if(!o&&this.toUnicode){o=this.toUnicode.charCodeOf(s)}if(o<=0){o=s}t=this.widths[o];if(t){break}}t=t||this.defaultWidth;this._shadowWidth=t;return t},charToGlyph:function e(t,r){var a,i,n;var s=t;if(this.cMap&&this.cMap.contains(t)){s=this.cMap.lookup(t)}i=this.widths[s];i=y(i)?i:this.defaultWidth;var o=this.vmetrics&&this.vmetrics[s];var l=this.toUnicode.get(t)||t;if(typeof l===\"number\"){l=String.fromCharCode(l)}var c=t in this.toFontChar;a=this.toFontChar[t]||t;if(this.missingFile){a=N(a)}if(this.isType3Font){n=a}var h=null;if(this.seacMap&&this.seacMap[t]){c=true;var u=this.seacMap[t];a=u.baseFontCharCode;h={fontChar:String.fromCharCode(u.accentFontCharCode),offset:u.accentOffset}}var f=String.fromCharCode(a);var d=this.glyphCache[t];if(!d||!d.matchesForCache(f,l,h,i,o,n,r,c)){d=new he(f,l,h,i,o,n,r,c);this.glyphCache[t]=d}return d},charsToGlyphs:function e(t){var r=this.charsCache;var a,i,n;if(r){a=r[t];if(a){return a}}if(!r){r=this.charsCache=Object.create(null)}a=[];var s=t;var o=0,l;if(this.cMap){var c=Object.create(null);while(o<t.length){this.cMap.readCharCode(t,o,c);n=c.charcode;var h=c.length;o+=h;var u=h===1&&t.charCodeAt(o-1)===32;i=this.charToGlyph(n,u);a.push(i)}}else{for(o=0,l=t.length;o<l;++o){n=t.charCodeAt(o);i=this.charToGlyph(n,n===32);a.push(i)}}return r[s]=a}};return t}();var pe=function e(){function t(e){this.error=e;this.loadedName=\"g_font_error\";this.loading=false}t.prototype={charsToGlyphs:function e(){return[]},exportData:function e(){return{error:this.error}}};return t}();function me(e,t,r){var a=Object.create(null);var i,n,s;var o=!!(e.flags&ie.Symbolic);if(e.baseEncodingName){s=L(e.baseEncodingName);for(n=0;n<s.length;n++){i=r.indexOf(s[n]);if(i>=0){a[n]=i}else{a[n]=0}}}else if(o){for(n in t){a[n]=t[n]}}else{s=O;for(n=0;n<s.length;n++){i=r.indexOf(s[n]);if(i>=0){a[n]=i}else{a[n]=0}}}var l=e.differences,c;if(l){for(n in l){var h=l[n];i=r.indexOf(h);if(i===-1){if(!c){c=B()}var u=ce(h,c);if(u!==h){i=r.indexOf(u)}}if(i>=0){a[n]=i}else{a[n]=0}}}return a}var be=function e(){function t(e,t,r){var a=e.length;var i=t.length;var n=a-i;var s=r,o,l=false;while(s<n){o=0;while(o<i&&e[s+o]===t[o]){o++}if(o>=i){s+=o;while(s<a&&A(e[s])){s++}l=true;break}s++}return{found:l,length:s}}function r(e,r){var a=[101,101,120,101,99];var i=e.pos;var n,s,o;try{n=e.getBytes(r);s=n.length}catch(e){if(e instanceof S){throw e}}if(s===r){o=t(n,a,r-2*a.length);if(o.found&&o.length===r){return{stream:new I(n),length:r}}}x('Invalid \"Length1\" property in Type1 font -- trying to recover.');e.pos=i;var l=2048;var c;while(true){var h=e.peekBytes(l);o=t(h,a,0);if(o.length===0){break}e.pos+=o.length;if(o.found){c=e.pos-i;break}}e.pos=i;if(c){return{stream:new I(e.getBytes(c)),length:c}}x('Unable to recover \"Length1\" property in Type1 font -- using as is.');return{stream:new I(e.getBytes(r)),length:r}}function a(e,t){var r=e.getBytes();return{stream:new I(r),length:r.length}}function i(e,t,i){var n=6;var s=i.length1;var o=i.length2;var l=t.peekBytes(n);var c=l[0]===128&&l[1]===1;if(c){t.skip(n);s=l[5]<<24|l[4]<<16|l[3]<<8|l[2]}var h=r(t,s);s=h.length;var u=new z(h.stream,false,ae);u.extractFontHeader(i);if(c){l=t.getBytes(n);o=l[5]<<24|l[4]<<16|l[3]<<8|l[2]}var f=a(t,o);o=f.length;var d=new z(f.stream,true,ae);var g=d.extractFontProgram();for(var v in g.properties){i[v]=g.properties[v]}var p=g.charstrings;var m=this.getType2Charstrings(p);var b=this.getType2Subrs(g.subrs);this.charstrings=p;this.data=this.wrap(e,m,this.charstrings,b,i);this.seacs=this.getSeacs(g.charstrings)}i.prototype={get numGlyphs(){return this.charstrings.length+1},getCharset:function e(){var t=[\".notdef\"];var r=this.charstrings;for(var a=0;a<r.length;a++){t.push(r[a].glyphName)}return t},getGlyphMapping:function e(t){var r=this.charstrings;var a=[\".notdef\"],i;for(i=0;i<r.length;i++){a.push(r[i].glyphName)}var n=t.builtInEncoding;if(n){var s=Object.create(null);for(var o in n){i=a.indexOf(n[o]);if(i>=0){s[o]=i}}}return me(t,s,a)},getSeacs:function e(t){var r,a;var i=[];for(r=0,a=t.length;r<a;r++){var n=t[r];if(n.seac){i[r+1]=n.seac}}return i},getType2Charstrings:function e(t){var r=[];for(var a=0,i=t.length;a<i;a++){r.push(t[a].charstring)}return r},getType2Subrs:function e(t){var r=0;var a=t.length;if(a<1133){r=107}else if(a<33769){r=1131}else{r=32768}var i=[];var n;for(n=0;n<r;n++){i.push([11])}for(n=0;n<a;n++){i.push(t[n])}return i},wrap:function e(t,r,a,i,n){var s=new W;s.header=new V(1,0,4,4);s.names=[t];var o=new K;o.setByName(\"version\",391);o.setByName(\"Notice\",392);o.setByName(\"FullName\",393);o.setByName(\"FamilyName\",394);o.setByName(\"Weight\",395);o.setByName(\"Encoding\",null);o.setByName(\"FontMatrix\",n.fontMatrix);o.setByName(\"FontBBox\",n.bbox);o.setByName(\"charset\",null);o.setByName(\"CharStrings\",null);o.setByName(\"Private\",null);s.topDict=o;var l=new J;l.add(\"Version 0.11\");l.add(\"See original notice\");l.add(t);l.add(t);l.add(\"Medium\");s.strings=l;s.globalSubrIndex=new Z;var c=r.length;var h=[0];var u,f;for(u=0;u<c;u++){var d=H.indexOf(a[u].glyphName);if(d===-1){d=0}h.push(d>>8&255,d&255)}s.charset=new Q(false,0,[],h);var g=new Z;g.add([139,14]);for(u=0;u<c;u++){var v=r[u];if(v.length===0){g.add([139,14]);continue}g.add(v)}s.charStrings=g;var p=new Y;p.setByName(\"Subrs\",null);var b=[\"BlueValues\",\"OtherBlues\",\"FamilyBlues\",\"FamilyOtherBlues\",\"StemSnapH\",\"StemSnapV\",\"BlueShift\",\"BlueFuzz\",\"BlueScale\",\"LanguageGroup\",\"ExpansionFactor\",\"ForceBold\",\"StdHW\",\"StdVW\"];for(u=0,f=b.length;u<f;u++){var y=b[u];if(!(y in n.privateData)){continue}var k=n.privateData[y];if(m(k)){for(var w=k.length-1;w>0;w--){k[w]-=k[w-1]}}p.setByName(y,k)}s.topDict.privateDict=p;var C=new Z;for(u=0,f=i.length;u<f;u++){C.add(i[u])}p.subrsIndex=C;var x=new X(s);return x.compile()}};return i}();var ye=function e(){function t(e,t){this.properties=t;var r=new G(e,t,ae);this.cff=r.parse();var a=new X(this.cff);this.seacs=this.cff.seacs;try{this.data=a.compile()}catch(r){x(\"Failed to compile font \"+t.loadedName);this.data=e}}t.prototype={get numGlyphs(){return this.cff.charStrings.count},getCharset:function e(){return this.cff.charset.charset},getGlyphMapping:function e(){var t=this.cff;var r=this.properties;var a=t.charset.charset;var i;var n;if(r.composite){i=Object.create(null);if(t.isCIDFont){for(n=0;n<a.length;n++){var s=a[n];var o=r.cMap.charCodeOf(s);i[o]=n}}else{for(n=0;n<t.charStrings.count;n++){i[n]=n}}return i}var l=t.encoding?t.encoding.encoding:null;i=me(r,l,a);return i}};return t}();(function e(){if(typeof navigator!==\"undefined\"&&/Windows/.test(navigator.userAgent)){ae=true}})();(function e(){if(typeof navigator!==\"undefined\"&&/Windows.*Chrome/.test(navigator.userAgent)){te=true}})();e.ErrorFont=pe;e.Font=ve;e.FontFlags=ie;e.IdentityToUnicodeMap=fe;e.ToUnicodeMap=ue;e.getFontType=le});(function(e,t){t(e.pdfjsCorePsParser={},e.pdfjsSharedUtil,e.pdfjsCoreParser)})(this,function(e,t,r){var a=t.error;var i=t.isSpace;var n=r.EOF;var s=function e(){function t(e){this.lexer=e;this.operators=[];this.token=null;this.prev=null}t.prototype={nextToken:function e(){this.prev=this.token;this.token=this.lexer.getToken()},accept:function e(t){if(this.token.type===t){this.nextToken();return true}return false},expect:function e(t){if(this.accept(t)){return true}a(\"Unexpected symbol: found \"+this.token.type+\" expected \"+t+\".\")},parse:function e(){this.nextToken();this.expect(o.LBRACE);this.parseBlock();this.expect(o.RBRACE);return this.operators},parseBlock:function e(){while(true){if(this.accept(o.NUMBER)){this.operators.push(this.prev.value)}else if(this.accept(o.OPERATOR)){this.operators.push(this.prev.value)}else if(this.accept(o.LBRACE)){this.parseCondition()}else{return}}},parseCondition:function e(){var t=this.operators.length;this.operators.push(null,null);this.parseBlock();this.expect(o.RBRACE);if(this.accept(o.IF)){this.operators[t]=this.operators.length;this.operators[t+1]=\"jz\"}else if(this.accept(o.LBRACE)){var r=this.operators.length;this.operators.push(null,null);var i=this.operators.length;this.parseBlock();this.expect(o.RBRACE);this.expect(o.IFELSE);this.operators[r]=this.operators.length;this.operators[r+1]=\"j\";this.operators[t]=i;this.operators[t+1]=\"jz\"}else{a(\"PS Function: error parsing conditional.\")}}};return t}();var o={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};var l=function e(){function t(e,t){this.type=e;this.value=t}var r=Object.create(null);t.getOperator=function e(a){var i=r[a];if(i){return i}return r[a]=new t(o.OPERATOR,a)};t.LBRACE=new t(o.LBRACE,\"{\");t.RBRACE=new t(o.RBRACE,\"}\");t.IF=new t(o.IF,\"IF\");t.IFELSE=new t(o.IFELSE,\"IFELSE\");return t}();var c=function e(){function t(e){this.stream=e;this.nextChar();this.strBuf=[]}t.prototype={nextChar:function e(){return this.currentChar=this.stream.getByte()},getToken:function e(){var t=false;var r=this.currentChar;while(true){if(r<0){return n}if(t){if(r===10||r===13){t=false}}else if(r===37){t=true}else if(!i(r)){break}r=this.nextChar()}switch(r|0){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new l(o.NUMBER,this.getNumber());case 123:this.nextChar();return l.LBRACE;case 125:this.nextChar();return l.RBRACE}var a=this.strBuf;a.length=0;a[0]=String.fromCharCode(r);while((r=this.nextChar())>=0&&(r>=65&&r<=90||r>=97&&r<=122)){a.push(String.fromCharCode(r))}var s=a.join(\"\");switch(s.toLowerCase()){case\"if\":return l.IF;case\"ifelse\":return l.IFELSE;default:return l.getOperator(s)}},getNumber:function e(){var t=this.currentChar;var r=this.strBuf;r.length=0;r[0]=String.fromCharCode(t);while((t=this.nextChar())>=0){if(t>=48&&t<=57||t===45||t===46){r.push(String.fromCharCode(t))}else{break}}var i=parseFloat(r.join(\"\"));if(isNaN(i)){a(\"Invalid floating point number: \"+i)}return i}};return t}();e.PostScriptLexer=c;e.PostScriptParser=s});(function(e,t){t(e.pdfjsCoreFunction={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCorePsParser)})(this,function(e,t,r,a){var i=t.error;var n=t.info;var s=t.isArray;var o=t.isBool;var l=r.isDict;var c=r.isStream;var h=a.PostScriptLexer;var u=a.PostScriptParser;var f=function e(){var t=0;var r=2;var a=3;var o=4;return{getSampleArray:function e(t,r,a,i){var n,s;var o=1;for(n=0,s=t.length;n<s;n++){o*=t[n]}o*=r;var l=new Array(o);var c=0;var h=0;var u=1/(Math.pow(2,a)-1);var f=i.getBytes((o*a+7)/8);var d=0;for(n=0;n<o;n++){while(c<a){h<<=8;h|=f[d++];c+=8}c-=a;l[n]=(h>>c)*u;h&=(1<<c)-1}return l},getIR:function e(t,r){var a=r.dict;if(!a){a=r}var n=[this.constructSampled,null,this.constructInterpolated,this.constructStiched,this.constructPostScript];var s=a.get(\"FunctionType\");var o=n[s];if(!o){i(\"Unknown type of function\")}return o.call(this,r,a,t)},fromIR:function e(i){var n=i[0];switch(n){case t:return this.constructSampledFromIR(i);case r:return this.constructInterpolatedFromIR(i);case a:return this.constructStichedFromIR(i);default:return this.constructPostScriptFromIR(i)}},parse:function e(t,r){var a=this.getIR(t,r);return this.fromIR(a)},parseArray:function e(t,r){if(!s(r)){return this.parse(t,r)}var a=[];for(var i=0,n=r.length;i<n;i++){var o=t.fetchIfRef(r[i]);a.push(f.parse(t,o))}return function(e,t,r,i){for(var n=0,s=a.length;n<s;n++){a[n](e,t,r,i+n)}}},constructSampled:function e(r,a){function s(e){var t=e.length;var r=[];var a=0;for(var i=0;i<t;i+=2){r[a]=[e[i],e[i+1]];++a}return r}var o=a.getArray(\"Domain\");var l=a.getArray(\"Range\");if(!o||!l){i(\"No domain or range\")}var c=o.length/2;var h=l.length/2;o=s(o);l=s(l);var u=a.get(\"Size\");var f=a.get(\"BitsPerSample\");var d=a.get(\"Order\")||1;if(d!==1){n(\"No support for cubic spline interpolation: \"+d)}var g=a.getArray(\"Encode\");if(!g){g=[];for(var v=0;v<c;++v){g.push(0);g.push(u[v]-1)}}g=s(g);var p=a.getArray(\"Decode\");if(!p){p=l}else{p=s(p)}var m=this.getSampleArray(u,h,f,r);return[t,c,o,g,p,m,u,h,Math.pow(2,f)-1,l]},constructSampledFromIR:function e(t){function r(e,t,r,a,i){return a+(e-t)*((i-a)/(r-t))}return function e(a,i,n,s){var o=t[1];var l=t[2];var c=t[3];var h=t[4];var u=t[5];var f=t[6];var d=t[7];var g=t[9];var v=1<<o;var p=new Float64Array(v);var m=new Uint32Array(v);var b,y;for(y=0;y<v;y++){p[y]=1}var k=d,w=1;for(b=0;b<o;++b){var C=l[b][0];var x=l[b][1];var S=Math.min(Math.max(a[i+b],C),x);var A=r(S,C,x,c[b][0],c[b][1]);var I=f[b];A=Math.min(Math.max(A,0),I-1);var B=A<I-1?Math.floor(A):A-1;var R=B+1-A;var T=A-B;var O=B*k;var P=O+k;for(y=0;y<v;y++){if(y&w){p[y]*=T;m[y]+=P}else{p[y]*=R;m[y]+=O}}k*=I;w<<=1}for(y=0;y<d;++y){var E=0;for(b=0;b<v;b++){E+=u[m[b]+y]*p[b]}E=r(E,0,1,h[y][0],h[y][1]);n[s+y]=Math.min(Math.max(E,g[y][0]),g[y][1])}}},constructInterpolated:function e(t,a){var n=a.getArray(\"C0\")||[0];var o=a.getArray(\"C1\")||[1];var l=a.get(\"N\");if(!s(n)||!s(o)){i(\"Illegal dictionary for interpolated function\")}var c=n.length;var h=[];for(var u=0;u<c;++u){h.push(o[u]-n[u])}return[r,n,h,l]},constructInterpolatedFromIR:function e(t){var r=t[1];var a=t[2];var i=t[3];var n=a.length;return function e(t,s,o,l){var c=i===1?t[s]:Math.pow(t[s],i);for(var h=0;h<n;++h){o[l+h]=r[h]+c*a[h]}}},constructStiched:function e(t,r,n){var s=r.getArray(\"Domain\");if(!s){i(\"No domain\")}var o=s.length/2;if(o!==1){i(\"Bad domain for stiched function\")}var l=r.get(\"Functions\");var c=[];for(var h=0,u=l.length;h<u;++h){c.push(f.getIR(n,n.fetchIfRef(l[h])))}var d=r.getArray(\"Bounds\");var g=r.getArray(\"Encode\");return[a,s,d,g,c]},constructStichedFromIR:function e(t){var r=t[1];var a=t[2];var i=t[3];var n=t[4];var s=[];var o=new Float32Array(1);for(var l=0,c=n.length;l<c;l++){s.push(f.fromIR(n[l]))}return function e(t,n,l,c){var h=function e(t,r,a){if(t>a){t=a}else if(t<r){t=r}return t};var u=h(t[n],r[0],r[1]);for(var f=0,d=a.length;f<d;++f){if(u<a[f]){break}}var g=r[0];if(f>0){g=a[f-1]}var v=r[1];if(f<a.length){v=a[f]}var p=i[2*f];var m=i[2*f+1];o[0]=g===v?p:p+(u-g)*(m-p)/(v-g);s[f](o,0,l,c)}},constructPostScript:function e(t,r,a){var n=r.getArray(\"Domain\");var s=r.getArray(\"Range\");if(!n){i(\"No domain.\")}if(!s){i(\"No range.\")}var l=new h(t);var c=new u(l);var f=c.parse();return[o,n,s,f]},constructPostScriptFromIR:function e(t){var r=t[1];var a=t[2];var i=t[3];var s=(new p).compile(i,r,a);if(s){return new Function(\"src\",\"srcOffset\",\"dest\",\"destOffset\",s)}n(\"Unable to compile PS function\");var o=a.length>>1;var l=r.length>>1;var c=new v(i);var h=Object.create(null);var u=2048*4;var f=u;var d=new Float32Array(l);return function e(t,r,i,n){var s,u;var g=\"\";var v=d;for(s=0;s<l;s++){u=t[r+s];v[s]=u;g+=u+\"_\"}var p=h[g];if(p!==undefined){i.set(p,n);return}var m=new Float32Array(o);var b=c.execute(v);var y=b.length-o;for(s=0;s<o;s++){u=b[y+s];var k=a[s*2];if(u<k){u=k}else{k=a[s*2+1];if(u>k){u=k}}m[s]=u}if(f>0){f--;h[g]=m}i.set(m,n)}}}}();function d(e){var t;if(typeof e!==\"object\"){return false}else if(l(e)){t=e}else if(c(e)){t=e.dict}else{return false}return t.has(\"FunctionType\")}var g=function e(){var t=100;function r(e){this.stack=!e?[]:Array.prototype.slice.call(e,0)}r.prototype={push:function e(r){if(this.stack.length>=t){i(\"PostScript function stack overflow.\")}this.stack.push(r)},pop:function e(){if(this.stack.length<=0){i(\"PostScript function stack underflow.\")}return this.stack.pop()},copy:function e(r){if(this.stack.length+r>=t){i(\"PostScript function stack overflow.\")}var a=this.stack;for(var n=a.length-r,s=r-1;s>=0;s--,n++){a.push(a[n])}},index:function e(t){this.push(this.stack[this.stack.length-t-1])},roll:function e(t,r){var a=this.stack;var i=a.length-t;var n=a.length-1,s=i+(r-Math.floor(r/t)*t),o,l,c;for(o=i,l=n;o<l;o++,l--){c=a[o];a[o]=a[l];a[l]=c}for(o=i,l=s-1;o<l;o++,l--){c=a[o];a[o]=a[l];a[l]=c}for(o=s,l=n;o<l;o++,l--){c=a[o];a[o]=a[l];a[l]=c}}};return r}();var v=function e(){function t(e){this.operators=e}t.prototype={execute:function e(t){var r=new g(t);var a=0;var n=this.operators;var s=n.length;var l,c,h;while(a<s){l=n[a++];if(typeof l===\"number\"){r.push(l);continue}switch(l){case\"jz\":h=r.pop();c=r.pop();if(!c){a=h}break;case\"j\":c=r.pop();a=c;break;case\"abs\":c=r.pop();r.push(Math.abs(c));break;case\"add\":h=r.pop();c=r.pop();r.push(c+h);break;case\"and\":h=r.pop();c=r.pop();if(o(c)&&o(h)){r.push(c&&h)}else{r.push(c&h)}break;case\"atan\":c=r.pop();r.push(Math.atan(c));break;case\"bitshift\":h=r.pop();c=r.pop();if(c>0){r.push(c<<h)}else{r.push(c>>h)}break;case\"ceiling\":c=r.pop();r.push(Math.ceil(c));break;case\"copy\":c=r.pop();r.copy(c);break;case\"cos\":c=r.pop();r.push(Math.cos(c));break;case\"cvi\":c=r.pop()|0;r.push(c);break;case\"cvr\":break;case\"div\":h=r.pop();c=r.pop();r.push(c/h);break;case\"dup\":r.copy(1);break;case\"eq\":h=r.pop();c=r.pop();r.push(c===h);break;case\"exch\":r.roll(2,1);break;case\"exp\":h=r.pop();c=r.pop();r.push(Math.pow(c,h));break;case\"false\":r.push(false);break;case\"floor\":c=r.pop();r.push(Math.floor(c));break;case\"ge\":h=r.pop();c=r.pop();r.push(c>=h);break;case\"gt\":h=r.pop();c=r.pop();r.push(c>h);break;case\"idiv\":h=r.pop();c=r.pop();r.push(c/h|0);break;case\"index\":c=r.pop();r.index(c);break;case\"le\":h=r.pop();c=r.pop();r.push(c<=h);break;case\"ln\":c=r.pop();r.push(Math.log(c));break;case\"log\":c=r.pop();r.push(Math.log(c)/Math.LN10);break;case\"lt\":h=r.pop();c=r.pop();r.push(c<h);break;case\"mod\":h=r.pop();c=r.pop();r.push(c%h);break;case\"mul\":h=r.pop();c=r.pop();r.push(c*h);break;case\"ne\":h=r.pop();c=r.pop();r.push(c!==h);break;case\"neg\":c=r.pop();r.push(-c);break;case\"not\":c=r.pop();if(o(c)){r.push(!c)}else{r.push(~c)}break;case\"or\":h=r.pop();c=r.pop();if(o(c)&&o(h)){r.push(c||h)}else{r.push(c|h)}break;case\"pop\":r.pop();break;case\"roll\":h=r.pop();c=r.pop();r.roll(c,h);break;case\"round\":c=r.pop();r.push(Math.round(c));break;case\"sin\":c=r.pop();r.push(Math.sin(c));break;case\"sqrt\":c=r.pop();r.push(Math.sqrt(c));break;case\"sub\":h=r.pop();c=r.pop();r.push(c-h);break;case\"true\":r.push(true);break;case\"truncate\":c=r.pop();c=c<0?Math.ceil(c):Math.floor(c);r.push(c);break;case\"xor\":h=r.pop();c=r.pop();if(o(c)&&o(h)){r.push(c!==h)}else{r.push(c^h)}break;default:i(\"Unknown operator \"+l);break}}return r.stack}};return t}();var p=function e(){function t(e){this.type=e}t.prototype.visit=function(e){throw new Error(\"abstract method\")};function r(e,r,a){t.call(this,\"args\");this.index=e;this.min=r;this.max=a}r.prototype=Object.create(t.prototype);r.prototype.visit=function(e){e.visitArgument(this)};function a(e){t.call(this,\"literal\");this.number=e;this.min=e;this.max=e}a.prototype=Object.create(t.prototype);a.prototype.visit=function(e){e.visitLiteral(this)};function i(e,r,a,i,n){t.call(this,\"binary\");this.op=e;this.arg1=r;this.arg2=a;this.min=i;this.max=n}i.prototype=Object.create(t.prototype);i.prototype.visit=function(e){e.visitBinaryOperation(this)};function n(e,r){t.call(this,\"max\");this.arg=e;this.min=e.min;this.max=r}n.prototype=Object.create(t.prototype);n.prototype.visit=function(e){e.visitMin(this)};function s(e,r,a){t.call(this,\"var\");this.index=e;this.min=r;this.max=a}s.prototype=Object.create(t.prototype);s.prototype.visit=function(e){e.visitVariable(this)};function o(e,r){t.call(this,\"definition\");this.variable=e;this.arg=r}o.prototype=Object.create(t.prototype);o.prototype.visit=function(e){e.visitVariableDefinition(this)};function l(){this.parts=[]}l.prototype={visitArgument:function(e){this.parts.push(\"Math.max(\",e.min,\", Math.min(\",e.max,\", src[srcOffset + \",e.index,\"]))\")},visitVariable:function(e){this.parts.push(\"v\",e.index)},visitLiteral:function(e){this.parts.push(e.number)},visitBinaryOperation:function(e){this.parts.push(\"(\");e.arg1.visit(this);this.parts.push(\" \",e.op,\" \");e.arg2.visit(this);this.parts.push(\")\")},visitVariableDefinition:function(e){this.parts.push(\"var \");e.variable.visit(this);this.parts.push(\" = \");e.arg.visit(this);this.parts.push(\";\")},visitMin:function(e){this.parts.push(\"Math.min(\");e.arg.visit(this);this.parts.push(\", \",e.max,\")\")},toString:function(){return this.parts.join(\"\")}};function c(e,t){if(t.type===\"literal\"&&t.number===0){return e}if(e.type===\"literal\"&&e.number===0){return t}if(t.type===\"literal\"&&e.type===\"literal\"){return new a(e.number+t.number)}return new i(\"+\",e,t,e.min+t.min,e.max+t.max)}function h(e,t){if(t.type===\"literal\"){if(t.number===0){return new a(0)}else if(t.number===1){return e}else if(e.type===\"literal\"){return new a(e.number*t.number)}}if(e.type===\"literal\"){if(e.number===0){return new a(0)}else if(e.number===1){return t}}var r=Math.min(e.min*t.min,e.min*t.max,e.max*t.min,e.max*t.max);var n=Math.max(e.min*t.min,e.min*t.max,e.max*t.min,e.max*t.max);return new i(\"*\",e,t,r,n)}function u(e,t){if(t.type===\"literal\"){if(t.number===0){return e}else if(e.type===\"literal\"){return new a(e.number-t.number)}}if(t.type===\"binary\"&&t.op===\"-\"&&e.type===\"literal\"&&e.number===1&&t.arg1.type===\"literal\"&&t.arg1.number===1){return t.arg2}return new i(\"-\",e,t,e.min-t.max,e.max-t.min)}function f(e,t){if(e.min>=t){return new a(t)}else if(e.max<=t){return e}return new n(e,t)}function d(){}d.prototype={compile:function e(t,i,n){var d=[];var g,v;var p=[];var m=i.length>>1,b=n.length>>1;var y=0;var k,w;var C,x,S,A,I,B;for(g=0;g<m;g++){d.push(new r(g,i[g*2],i[g*2+1]))}for(g=0,v=t.length;g<v;g++){B=t[g];if(typeof B===\"number\"){d.push(new a(B));continue}switch(B){case\"add\":if(d.length<2){return null}x=d.pop();C=d.pop();d.push(c(C,x));break;case\"cvr\":if(d.length<1){return null}break;case\"mul\":if(d.length<2){return null}x=d.pop();C=d.pop();d.push(h(C,x));break;case\"sub\":if(d.length<2){return null}x=d.pop();C=d.pop();d.push(u(C,x));break;case\"exch\":if(d.length<2){return null}S=d.pop();A=d.pop();d.push(S,A);break;case\"pop\":if(d.length<1){return null}d.pop();break;case\"index\":if(d.length<1){return null}C=d.pop();if(C.type!==\"literal\"){return null}k=C.number;if(k<0||(k|0)!==k||d.length<k){return null}S=d[d.length-k-1];if(S.type===\"literal\"||S.type===\"var\"){d.push(S);break}I=new s(y++,S.min,S.max);d[d.length-k-1]=I;d.push(I);p.push(new o(I,S));break;case\"dup\":if(d.length<1){return null}if(typeof t[g+1]===\"number\"&&t[g+2]===\"gt\"&&t[g+3]===g+7&&t[g+4]===\"jz\"&&t[g+5]===\"pop\"&&t[g+6]===t[g+1]){C=d.pop();d.push(f(C,t[g+1]));g+=6;break}S=d[d.length-1];if(S.type===\"literal\"||S.type===\"var\"){d.push(S);break}I=new s(y++,S.min,S.max);d[d.length-1]=I;d.push(I);p.push(new o(I,S));break;case\"roll\":if(d.length<2){return null}x=d.pop();C=d.pop();if(x.type!==\"literal\"||C.type!==\"literal\"){return null}w=x.number;k=C.number;if(k<=0||(k|0)!==k||(w|0)!==w||d.length<k){return null}w=(w%k+k)%k;if(w===0){break}Array.prototype.push.apply(d,d.splice(d.length-k,k-w));break;default:return null}}if(d.length!==b){return null}var R=[];p.forEach(function(e){var t=new l;e.visit(t);R.push(t.toString())});d.forEach(function(e,t){var r=new l;e.visit(r);var a=n[t*2],i=n[t*2+1];var s=[r.toString()];if(a>e.min){s.unshift(\"Math.max(\",a,\", \");s.push(\")\")}if(i<e.max){s.unshift(\"Math.min(\",i,\", \");s.push(\")\")}s.unshift(\"dest[destOffset + \",t,\"] = \");s.push(\";\");R.push(s.join(\"\"))});return R.join(\"\\n\")}};return d}();e.isPDFFunction=d;e.PDFFunction=f;e.PostScriptEvaluator=v;e.PostScriptCompiler=p});(function(e,t){t(e.pdfjsCoreColorSpace={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreFunction)})(this,function(e,t,r,a){var i=t.error;var n=t.info;var s=t.isArray;var o=t.isString;var l=t.shadow;var c=t.warn;var h=r.isDict;var u=r.isName;var f=r.isStream;var d=a.PDFFunction;var g=function e(){function t(e,t,r,a,i,n,s,o){var l=3;s=s!==1?0:s;var c=r/i;var h=a/n;var u,f,d,g=0,v;var p=new Uint16Array(i);var m=r*l;for(u=0;u<i;u++){p[u]=Math.floor(u*c)*l}for(u=0;u<n;u++){d=Math.floor(u*h)*m;for(f=0;f<i;f++){v=d+p[f];o[g++]=e[v++];o[g++]=e[v++];o[g++]=e[v++];g+=s}}}function r(){i(\"should not call ColorSpace constructor\")}r.prototype={getRgb:function e(t,r){var a=new Uint8Array(3);this.getRgbItem(t,r,a,0);return a},getRgbItem:function e(t,r,a,n){i(\"Should not call ColorSpace.getRgbItem\")},getRgbBuffer:function e(t,r,a,n,s,o,l){i(\"Should not call ColorSpace.getRgbBuffer\")},getOutputLength:function e(t,r){i(\"Should not call ColorSpace.getOutputLength\")},isPassthrough:function e(t){return false},fillRgb:function e(r,a,i,n,s,o,l,c,h){var u=a*i;var f=null;var d=1<<l;var g=i!==s||a!==n;var v,p;if(this.isPassthrough(l)){f=c}else if(this.numComps===1&&u>d&&this.name!==\"DeviceGray\"&&this.name!==\"DeviceRGB\"){var m=l<=8?new Uint8Array(d):new Uint16Array(d);var b;for(v=0;v<d;v++){m[v]=v}var y=new Uint8Array(d*3);this.getRgbBuffer(m,0,d,y,0,l,0);var k,w;if(!g){k=0;for(v=0;v<u;++v){b=c[v]*3;r[k++]=y[b];r[k++]=y[b+1];r[k++]=y[b+2];k+=h}}else{f=new Uint8Array(u*3);w=0;for(v=0;v<u;++v){b=c[v]*3;f[w++]=y[b];f[w++]=y[b+1];f[w++]=y[b+2]}}}else{if(!g){this.getRgbBuffer(c,0,n*o,r,0,l,h)}else{f=new Uint8Array(u*3);this.getRgbBuffer(c,0,u,f,0,l,0)}}if(f){if(g){t(f,l,a,i,n,s,h,r)}else{w=0;k=0;for(v=0,p=n*o;v<p;v++){r[k++]=f[w++];r[k++]=f[w++];r[k++]=f[w++];k+=h}}}},usesZeroToOneRange:true};r.parse=function e(t,a,i){var n=r.parseToIR(t,a,i);if(n instanceof v){return n}return r.fromIR(n)};r.fromIR=function e(t){var a=s(t)?t[0]:t;var n,o,l;switch(a){case\"DeviceGrayCS\":return this.singletons.gray;case\"DeviceRgbCS\":return this.singletons.rgb;case\"DeviceCmykCS\":return this.singletons.cmyk;case\"CalGrayCS\":n=t[1];o=t[2];l=t[3];return new w(n,o,l);case\"CalRGBCS\":n=t[1];o=t[2];l=t[3];var c=t[4];return new C(n,o,l,c);case\"PatternCS\":var h=t[1];if(h){h=r.fromIR(h)}return new p(h);case\"IndexedCS\":var u=t[1];var f=t[2];var g=t[3];return new m(r.fromIR(u),f,g);case\"AlternateCS\":var b=t[1];var y=t[2];var k=t[3];return new v(b,r.fromIR(y),d.fromIR(k));case\"LabCS\":n=t[1];o=t[2];var S=t[3];return new x(n,o,S);default:i(\"Unknown name \"+a)}return null};r.parseToIR=function e(t,a,n){if(u(t)){var o=n.get(\"ColorSpace\");if(h(o)){var l=o.get(t.name);if(l){t=l}}}t=a.fetchIfRef(t);if(u(t)){switch(t.name){case\"DeviceGray\":case\"G\":return\"DeviceGrayCS\";case\"DeviceRGB\":case\"RGB\":return\"DeviceRgbCS\";case\"DeviceCMYK\":case\"CMYK\":return\"DeviceCmykCS\";case\"Pattern\":return[\"PatternCS\",null];default:i(\"unrecognized colorspace \"+t.name)}}else if(s(t)){var g=a.fetchIfRef(t[0]).name;var v,p,m,b,y,k;switch(g){case\"DeviceGray\":case\"G\":return\"DeviceGrayCS\";case\"DeviceRGB\":case\"RGB\":return\"DeviceRgbCS\";case\"DeviceCMYK\":case\"CMYK\":return\"DeviceCmykCS\";case\"CalGray\":p=a.fetchIfRef(t[1]);b=p.getArray(\"WhitePoint\");y=p.getArray(\"BlackPoint\");k=p.get(\"Gamma\");return[\"CalGrayCS\",b,y,k];case\"CalRGB\":p=a.fetchIfRef(t[1]);b=p.getArray(\"WhitePoint\");y=p.getArray(\"BlackPoint\");k=p.getArray(\"Gamma\");var w=p.getArray(\"Matrix\");return[\"CalRGBCS\",b,y,k,w];case\"ICCBased\":var C=a.fetchIfRef(t[1]);var x=C.dict;v=x.get(\"N\");m=x.get(\"Alternate\");if(m){var S=r.parseToIR(m,a,n);var A=r.fromIR(S);if(A.numComps===v){return S}c(\"ICCBased color space: Ignoring incorrect /Alternate entry.\")}if(v===1){return\"DeviceGrayCS\"}else if(v===3){return\"DeviceRgbCS\"}else if(v===4){return\"DeviceCmykCS\"}break;case\"Pattern\":var I=t[1]||null;if(I){I=r.parseToIR(I,a,n)}return[\"PatternCS\",I];case\"Indexed\":case\"I\":var B=r.parseToIR(t[1],a,n);var R=a.fetchIfRef(t[2])+1;var T=a.fetchIfRef(t[3]);if(f(T)){T=T.getBytes()}return[\"IndexedCS\",B,R,T];case\"Separation\":case\"DeviceN\":var O=a.fetchIfRef(t[1]);v=s(O)?O.length:1;m=r.parseToIR(t[2],a,n);var P=d.getIR(a,a.fetchIfRef(t[3]));return[\"AlternateCS\",v,m,P];case\"Lab\":p=a.fetchIfRef(t[1]);b=p.getArray(\"WhitePoint\");y=p.getArray(\"BlackPoint\");var E=p.getArray(\"Range\");return[\"LabCS\",b,y,E];default:i('unimplemented color space object \"'+g+'\"')}}else{i('unrecognized color space object: \"'+t+'\"')}return null};r.isDefaultDecode=function e(t,r){if(!s(t)){return true}if(r*2!==t.length){c(\"The decode map is not the correct length\");return true}for(var a=0,i=t.length;a<i;a+=2){if(t[a]!==0||t[a+1]!==1){return false}}return true};r.singletons={get gray(){return l(this,\"gray\",new b)},get rgb(){return l(this,\"rgb\",new y)},get cmyk(){return l(this,\"cmyk\",new k)}};return r}();var v=function e(){function t(e,t,r){this.name=\"Alternate\";this.numComps=e;this.defaultColor=new Float32Array(e);for(var a=0;a<e;++a){this.defaultColor[a]=1}this.base=t;this.tintFn=r;this.tmpBuf=new Float32Array(t.numComps)}t.prototype={getRgb:g.prototype.getRgb,getRgbItem:function e(t,r,a,i){var n=this.tmpBuf;this.tintFn(t,r,n,0);this.base.getRgbItem(n,0,a,i)},getRgbBuffer:function e(t,r,a,i,n,s,o){var l=this.tintFn;var c=this.base;var h=1/((1<<s)-1);var u=c.numComps;var f=c.usesZeroToOneRange;var d=(c.isPassthrough(8)||!f)&&o===0;var g=d?n:0;var v=d?i:new Uint8Array(u*a);var p=this.numComps;var m=new Float32Array(p);var b=new Float32Array(u);var y,k;for(y=0;y<a;y++){for(k=0;k<p;k++){m[k]=t[r++]*h}l(m,0,b,0);if(f){for(k=0;k<u;k++){v[g++]=b[k]*255}}else{c.getRgbItem(b,0,v,g);g+=u}}if(!d){c.getRgbBuffer(v,0,a,i,n,8,o)}},getOutputLength:function e(t,r){return this.base.getOutputLength(t*this.base.numComps/this.numComps,r)},isPassthrough:g.prototype.isPassthrough,fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return g.isDefaultDecode(t,this.numComps)},usesZeroToOneRange:true};return t}();var p=function e(){function t(e){this.name=\"Pattern\";this.base=e}t.prototype={};return t}();var m=function e(){function t(e,t,r){this.name=\"Indexed\";this.numComps=1;this.defaultColor=new Uint8Array(this.numComps);this.base=e;this.highVal=t;var a=e.numComps;var n=a*t;if(f(r)){this.lookup=new Uint8Array(n);var s=r.getBytes(n);this.lookup.set(s)}else if(o(r)){this.lookup=new Uint8Array(n);for(var l=0;l<n;++l){this.lookup[l]=r.charCodeAt(l)}}else if(r instanceof Uint8Array||r instanceof Array){this.lookup=r}else{i(\"Unrecognized lookup table: \"+r)}}t.prototype={getRgb:g.prototype.getRgb,getRgbItem:function e(t,r,a,i){var n=this.base.numComps;var s=t[r]*n;this.base.getRgbItem(this.lookup,s,a,i)},getRgbBuffer:function e(t,r,a,i,n,s,o){var l=this.base;var c=l.numComps;var h=l.getOutputLength(c,o);var u=this.lookup;for(var f=0;f<a;++f){var d=t[r++]*c;l.getRgbBuffer(u,d,1,i,n,8,o);n+=h}},getOutputLength:function e(t,r){return this.base.getOutputLength(t*this.base.numComps,r)},isPassthrough:g.prototype.isPassthrough,fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return true},usesZeroToOneRange:true};return t}();var b=function e(){function t(){this.name=\"DeviceGray\";this.numComps=1;this.defaultColor=new Float32Array(this.numComps)}t.prototype={getRgb:g.prototype.getRgb,getRgbItem:function e(t,r,a,i){var n=t[r]*255|0;n=n<0?0:n>255?255:n;a[i]=a[i+1]=a[i+2]=n},getRgbBuffer:function e(t,r,a,i,n,s,o){var l=255/((1<<s)-1);var c=r,h=n;for(var u=0;u<a;++u){var f=l*t[c++]|0;i[h++]=f;i[h++]=f;i[h++]=f;h+=o}},getOutputLength:function e(t,r){return t*(3+r)},isPassthrough:g.prototype.isPassthrough,fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return g.isDefaultDecode(t,this.numComps)},usesZeroToOneRange:true};return t}();var y=function e(){function t(){this.name=\"DeviceRGB\";this.numComps=3;this.defaultColor=new Float32Array(this.numComps)}t.prototype={getRgb:g.prototype.getRgb,getRgbItem:function e(t,r,a,i){var n=t[r]*255|0;var s=t[r+1]*255|0;var o=t[r+2]*255|0;a[i]=n<0?0:n>255?255:n;a[i+1]=s<0?0:s>255?255:s;a[i+2]=o<0?0:o>255?255:o},getRgbBuffer:function e(t,r,a,i,n,s,o){if(s===8&&o===0){i.set(t.subarray(r,r+a*3),n);return}var l=255/((1<<s)-1);var c=r,h=n;for(var u=0;u<a;++u){i[h++]=l*t[c++]|0;i[h++]=l*t[c++]|0;i[h++]=l*t[c++]|0;h+=o}},getOutputLength:function e(t,r){return t*(3+r)/3|0},isPassthrough:function e(t){return t===8},fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return g.isDefaultDecode(t,this.numComps)},usesZeroToOneRange:true};return t}();var k=function e(){function t(e,t,r,a,i){var n=e[t+0]*r;var s=e[t+1]*r;var o=e[t+2]*r;var l=e[t+3]*r;var c=n*(-4.387332384609988*n+54.48615194189176*s+18.82290502165302*o+212.25662451639585*l+-285.2331026137004)+s*(1.7149763477362134*s-5.6096736904047315*o+-17.873870861415444*l-5.497006427196366)+o*(-2.5217340131683033*o-21.248923337353073*l+17.5119270841813)+l*(-21.86122147463605*l-189.48180835922747)+255|0;var h=n*(8.841041422036149*n+60.118027045597366*s+6.871425592049007*o+31.159100130055922*l+-79.2970844816548)+s*(-15.310361306967817*s+17.575251261109482*o+131.35250912493976*l-190.9453302588951)+o*(4.444339102852739*o+9.8632861493405*l-24.86741582555878)+l*(-20.737325471181034*l-187.80453709719578)+255|0;var u=n*(.8842522430003296*n+8.078677503112928*s+30.89978309703729*o-.23883238689178934*l+-14.183576799673286)+s*(10.49593273432072*s+63.02378494754052*o+50.606957656360734*l-112.23884253719248)+o*(.03296041114873217*o+115.60384449646641*l+-193.58209356861505)+l*(-22.33816807309886*l-180.12613974708367)+255|0;a[i]=c>255?255:c<0?0:c;a[i+1]=h>255?255:h<0?0:h;a[i+2]=u>255?255:u<0?0:u}function r(){this.name=\"DeviceCMYK\";this.numComps=4;this.defaultColor=new Float32Array(this.numComps);this.defaultColor[3]=1}r.prototype={getRgb:g.prototype.getRgb,getRgbItem:function e(r,a,i,n){t(r,a,1,i,n)},getRgbBuffer:function e(r,a,i,n,s,o,l){var c=1/((1<<o)-1);for(var h=0;h<i;h++){t(r,a,c,n,s);a+=4;s+=3+l}},getOutputLength:function e(t,r){return t/4*(3+r)|0},isPassthrough:g.prototype.isPassthrough,fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return g.isDefaultDecode(t,this.numComps)},usesZeroToOneRange:true};return r}();var w=function e(){function t(e,t,r){this.name=\"CalGray\";this.numComps=1;this.defaultColor=new Float32Array(this.numComps);if(!e){i(\"WhitePoint missing - required for color space CalGray\")}t=t||[0,0,0];r=r||1;this.XW=e[0];this.YW=e[1];this.ZW=e[2];this.XB=t[0];this.YB=t[1];this.ZB=t[2];this.G=r;if(this.XW<0||this.ZW<0||this.YW!==1){i(\"Invalid WhitePoint components for \"+this.name+\", no fallback available\")}if(this.XB<0||this.YB<0||this.ZB<0){n(\"Invalid BlackPoint for \"+this.name+\", falling back to default\");this.XB=this.YB=this.ZB=0}if(this.XB!==0||this.YB!==0||this.ZB!==0){c(this.name+\", BlackPoint: XB: \"+this.XB+\", YB: \"+this.YB+\", ZB: \"+this.ZB+\", only default values are supported.\")}if(this.G<1){n(\"Invalid Gamma: \"+this.G+\" for \"+this.name+\", falling back to default\");this.G=1}}function r(e,t,r,a,i,n){var s=t[r]*n;var o=Math.pow(s,e.G);var l=e.YW*o;var c=Math.max(295.8*Math.pow(l,.3333333333333333)-40.8,0)|0;a[i]=c;a[i+1]=c;a[i+2]=c}t.prototype={getRgb:g.prototype.getRgb,getRgbItem:function e(t,a,i,n){r(this,t,a,i,n,1)},getRgbBuffer:function e(t,a,i,n,s,o,l){var c=1/((1<<o)-1);for(var h=0;h<i;++h){r(this,t,a,n,s,c);a+=1;s+=3+l}},getOutputLength:function e(t,r){return t*(3+r)},isPassthrough:g.prototype.isPassthrough,fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return g.isDefaultDecode(t,this.numComps)},usesZeroToOneRange:true};return t}();var C=function e(){var t=new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296]);var r=new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867]);var a=new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252]);var s=new Float32Array([1,1,1]);var o=new Float32Array(3);var l=new Float32Array(3);var c=new Float32Array(3);var h=Math.pow((8+16)/116,3)/8;function u(e,t,r,a){this.name=\"CalRGB\";this.numComps=3;this.defaultColor=new Float32Array(this.numComps);if(!e){i(\"WhitePoint missing - required for color space CalRGB\")}t=t||new Float32Array(3);r=r||new Float32Array([1,1,1]);a=a||new Float32Array([1,0,0,0,1,0,0,0,1]);var s=e[0];var o=e[1];var l=e[2];this.whitePoint=e;var c=t[0];var h=t[1];var u=t[2];this.blackPoint=t;this.GR=r[0];this.GG=r[1];this.GB=r[2];this.MXA=a[0];this.MYA=a[1];this.MZA=a[2];this.MXB=a[3];this.MYB=a[4];this.MZB=a[5];this.MXC=a[6];this.MYC=a[7];this.MZC=a[8];if(s<0||l<0||o!==1){i(\"Invalid WhitePoint components for \"+this.name+\", no fallback available\")}if(c<0||h<0||u<0){n(\"Invalid BlackPoint for \"+this.name+\" [\"+c+\", \"+h+\", \"+u+\"], falling back to default\");this.blackPoint=new Float32Array(3)}if(this.GR<0||this.GG<0||this.GB<0){n(\"Invalid Gamma [\"+this.GR+\", \"+this.GG+\", \"+this.GB+\"] for \"+this.name+\", falling back to default\");this.GR=this.GG=this.GB=1}if(this.MXA<0||this.MYA<0||this.MZA<0||this.MXB<0||this.MYB<0||this.MZB<0||this.MXC<0||this.MYC<0||this.MZC<0){n(\"Invalid Matrix for \"+this.name+\" [\"+this.MXA+\", \"+this.MYA+\", \"+this.MZA+this.MXB+\", \"+this.MYB+\", \"+this.MZB+this.MXC+\", \"+this.MYC+\", \"+this.MZC+\"], falling back to default\");this.MXA=this.MYB=this.MZC=1;this.MXB=this.MYA=this.MZA=this.MXC=this.MYC=this.MZB=0}}function f(e,t,r){r[0]=e[0]*t[0]+e[1]*t[1]+e[2]*t[2];r[1]=e[3]*t[0]+e[4]*t[1]+e[5]*t[2];r[2]=e[6]*t[0]+e[7]*t[1]+e[8]*t[2]}function d(e,t,r){r[0]=t[0]*1/e[0];r[1]=t[1]*1/e[1];r[2]=t[2]*1/e[2]}function v(e,t,r){var a=.95047;var i=1;var n=1.08883;r[0]=t[0]*a/e[0];r[1]=t[1]*i/e[1];r[2]=t[2]*n/e[2]}function p(e){if(e<=.0031308){return m(0,1,12.92*e)}return m(0,1,(1+.055)*Math.pow(e,1/2.4)-.055)}function m(e,t,r){return Math.max(e,Math.min(t,r))}function b(e){if(e<0){return-b(-e)}if(e>8){return Math.pow((e+16)/116,3)}return e*h}function y(e,t,r){if(e[0]===0&&e[1]===0&&e[2]===0){r[0]=t[0];r[1]=t[1];r[2]=t[2];return}var a=b(0);var i=a;var n=b(e[0]);var s=a;var o=b(e[1]);var l=a;var c=b(e[2]);var h=(1-i)/(1-n);var u=1-h;var f=(1-s)/(1-o);var d=1-f;var g=(1-l)/(1-c);var v=1-g;r[0]=t[0]*h+u;r[1]=t[1]*f+d;r[2]=t[2]*g+v}function k(e,a,i){if(e[0]===1&&e[2]===1){i[0]=a[0];i[1]=a[1];i[2]=a[2];return}var n=i;f(t,a,n);var s=o;d(e,n,s);f(r,s,i)}function w(e,a,i){var n=i;f(t,a,n);var s=o;v(e,n,s);f(r,s,i)}function C(e,t,r,i,n,o){var h=m(0,1,t[r]*o);var u=m(0,1,t[r+1]*o);var d=m(0,1,t[r+2]*o);var g=Math.pow(h,e.GR);var v=Math.pow(u,e.GG);var b=Math.pow(d,e.GB);var C=e.MXA*g+e.MXB*v+e.MXC*b;var x=e.MYA*g+e.MYB*v+e.MYC*b;var S=e.MZA*g+e.MZB*v+e.MZC*b;var A=l;A[0]=C;A[1]=x;A[2]=S;var I=c;k(e.whitePoint,A,I);var B=l;y(e.blackPoint,I,B);var R=c;w(s,B,R);var T=l;f(a,R,T);var O=p(T[0]);var P=p(T[1]);var E=p(T[2]);i[n]=Math.round(O*255);i[n+1]=Math.round(P*255);i[n+2]=Math.round(E*255)}u.prototype={getRgb:function e(t,r){var a=new Uint8Array(3);this.getRgbItem(t,r,a,0);return a},getRgbItem:function e(t,r,a,i){C(this,t,r,a,i,1)},getRgbBuffer:function e(t,r,a,i,n,s,o){var l=1/((1<<s)-1);for(var c=0;c<a;++c){C(this,t,r,i,n,l);r+=3;n+=3+o}},getOutputLength:function e(t,r){return t*(3+r)/3|0},isPassthrough:g.prototype.isPassthrough,fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return g.isDefaultDecode(t,this.numComps)},usesZeroToOneRange:true};return u}();var x=function e(){function t(e,t,r){this.name=\"Lab\";this.numComps=3;this.defaultColor=new Float32Array(this.numComps);if(!e){i(\"WhitePoint missing - required for color space Lab\")}t=t||[0,0,0];r=r||[-100,100,-100,100];this.XW=e[0];this.YW=e[1];this.ZW=e[2];this.amin=r[0];this.amax=r[1];this.bmin=r[2];this.bmax=r[3];this.XB=t[0];this.YB=t[1];this.ZB=t[2];if(this.XW<0||this.ZW<0||this.YW!==1){i(\"Invalid WhitePoint components, no fallback available\")}if(this.XB<0||this.YB<0||this.ZB<0){n(\"Invalid BlackPoint, falling back to default\");this.XB=this.YB=this.ZB=0}if(this.amin>this.amax||this.bmin>this.bmax){n(\"Invalid Range, falling back to defaults\");this.amin=-100;this.amax=100;this.bmin=-100;this.bmax=100}}function r(e){var t;if(e>=6/29){t=e*e*e}else{t=108/841*(e-4/29)}return t}function a(e,t,r,a){return r+e*(a-r)/t}function s(e,t,i,n,s,o){var l=t[i];var c=t[i+1];var h=t[i+2];if(n!==false){l=a(l,n,0,100);c=a(c,n,e.amin,e.amax);h=a(h,n,e.bmin,e.bmax)}c=c>e.amax?e.amax:c<e.amin?e.amin:c;h=h>e.bmax?e.bmax:h<e.bmin?e.bmin:h;var u=(l+16)/116;var f=u+c/500;var d=u-h/200;var g=e.XW*r(f);var v=e.YW*r(u);var p=e.ZW*r(d);var m,b,y;if(e.ZW<1){m=g*3.1339+v*-1.617+p*-.4906;b=g*-.9785+v*1.916+p*.0333;y=g*.072+v*-.229+p*1.4057}else{m=g*3.2406+v*-1.5372+p*-.4986;b=g*-.9689+v*1.8758+p*.0415;y=g*.0557+v*-.204+p*1.057}s[o]=m<=0?0:m>=1?255:Math.sqrt(m)*255|0;s[o+1]=b<=0?0:b>=1?255:Math.sqrt(b)*255|0;s[o+2]=y<=0?0:y>=1?255:Math.sqrt(y)*255|0}t.prototype={getRgb:g.prototype.getRgb,getRgbItem:function e(t,r,a,i){s(this,t,r,false,a,i)},getRgbBuffer:function e(t,r,a,i,n,o,l){var c=(1<<o)-1;for(var h=0;h<a;h++){s(this,t,r,c,i,n);r+=3;n+=3+l}},getOutputLength:function e(t,r){return t*(3+r)/3|0},isPassthrough:g.prototype.isPassthrough,fillRgb:g.prototype.fillRgb,isDefaultDecode:function e(t){return true},usesZeroToOneRange:false};return t}();e.ColorSpace=g});(function(e,t){t(e.pdfjsCoreImage={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreColorSpace,e.pdfjsCoreStream,e.pdfjsCoreJpx)})(this,function(e,t,r,a,i,n){var s=t.ImageKind;var o=t.assert;var l=t.error;var c=t.info;var h=t.isArray;var u=t.warn;var f=r.Name;var d=r.isStream;var g=a.ColorSpace;var v=i.DecodeStream;var p=i.JpegStream;var m=n.JpxImage;var b=function e(){function t(e,t){if(t&&t.canDecode(e)){return t.decode(e)}return Promise.resolve(e)}function r(e,t,r,a){e=t+e*r;return e<0?0:e>a?a:e}function a(e,t,r,a,i,n){var s=i*n;var o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);var l=r/i;var c=a/n;var h,u,f,d=0,g;var v=new Uint16Array(i);var p=r;for(h=0;h<i;h++){v[h]=Math.floor(h*l)}for(h=0;h<n;h++){f=Math.floor(h*c)*p;for(u=0;u<i;u++){g=f+v[u];o[d++]=e[g]}}return o}function i(e,t,r,a,n,s,o){this.image=r;var h=r.dict;if(h.has(\"Filter\")){var v=h.get(\"Filter\").name;if(v===\"JPXDecode\"){var p=new m;p.parseImageProperties(r.stream);r.stream.reset();r.bitsPerComponent=p.bitsPerComponent;r.numComps=p.componentsCount}else if(v===\"JBIG2Decode\"){r.bitsPerComponent=1;r.numComps=1}}this.width=h.get(\"Width\",\"W\");this.height=h.get(\"Height\",\"H\");if(this.width<1||this.height<1){l(\"Invalid image width: \"+this.width+\" or height: \"+this.height)}this.interpolate=h.get(\"Interpolate\",\"I\")||false;this.imageMask=h.get(\"ImageMask\",\"IM\")||false;this.matte=h.get(\"Matte\")||false;var b=r.bitsPerComponent;if(!b){b=h.get(\"BitsPerComponent\",\"BPC\");if(!b){if(this.imageMask){b=1}else{l(\"Bits per component missing in image: \"+this.imageMask)}}}this.bpc=b;if(!this.imageMask){var y=h.get(\"ColorSpace\",\"CS\");if(!y){c(\"JPX images (which do not require color spaces)\");switch(r.numComps){case 1:y=f.get(\"DeviceGray\");break;case 3:y=f.get(\"DeviceRGB\");break;case 4:y=f.get(\"DeviceCMYK\");break;default:l(\"JPX images with \"+this.numComps+\" color components not supported.\")}}this.colorSpace=g.parse(y,e,t);this.numComps=this.colorSpace.numComps}this.decode=h.getArray(\"Decode\",\"D\");this.needsDecode=false;if(this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode)||o&&!g.isDefaultDecode(this.decode,1))){this.needsDecode=true;var k=(1<<b)-1;this.decodeCoefficients=[];this.decodeAddends=[];for(var w=0,C=0;w<this.decode.length;w+=2,++C){var x=this.decode[w];var S=this.decode[w+1];this.decodeCoefficients[C]=S-x;this.decodeAddends[C]=k*x}}if(n){this.smask=new i(e,t,n,false)}else if(s){if(d(s)){var A=s.dict,I=A.get(\"ImageMask\",\"IM\");if(!I){u(\"Ignoring /Mask in image without /ImageMask.\")}else{this.mask=new i(e,t,s,false,null,null,true)}}else{this.mask=s}}}i.buildImage=function e(r,a,n,s,o,l){var c=t(s,l);var f;var g;var v=s.dict.get(\"SMask\");var p=s.dict.get(\"Mask\");if(v){f=t(v,l);g=Promise.resolve(null)}else{f=Promise.resolve(null);if(p){if(d(p)){g=t(p,l)}else if(h(p)){g=Promise.resolve(p)}else{u(\"Unsupported mask format.\");g=Promise.resolve(null)}}else{g=Promise.resolve(null)}}return Promise.all([c,f,g]).then(function(e){var t=e[0];var r=e[1];var s=e[2];return new i(a,n,t,o,r,s)})};i.createMask=function e(t,r,a,i,n){var s=(r+7>>3)*a;var o=t.byteLength;var l=s===o;var c,h;if(i&&(!n||l)){c=t}else if(!n){c=new Uint8Array(o);c.set(t)}else{c=new Uint8Array(s);c.set(t);for(h=o;h<s;h++){c[h]=255}}if(n){for(h=0;h<o;h++){c[h]=~c[h]}}return{data:c,width:r,height:a}};i.prototype={get drawWidth(){return Math.max(this.width,this.smask&&this.smask.width||0,this.mask&&this.mask.width||0)},get drawHeight(){return Math.max(this.height,this.smask&&this.smask.height||0,this.mask&&this.mask.height||0)},decodeBuffer:function e(t){var a=this.bpc;var i=this.numComps;var n=this.decodeAddends;var s=this.decodeCoefficients;var o=(1<<a)-1;var l,c;if(a===1){for(l=0,c=t.length;l<c;l++){t[l]=+!t[l]}return}var h=0;for(l=0,c=this.width*this.height;l<c;l++){for(var u=0;u<i;u++){t[h]=r(t[h],n[u],s[u],o);h++}}},getComponents:function e(t){var r=this.bpc;if(r===8){return t}var a=this.width;var i=this.height;var n=this.numComps;var s=a*i*n;var o=0;var l=r<=8?new Uint8Array(s):r<=16?new Uint16Array(s):new Uint32Array(s);var c=a*n;var h=(1<<r)-1;var u=0,f,d;if(r===1){var g,v,p;for(var m=0;m<i;m++){v=u+(c&~7);p=u+c;while(u<v){d=t[o++];l[u]=d>>7&1;l[u+1]=d>>6&1;l[u+2]=d>>5&1;l[u+3]=d>>4&1;l[u+4]=d>>3&1;l[u+5]=d>>2&1;l[u+6]=d>>1&1;l[u+7]=d&1;u+=8}if(u<p){d=t[o++];g=128;while(u<p){l[u++]=+!!(d&g);g>>=1}}}}else{var b=0;d=0;for(u=0,f=s;u<f;++u){if(u%c===0){d=0;b=0}while(b<r){d=d<<8|t[o++];b+=8}var y=b-r;var k=d>>y;l[u]=k<0?0:k>h?h:k;d=d&(1<<y)-1;b=y}}return l},fillOpacity:function e(t,r,n,s,o){var c=this.smask;var u=this.mask;var f,d,g,v,p,m;if(c){d=c.width;g=c.height;f=new Uint8Array(d*g);c.fillGrayBuffer(f);if(d!==r||g!==n){f=a(f,c.bpc,d,g,r,n)}}else if(u){if(u instanceof i){d=u.width;g=u.height;f=new Uint8Array(d*g);u.numComps=1;u.fillGrayBuffer(f);for(v=0,p=d*g;v<p;++v){f[v]=255-f[v]}if(d!==r||g!==n){f=a(f,u.bpc,d,g,r,n)}}else if(h(u)){f=new Uint8Array(r*n);var b=this.numComps;for(v=0,p=r*n;v<p;++v){var y=0;var k=v*b;for(m=0;m<b;++m){var w=o[k+m];var C=m*2;if(w<u[C]||w>u[C+1]){y=255;break}}f[v]=y}}else{l(\"Unknown mask format.\")}}if(f){for(v=0,m=3,p=r*s;v<p;++v,m+=4){t[m]=f[v]}}else{for(v=0,m=3,p=r*s;v<p;++v,m+=4){t[m]=255}}},undoPreblend:function e(t,r,a){var i=this.smask&&this.smask.matte;if(!i){return}var n=this.colorSpace.getRgb(i,0);var s=n[0];var o=n[1];var l=n[2];var c=r*a*4;var h,u,f;for(var d=0;d<c;d+=4){var g=t[d+3];if(g===0){t[d]=255;t[d+1]=255;t[d+2]=255;continue}var v=255/g;h=(t[d]-s)*v+s;u=(t[d+1]-o)*v+o;f=(t[d+2]-l)*v+l;t[d]=h<=0?0:h>=255?255:h|0;t[d+1]=u<=0?0:u>=255?255:u|0;t[d+2]=f<=0?0:f>=255?255:f|0}},createImageData:function e(t){var r=this.drawWidth;var a=this.drawHeight;var i={width:r,height:a};var n=this.numComps;var l=this.width;var c=this.height;var h=this.bpc;var u=l*n*h+7>>3;var f;if(!t){var d;if(this.colorSpace.name===\"DeviceGray\"&&h===1){d=s.GRAYSCALE_1BPP}else if(this.colorSpace.name===\"DeviceRGB\"&&h===8&&!this.needsDecode){d=s.RGB_24BPP}if(d&&!this.smask&&!this.mask&&r===l&&a===c){i.kind=d;f=this.getImageBytes(c*u);if(this.image instanceof v){i.data=f}else{var g=new Uint8Array(f.length);g.set(f);i.data=g}if(this.needsDecode){o(d===s.GRAYSCALE_1BPP);var m=i.data;for(var b=0,y=m.length;b<y;b++){m[b]^=255}}return i}if(this.image instanceof p&&!this.smask&&!this.mask&&(this.colorSpace.name===\"DeviceGray\"||this.colorSpace.name===\"DeviceRGB\"||this.colorSpace.name===\"DeviceCMYK\")){i.kind=s.RGB_24BPP;i.data=this.getImageBytes(c*u,r,a,true);return i}}f=this.getImageBytes(c*u);var k=0|f.length/u*a/c;var w=this.getComponents(f);var C,x;if(!t&&!this.smask&&!this.mask){i.kind=s.RGB_24BPP;i.data=new Uint8Array(r*a*3);C=0;x=false}else{i.kind=s.RGBA_32BPP;i.data=new Uint8Array(r*a*4);C=1;x=true;this.fillOpacity(i.data,r,a,k,w)}if(this.needsDecode){this.decodeBuffer(w)}this.colorSpace.fillRgb(i.data,l,c,r,a,k,h,w,C);if(x){this.undoPreblend(i.data,r,k)}return i},fillGrayBuffer:function e(t){var r=this.numComps;if(r!==1){l(\"Reading gray scale from a color image: \"+r)}var a=this.width;var i=this.height;var n=this.bpc;var s=a*r*n+7>>3;var o=this.getImageBytes(i*s);var c=this.getComponents(o);var h,u;if(n===1){u=a*i;if(this.needsDecode){for(h=0;h<u;++h){t[h]=c[h]-1&255}}else{for(h=0;h<u;++h){t[h]=-c[h]&255}}return}if(this.needsDecode){this.decodeBuffer(c)}u=a*i;var f=255/((1<<n)-1);for(h=0;h<u;++h){t[h]=f*c[h]|0}},getImageBytes:function e(t,r,a,i){this.image.reset();this.image.drawWidth=r||this.width;this.image.drawHeight=a||this.height;this.image.forceRGB=!!i;return this.image.getBytes(t)}};return i}();e.PDFImage=b});(function(e,t){t(e.pdfjsCoreObj={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreCrypto,e.pdfjsCoreParser,e.pdfjsCoreChunkedStream,e.pdfjsCoreColorSpace)})(this,function(e,t,r,a,i,n,s){var o=t.InvalidPDFException;var l=t.MissingDataException;var c=t.XRefParseException;var h=t.assert;var u=t.bytesToString;var f=t.createPromiseCapability;var d=t.error;var g=t.info;var v=t.isArray;var p=t.isBool;var m=t.isInt;var b=t.isString;var y=t.shadow;var k=t.stringToPDFString;var w=t.stringToUTF8String;var C=t.warn;var x=t.createValidAbsoluteUrl;var S=t.Util;var A=r.Ref;var I=r.RefSet;var B=r.RefSetCache;var R=r.isName;var T=r.isCmd;var O=r.isDict;var P=r.isRef;var E=r.isRefsEqual;var M=r.isStream;var L=a.CipherTransformFactory;var D=i.Lexer;var F=i.Parser;var U=n.ChunkedStream;var j=s.ColorSpace;var q=function e(){function t(e,t,r){this.pdfManager=e;this.xref=t;this.catDict=t.getCatalogObj();this.fontCache=new B;h(O(this.catDict),\"catalog object is not a dictionary\");this.pageFactory=r;this.pagePromises=[]}t.prototype={get metadata(){var e=this.catDict.getRaw(\"Metadata\");if(!P(e)){return y(this,\"metadata\",null)}var t=!this.xref.encrypt?false:this.xref.encrypt.encryptMetadata;var r=this.xref.fetch(e,!t);var a;if(r&&O(r.dict)){var i=r.dict.get(\"Type\");var n=r.dict.get(\"Subtype\");if(R(i,\"Metadata\")&&R(n,\"XML\")){try{a=w(u(r.getBytes()))}catch(e){g(\"Skipping invalid metadata.\")}}}return y(this,\"metadata\",a)},get toplevelPagesDict(){var e=this.catDict.get(\"Pages\");h(O(e),\"invalid top-level pages dictionary\");return y(this,\"toplevelPagesDict\",e)},get documentOutline(){var e=null;try{e=this.readDocumentOutline()}catch(e){if(e instanceof l){throw e}C(\"Unable to read document outline\")}return y(this,\"documentOutline\",e)},readDocumentOutline:function e(){var r=this.catDict.get(\"Outlines\");if(!O(r)){return null}r=r.getRaw(\"First\");if(!P(r)){return null}var a={items:[]};var i=[{obj:r,parent:a}];var n=new I;n.put(r);var s=this.xref,o=new Uint8Array(3);while(i.length>0){var l=i.shift();var c=s.fetchIfRef(l.obj);if(c===null){continue}h(c.has(\"Title\"),\"Invalid outline item\");var u={url:null,dest:null};t.parseDestDictionary({destDict:c,resultObj:u,docBaseUrl:this.pdfManager.docBaseUrl});var f=c.get(\"Title\");var d=c.get(\"F\")||0;var g=c.getArray(\"C\"),p=o;if(v(g)&&g.length===3&&(g[0]!==0||g[1]!==0||g[2]!==0)){p=j.singletons.rgb.getRgb(g,0)}var m={dest:u.dest,url:u.url,unsafeUrl:u.unsafeUrl,newWindow:u.newWindow,title:k(f),color:p,count:c.get(\"Count\"),bold:!!(d&2),italic:!!(d&1),items:[]};l.parent.items.push(m);r=c.getRaw(\"First\");if(P(r)&&!n.has(r)){i.push({obj:r,parent:m});n.put(r)}r=c.getRaw(\"Next\");if(P(r)&&!n.has(r)){i.push({obj:r,parent:l.parent});n.put(r)}}return a.items.length>0?a.items:null},get numPages(){var e=this.toplevelPagesDict.get(\"Count\");h(m(e),\"page count in top level pages object is not an integer\");return y(this,\"num\",e)},get destinations(){function e(e){return O(e)?e.get(\"D\"):e}var t=this.xref;var r={},a,i;var n=this.catDict.get(\"Names\");if(n&&n.has(\"Dests\")){a=n.getRaw(\"Dests\")}else if(this.catDict.has(\"Dests\")){i=this.catDict.get(\"Dests\")}if(i){n=i;n.forEach(function t(a,i){if(!i){return}r[a]=e(i)})}if(a){var s=new z(a,t);var o=s.getAll();for(var l in o){r[l]=e(o[l])}}return y(this,\"destinations\",r)},getDestination:function e(t){function r(e){return O(e)?e.get(\"D\"):e}var a=this.xref;var i=null,n,s;var o=this.catDict.get(\"Names\");if(o&&o.has(\"Dests\")){n=o.getRaw(\"Dests\")}else if(this.catDict.has(\"Dests\")){s=this.catDict.get(\"Dests\")}if(s){var l=s.get(t);if(l){i=r(l)}}if(n){var c=new z(n,a);i=r(c.get(t))}return i},get pageLabels(){var e=null;try{e=this.readPageLabels()}catch(e){if(e instanceof l){throw e}C(\"Unable to read page labels.\")}return y(this,\"pageLabels\",e)},readPageLabels:function e(){var t=this.catDict.getRaw(\"PageLabels\");if(!t){return null}var r=new Array(this.numPages);var a=null;var i=\"\";var n=new H(t,this.xref);var s=n.getAll();var o=\"\",l=1;for(var c=0,u=this.numPages;c<u;c++){if(c in s){var f=s[c];h(O(f),\"The PageLabel is not a dictionary.\");var d=f.get(\"Type\");h(!d||R(d,\"PageLabel\"),\"Invalid type in PageLabel dictionary.\");var g=f.get(\"S\");h(!g||R(g),\"Invalid style in PageLabel dictionary.\");a=g?g.name:null;var v=f.get(\"P\");h(!v||b(v),\"Invalid prefix in PageLabel dictionary.\");i=v?k(v):\"\";var p=f.get(\"St\");h(!p||m(p)&&p>=1,\"Invalid start in PageLabel dictionary.\");l=p||1}switch(a){case\"D\":o=l;break;case\"R\":case\"r\":o=S.toRoman(l,a===\"r\");break;case\"A\":case\"a\":var y=26;var w=65,C=97;var x=a===\"a\"?C:w;var A=l-1;var I=String.fromCharCode(x+A%y);var B=[];for(var T=0,P=A/y|0;T<=P;T++){B.push(I)}o=B.join(\"\");break;default:h(!a,'Invalid style \"'+a+'\" in PageLabel dictionary.')}r[c]=i+o;o=\"\";l++}return r},get attachments(){var e=this.xref;var t=null,r;var a=this.catDict.get(\"Names\");if(a){r=a.getRaw(\"EmbeddedFiles\")}if(r){var i=new z(r,e);var n=i.getAll();for(var s in n){var o=new G(n[s],e);if(!t){t=Object.create(null)}t[k(s)]=o.serializable}}return y(this,\"attachments\",t)},get javaScript(){var e=this.xref;var t=this.catDict.get(\"Names\");var r=[];function a(e){var t=e.get(\"S\");if(!R(t,\"JavaScript\")){return}var a=e.get(\"JS\");if(M(a)){a=u(a.getBytes())}else if(!b(a)){return}r.push(k(a))}if(t&&t.has(\"JavaScript\")){var i=new z(t.getRaw(\"JavaScript\"),e);var n=i.getAll();for(var s in n){var o=n[s];if(O(o)){a(o)}}}var l=this.catDict.get(\"OpenAction\");if(O(l,\"Action\")){var c=l.get(\"S\");if(R(c,\"Named\")){var h=l.get(\"N\");if(R(h,\"Print\")){r.push(\"print({});\")}}else{a(l)}}return y(this,\"javaScript\",r)},cleanup:function e(){var t=[];this.fontCache.forEach(function(e){t.push(e)});return Promise.all(t).then(function(e){for(var t=0,r=e.length;t<r;t++){var a=e[t].dict;delete a.translated}this.fontCache.clear()}.bind(this))},getPage:function e(t){if(!(t in this.pagePromises)){this.pagePromises[t]=this.getPageDict(t).then(function(e){var r=e[0];var a=e[1];return this.pageFactory.createPage(t,r,a,this.fontCache)}.bind(this))}return this.pagePromises[t]},getPageDict:function e(t){var r=f();var a=[this.catDict.getRaw(\"Pages\")];var i=0;var n=this.xref;var s=false;function o(){while(a.length){var e=a.pop();if(P(e)){n.fetchAsync(e).then(function(n){if(O(n,\"Page\")||O(n)&&!n.has(\"Kids\")){if(t===i){r.resolve([n,e])}else{i++;o()}return}a.push(n);o()},r.reject);return}h(O(e),\"page dictionary kid reference points to wrong type of object\");var l=e.get(\"Count\");if(l===0){s=true}if(i+l<=t){i+=l;continue}var c=e.get(\"Kids\");h(v(c),\"page dictionary kids object is not an array\");if(!s&&l===c.length){a=[c[t-i]];i=t;continue}else{for(var u=c.length-1;u>=0;u--){a.push(c[u])}}}r.reject(\"Page index \"+t+\" not found.\")}o();return r.promise},getPageIndex:function e(t){var r=this.xref;function a(e){var a=0;var i;return r.fetchAsync(e).then(function(r){if(E(e,t)&&!O(r,\"Page\")&&!(O(r)&&!r.has(\"Type\")&&r.has(\"Contents\"))){throw new Error(\"The reference does not point to a /Page Dict.\")}if(!r){return null}h(O(r),\"node must be a Dict.\");i=r.getRaw(\"Parent\");return r.getAsync(\"Parent\")}).then(function(e){if(!e){return null}h(O(e),\"parent must be a Dict.\");return e.getAsync(\"Kids\")}).then(function(t){if(!t){return null}var n=[];var s=false;for(var o=0;o<t.length;o++){var l=t[o];h(P(l),\"kid must be a Ref.\");if(l.num===e.num){s=true;break}n.push(r.fetchAsync(l).then(function(e){if(e.has(\"Count\")){var t=e.get(\"Count\");a+=t}else{a++}}))}if(!s){d(\"kid ref not found in parents kids\")}return Promise.all(n).then(function(){return[a,i]})})}var i=0;function n(e){return a(e).then(function(e){if(!e){return i}var t=e[0];var r=e[1];i+=t;return n(r)})}return n(t)}};t.parseDestDictionary=function e(t){function r(e){if(e.indexOf(\"www.\")===0){return\"http://\"+e}return e}function a(e){try{return w(e)}catch(t){return e}}var i=t.destDict;if(!O(i)){C('Catalog_parseDestDictionary: \"destDict\" must be a dictionary.');return}var n=t.resultObj;if(typeof n!==\"object\"){C('Catalog_parseDestDictionary: \"resultObj\" must be an object.');return}var s=t.docBaseUrl||null;var o=i.get(\"A\"),l,c;if(O(o)){var h=o.get(\"S\").name;switch(h){case\"URI\":l=o.get(\"URI\");if(R(l)){l=\"/\"+l.name}else if(b(l)){l=r(l)}break;case\"GoTo\":c=o.get(\"D\");break;case\"Launch\":case\"GoToR\":var f=o.get(\"F\");if(O(f)){l=f.get(\"F\")||null}else if(b(f)){l=f}var d=o.get(\"D\");if(d){if(R(d)){d=d.name}if(b(l)){var g=l.split(\"#\")[0];if(b(d)){l=g+\"#\"+(/^\\d+$/.test(d)?\"nameddest=\":\"\")+d}else if(v(d)){l=g+\"#\"+JSON.stringify(d)}}}var m=o.get(\"NewWindow\");if(p(m)){n.newWindow=m}break;case\"Named\":var y=o.get(\"N\");if(R(y)){n.action=y.name}break;case\"JavaScript\":var S=o.get(\"JS\"),A;if(M(S)){A=u(S.getBytes())}else if(b(S)){A=S}if(A){var I=[\"app.launchURL\",\"window.open\"];var B=new RegExp(\"^(?:\"+I.join(\"|\")+\")\"+\"\\\\((?:'|\\\")(\\\\S+)(?:'|\\\")(?:,|\\\\))\");var T=B.exec(k(A),\"i\");if(T&&T[1]){l=T[1];break}}default:C('Catalog_parseDestDictionary: Unrecognized link type \"'+h+'\".');break}}else if(i.has(\"Dest\")){c=i.get(\"Dest\")}if(b(l)){l=a(l);var P=x(l,s);if(P){n.url=P.href}n.unsafeUrl=l}if(c){if(R(c)){c=c.name}if(b(c)||v(c)){n.dest=c}}};return t}();var N=function e(){function t(e,t){this.stream=e;this.pdfManager=t;this.entries=[];this.xrefstms=Object.create(null);this.cache=[];this.stats={streamTypes:[],fontTypes:[]}}t.prototype={setStartXRef:function e(t){this.startXRefQueue=[t]},parse:function e(t){var r;if(!t){r=this.readXRef()}else{C(\"Indexing all PDF objects\");r=this.indexObjects()}r.assignXref(this);this.trailer=r;var a=r.get(\"Encrypt\");if(O(a)){var i=r.get(\"ID\");var n=i&&i.length?i[0]:\"\";a.suppressEncryption=true;this.encrypt=new L(a,n,this.pdfManager.password)}if(!(this.root=r.get(\"Root\"))){d(\"Invalid root reference\")}},processXRefTable:function e(t){if(!(\"tableState\"in this)){this.tableState={entryNum:0,streamPos:t.lexer.stream.pos,parserBuf1:t.buf1,parserBuf2:t.buf2}}var r=this.readXRefTable(t);if(!T(r,\"trailer\")){d(\"Invalid XRef table: could not find trailer dictionary\")}var a=t.getObj();if(!O(a)&&a.dict){a=a.dict}if(!O(a)){d(\"Invalid XRef table: could not parse trailer dictionary\")}delete this.tableState;return a},readXRefTable:function e(t){var r=t.lexer.stream;var a=this.tableState;r.pos=a.streamPos;t.buf1=a.parserBuf1;t.buf2=a.parserBuf2;var i;while(true){if(!(\"firstEntryNum\"in a)||!(\"entryCount\"in a)){if(T(i=t.getObj(),\"trailer\")){break}a.firstEntryNum=i;a.entryCount=t.getObj()}var n=a.firstEntryNum;var s=a.entryCount;if(!m(n)||!m(s)){d(\"Invalid XRef table: wrong types in subsection header\")}for(var o=a.entryNum;o<s;o++){a.streamPos=r.pos;a.entryNum=o;a.parserBuf1=t.buf1;a.parserBuf2=t.buf2;var l={};l.offset=t.getObj();l.gen=t.getObj();var c=t.getObj();if(T(c,\"f\")){l.free=true}else if(T(c,\"n\")){l.uncompressed=true}if(!m(l.offset)||!m(l.gen)||!(l.free||l.uncompressed)){d(\"Invalid entry in XRef subsection: \"+n+\", \"+s)}if(o===0&&l.free&&n===1){n=0}if(!this.entries[o+n]){this.entries[o+n]=l}}a.entryNum=0;a.streamPos=r.pos;a.parserBuf1=t.buf1;a.parserBuf2=t.buf2;delete a.firstEntryNum;delete a.entryCount}if(this.entries[0]&&!this.entries[0].free){d(\"Invalid XRef table: unexpected first object\")}return i},processXRefStream:function e(t){if(!(\"streamState\"in this)){var r=t.dict;var a=r.get(\"W\");var i=r.get(\"Index\");if(!i){i=[0,r.get(\"Size\")]}this.streamState={entryRanges:i,byteWidths:a,entryNum:0,streamPos:t.pos}}this.readXRefStream(t);delete this.streamState;return t.dict},readXRefStream:function e(t){var r,a;var i=this.streamState;t.pos=i.streamPos;var n=i.byteWidths;var s=n[0];var o=n[1];var l=n[2];var c=i.entryRanges;while(c.length>0){var h=c[0];var u=c[1];if(!m(h)||!m(u)){d(\"Invalid XRef range fields: \"+h+\", \"+u)}if(!m(s)||!m(o)||!m(l)){d(\"Invalid XRef entry fields length: \"+h+\", \"+u)}for(r=i.entryNum;r<u;++r){i.entryNum=r;i.streamPos=t.pos;var f=0,g=0,v=0;for(a=0;a<s;++a){f=f<<8|t.getByte()}if(s===0){f=1}for(a=0;a<o;++a){g=g<<8|t.getByte()}for(a=0;a<l;++a){v=v<<8|t.getByte()}var p={};p.offset=g;p.gen=v;switch(f){case 0:p.free=true;break;case 1:p.uncompressed=true;break;case 2:break;default:d(\"Invalid XRef entry type: \"+f)}if(!this.entries[h+r]){this.entries[h+r]=p}}i.entryNum=0;i.streamPos=t.pos;c.splice(0,2)}},indexObjects:function e(){var t=9,r=10,a=13,i=32;var n=37,s=60;function l(e,t){var i=\"\",n=e[t];while(n!==r&&n!==a&&n!==s){if(++t>=e.length){break}i+=String.fromCharCode(n);n=e[t]}return i}function c(e,t,r){var a=r.length,i=e.length;var n=0;while(t<i){var s=0;while(s<a&&e[t+s]===r[s]){++s}if(s>=a){break}t++;n++}return n}var h=/^(\\d+)\\s+(\\d+)\\s+obj\\b/;var u=new Uint8Array([116,114,97,105,108,101,114]);var f=new Uint8Array([115,116,97,114,116,120,114,101,102]);var d=new Uint8Array([101,110,100,111,98,106]);var g=new Uint8Array([47,88,82,101,102]);this.entries.length=0;var v=this.stream;v.pos=0;var p=v.getBytes();var m=v.start,b=p.length;var y=[],k=[];while(m<b){var w=p[m];if(w===t||w===r||w===a||w===i){++m;continue}if(w===n){do{++m;if(m>=b){break}w=p[m]}while(w!==r&&w!==a);continue}var C=l(p,m);var x;if(C.indexOf(\"xref\")===0&&(C.length===4||/\\s/.test(C[4]))){m+=c(p,m,u);y.push(m);m+=c(p,m,f)}else if(x=h.exec(C)){if(typeof this.entries[x[1]]===\"undefined\"){this.entries[x[1]]={offset:m-v.start,gen:x[2]|0,uncompressed:true}}var S=c(p,m,d)+7;var A=p.subarray(m,m+S);var I=c(A,0,g);if(I<S&&A[I+5]<64){k.push(m-v.start);this.xrefstms[m-v.start]=1}m+=S}else if(C.indexOf(\"trailer\")===0&&(C.length===7||/\\s/.test(C[7]))){y.push(m);m+=c(p,m,f)}else{m+=C.length+1}}var B,R;for(B=0,R=k.length;B<R;++B){this.startXRefQueue.push(k[B]);this.readXRef(true)}var P;for(B=0,R=y.length;B<R;++B){v.pos=y[B];var E=new F(new D(v),true,this,true);var M=E.getObj();if(!T(M,\"trailer\")){continue}P=E.getObj();if(!O(P)){continue}if(P.has(\"ID\")){return P}}if(P){return P}throw new o(\"Invalid PDF structure\")},readXRef:function e(t){var r=this.stream;try{while(this.startXRefQueue.length){var a=this.startXRefQueue[0];r.pos=a+r.start;var i=new F(new D(r),true,this);var n=i.getObj();var s;if(T(n,\"xref\")){s=this.processXRefTable(i);if(!this.topDict){this.topDict=s}n=s.get(\"XRefStm\");if(m(n)){var o=n;if(!(o in this.xrefstms)){this.xrefstms[o]=1;this.startXRefQueue.push(o)}}}else if(m(n)){if(!m(i.getObj())||!T(i.getObj(),\"obj\")||!M(n=i.getObj())){d(\"Invalid XRef stream\")}s=this.processXRefStream(n);if(!this.topDict){this.topDict=s}if(!s){d(\"Failed to read XRef stream\")}}else{d(\"Invalid XRef stream header\")}n=s.get(\"Prev\");if(m(n)){this.startXRefQueue.push(n)}else if(P(n)){this.startXRefQueue.push(n.num)}this.startXRefQueue.shift()}return this.topDict}catch(e){if(e instanceof l){throw e}g(\"(while reading XRef): \"+e)}if(t){return}throw new c},getEntry:function e(t){var r=this.entries[t];if(r&&!r.free&&r.offset){return r}return null},fetchIfRef:function e(t,r){if(!P(t)){return t}return this.fetch(t,r)},fetch:function e(t,r){h(P(t),\"ref object is not a reference\");var a=t.num;if(a in this.cache){var i=this.cache[a];return i}var n=this.getEntry(a);if(n===null){return this.cache[a]=null}if(n.uncompressed){n=this.fetchUncompressed(t,n,r)}else{n=this.fetchCompressed(n,r)}if(O(n)){n.objId=t.toString()}else if(M(n)){n.dict.objId=t.toString()}return n},fetchUncompressed:function e(t,r,a){var i=t.gen;var n=t.num;if(r.gen!==i){d(\"inconsistent generation in XRef\")}var s=this.stream.makeSubStream(r.offset+this.stream.start);var o=new F(new D(s),true,this);var l=o.getObj();var c=o.getObj();var h=o.getObj();if(!m(l)||parseInt(l,10)!==n||!m(c)||parseInt(c,10)!==i||!T(h)){d(\"bad XRef entry\")}if(!T(h,\"obj\")){if(h.cmd.indexOf(\"obj\")===0){n=parseInt(h.cmd.substring(3),10);if(!isNaN(n)){return n}}d(\"bad XRef entry\")}if(this.encrypt&&!a){r=o.getObj(this.encrypt.createCipherTransform(n,i))}else{r=o.getObj()}if(!M(r)){this.cache[n]=r}return r},fetchCompressed:function e(t,r){var a=t.offset;var i=this.fetch(new A(a,0));if(!M(i)){d(\"bad ObjStm stream\")}var n=i.dict.get(\"First\");var s=i.dict.get(\"N\");if(!m(n)||!m(s)){d(\"invalid first and n parameters for ObjStm stream\")}var o=new F(new D(i),false,this);o.allowStreams=true;var l,c=[],h,u=[];for(l=0;l<s;++l){h=o.getObj();if(!m(h)){d(\"invalid object number in the ObjStm stream: \"+h)}u.push(h);var f=o.getObj();if(!m(f)){d(\"invalid object offset in the ObjStm stream: \"+f)}}for(l=0;l<s;++l){c.push(o.getObj());if(T(o.buf1,\"endobj\")){o.shift()}h=u[l];var g=this.entries[h];if(g&&g.offset===a&&g.gen===l){this.cache[h]=c[l]}}t=c[t.gen];if(t===undefined){d(\"bad XRef entry for compressed object\")}return t},fetchIfRefAsync:function e(t,r){if(!P(t)){return Promise.resolve(t)}return this.fetchAsync(t,r)},fetchAsync:function e(t,r){var a=this.stream.manager;var i=this;return new Promise(function e(n,s){try{n(i.fetch(t,r))}catch(t){if(t instanceof l){a.requestRange(t.begin,t.end).then(function(){e(n,s)},s);return}s(t)}})},getCatalogObj:function e(){return this.root}};return t}();var _=function e(){function t(e,t){throw new Error(\"Cannot initialize NameOrNumberTree.\")}t.prototype={getAll:function e(){var t=Object.create(null);if(!this.root){return t}var r=this.xref;var a=new I;a.put(this.root);var i=[this.root];while(i.length>0){var n,s;var o=r.fetchIfRef(i.shift());if(!O(o)){continue}if(o.has(\"Kids\")){var l=o.get(\"Kids\");for(n=0,s=l.length;n<s;n++){var c=l[n];h(!a.has(c),'Duplicate entry in \"'+this._type+'\" tree.');i.push(c);a.put(c)}continue}var u=o.get(this._type);if(v(u)){for(n=0,s=u.length;n<s;n+=2){t[r.fetchIfRef(u[n])]=r.fetchIfRef(u[n+1])}}}return t},get:function e(t){if(!this.root){return null}var r=this.xref;var a=r.fetchIfRef(this.root);var i=0;var n=10;var s,o,l;while(a.has(\"Kids\")){if(++i>n){C('Search depth limit reached for \"'+this._type+'\" tree.');return null}var c=a.get(\"Kids\");if(!v(c)){return null}s=0;o=c.length-1;while(s<=o){l=s+o>>1;var h=r.fetchIfRef(c[l]);var u=h.get(\"Limits\");if(t<r.fetchIfRef(u[0])){o=l-1}else if(t>r.fetchIfRef(u[1])){s=l+1}else{a=r.fetchIfRef(c[l]);break}}if(s>o){return null}}var f=a.get(this._type);if(v(f)){s=0;o=f.length-2;while(s<=o){l=s+o&~1;var d=r.fetchIfRef(f[l]);if(t<d){o=l-2}else if(t>d){s=l+2}else{return r.fetchIfRef(f[l+1])}}}return null}};return t}();var z=function e(){function t(e,t){this.root=e;this.xref=t;this._type=\"Names\"}S.inherit(t,_,{});return t}();var H=function e(){function t(e,t){this.root=e;this.xref=t;this._type=\"Nums\"}S.inherit(t,_,{});return t}();var G=function e(){function t(e,t){if(!e||!O(e)){return}this.xref=t;this.root=e;if(e.has(\"FS\")){this.fs=e.get(\"FS\")}this.description=e.has(\"Desc\")?k(e.get(\"Desc\")):\"\";if(e.has(\"RF\")){C(\"Related file specifications are not supported\")}this.contentAvailable=true;if(!e.has(\"EF\")){this.contentAvailable=false;C(\"Non-embedded file specifications are not supported\")}}function r(e){if(e.has(\"UF\")){return e.get(\"UF\")}else if(e.has(\"F\")){return e.get(\"F\")}else if(e.has(\"Unix\")){return e.get(\"Unix\")}else if(e.has(\"Mac\")){return e.get(\"Mac\")}else if(e.has(\"DOS\")){return e.get(\"DOS\")}return null}t.prototype={get filename(){if(!this._filename&&this.root){var e=r(this.root)||\"unnamed\";this._filename=k(e).replace(/\\\\\\\\/g,\"\\\\\").replace(/\\\\\\//g,\"/\").replace(/\\\\/g,\"/\")}return this._filename},get content(){if(!this.contentAvailable){return null}if(!this.contentRef&&this.root){this.contentRef=r(this.root.get(\"EF\"))}var e=null;if(this.contentRef){var t=this.xref;var a=t.fetchIfRef(this.contentRef);if(a&&M(a)){e=a.getBytes()}else{C(\"Embedded file specification points to non-existing/invalid \"+\"content\")}}else{C(\"Embedded file specification does not have a content\")}return e},get serializable(){return{filename:this.filename,content:this.content}}};return t}();var X=function(){function e(e){return P(e)||O(e)||v(e)||M(e)}function t(t,r){var a;if(O(t)||M(t)){var i;if(O(t)){i=t.map}else{i=t.dict.map}for(var n in i){a=i[n];if(e(a)){r.push(a)}}}else if(v(t)){for(var s=0,o=t.length;s<o;s++){a=t[s];if(e(a)){r.push(a)}}}}function r(e,t,r){this.obj=e;this.keys=t;this.xref=r;this.refSet=null;this.capability=null}r.prototype={load:function e(){var t=this.keys;this.capability=f();if(!(this.xref.stream instanceof U)||this.xref.stream.getMissingChunks().length===0){this.capability.resolve();return this.capability.promise}this.refSet=new I;var r=[];for(var a=0;a<t.length;a++){r.push(this.obj[t[a]])}this._walk(r);return this.capability.promise},_walk:function e(r){var a=[];var i=[];while(r.length){var n=r.pop();if(P(n)){if(this.refSet.has(n)){continue}try{var s=n;this.refSet.put(s);n=this.xref.fetch(n)}catch(e){if(!(e instanceof l)){throw e}a.push(n);i.push({begin:e.begin,end:e.end})}}if(n&&n.getBaseStreams){var o=n.getBaseStreams();var c=false;for(var h=0;h<o.length;h++){var u=o[h];if(u.getMissingChunks&&u.getMissingChunks().length){c=true;i.push({begin:u.start,end:u.end})}}if(c){a.push(n)}}t(n,r)}if(i.length){this.xref.stream.manager.requestRanges(i).then(function e(){r=a;for(var t=0;t<a.length;t++){var i=a[t];if(P(i)){this.refSet.remove(i)}}this._walk(r)}.bind(this),this.capability.reject);return}this.refSet=null;this.capability.resolve()}};return r}();e.Catalog=q;e.ObjectLoader=X;e.XRef=N;e.FileSpec=G});(function(e,t){t(e.pdfjsCorePattern={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreFunction,e.pdfjsCoreColorSpace)})(this,function(e,t,r,a,i){var n=t.UNSUPPORTED_FEATURES;var s=t.MissingDataException;var o=t.Util;var l=t.assert;var c=t.error;var h=t.info;var u=t.warn;var f=r.isStream;var d=a.PDFFunction;var g=i.ColorSpace;var v={FUNCTION_BASED:1,AXIAL:2,RADIAL:3,FREE_FORM_MESH:4,LATTICE_FORM_MESH:5,COONS_PATCH_MESH:6,TENSOR_PATCH_MESH:7};var p=function e(){function t(){c(\"should not call Pattern constructor\")}t.prototype={getPattern:function e(t){c(\"Should not call Pattern.getStyle: \"+t)}};t.parseShading=function e(t,r,a,i,o){var l=f(t)?t.dict:t;var c=l.get(\"ShadingType\");try{switch(c){case v.AXIAL:case v.RADIAL:return new m.RadialAxial(l,r,a,i);case v.FREE_FORM_MESH:case v.LATTICE_FORM_MESH:case v.COONS_PATCH_MESH:case v.TENSOR_PATCH_MESH:return new m.Mesh(t,r,a,i);default:throw new Error(\"Unsupported ShadingType: \"+c)}}catch(e){if(e instanceof s){throw e}o.send(\"UnsupportedFeature\",{featureId:n.shadingPattern});u(e);return new m.Dummy}};return t}();var m={};m.SMALL_NUMBER=1e-6;m.RadialAxial=function e(){function t(e,t,r,a){this.matrix=t;this.coordsArr=e.getArray(\"Coords\");this.shadingType=e.get(\"ShadingType\");this.type=\"Pattern\";var i=e.get(\"ColorSpace\",\"CS\");i=g.parse(i,r,a);this.cs=i;var n=0,s=1;if(e.has(\"Domain\")){var l=e.getArray(\"Domain\");n=l[0];s=l[1]}var c=false,f=false;if(e.has(\"Extend\")){var p=e.getArray(\"Extend\");c=p[0];f=p[1]}if(this.shadingType===v.RADIAL&&(!c||!f)){var b=this.coordsArr[0];var y=this.coordsArr[1];var k=this.coordsArr[2];var w=this.coordsArr[3];var C=this.coordsArr[4];var x=this.coordsArr[5];var S=Math.sqrt((b-w)*(b-w)+(y-C)*(y-C));if(k<=x+S&&x<=k+S){u(\"Unsupported radial gradient.\")}}this.extendStart=c;this.extendEnd=f;var A=e.get(\"Function\");var I=d.parseArray(r,A);var B=s-n;var R=B/10;var T=this.colorStops=[];if(n>=s||R<=0){h(\"Bad shading domain.\");return}var O=new Float32Array(i.numComps),P=new Float32Array(1);var E;for(var M=n;M<=s;M+=R){P[0]=M;I(P,0,O,0);E=i.getRgb(O,0);var L=o.makeCssRgb(E[0],E[1],E[2]);T.push([(M-n)/B,L])}var D=\"transparent\";if(e.has(\"Background\")){E=i.getRgb(e.get(\"Background\"),0);D=o.makeCssRgb(E[0],E[1],E[2])}if(!c){T.unshift([0,D]);T[1][0]+=m.SMALL_NUMBER}if(!f){T[T.length-1][0]-=m.SMALL_NUMBER;T.push([1,D])}this.colorStops=T}t.prototype={getIR:function e(){var t=this.coordsArr;var r=this.shadingType;var a,i,n,s,l;if(r===v.AXIAL){i=[t[0],t[1]];n=[t[2],t[3]];s=null;l=null;a=\"axial\"}else if(r===v.RADIAL){i=[t[0],t[1]];n=[t[3],t[4]];s=t[2];l=t[5];a=\"radial\"}else{c(\"getPattern type unknown: \"+r)}var h=this.matrix;if(h){i=o.applyTransform(i,h);n=o.applyTransform(n,h);if(r===v.RADIAL){var u=o.singularValueDecompose2dScale(h);s*=u[0];l*=u[1]}}return[\"RadialAxial\",a,this.colorStops,i,n,s,l]}};return t}();m.Mesh=function e(){function t(e,t){this.stream=e;this.context=t;this.buffer=0;this.bufferLength=0;var r=t.numComps;this.tmpCompsBuf=new Float32Array(r);var a=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(a):this.tmpCompsBuf}t.prototype={get hasData(){if(this.stream.end){return this.stream.pos<this.stream.end}if(this.bufferLength>0){return true}var e=this.stream.getByte();if(e<0){return false}this.buffer=e;this.bufferLength=8;return true},readBits:function e(t){var r=this.buffer;var a=this.bufferLength;if(t===32){if(a===0){return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0}r=r<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();var i=this.stream.getByte();this.buffer=i&(1<<a)-1;return(r<<8-a|(i&255)>>a)>>>0}if(t===8&&a===0){return this.stream.getByte()}while(a<t){r=r<<8|this.stream.getByte();a+=8}a-=t;this.bufferLength=a;this.buffer=r&(1<<a)-1;return r>>a},align:function e(){this.buffer=0;this.bufferLength=0},readFlag:function e(){return this.readBits(this.context.bitsPerFlag)},readCoordinate:function e(){var t=this.context.bitsPerCoordinate;var r=this.readBits(t);var a=this.readBits(t);var i=this.context.decode;var n=t<32?1/((1<<t)-1):2.3283064365386963e-10;return[r*n*(i[1]-i[0])+i[0],a*n*(i[3]-i[2])+i[2]]},readComponents:function e(){var t=this.context.numComps;var r=this.context.bitsPerComponent;var a=r<32?1/((1<<r)-1):2.3283064365386963e-10;var i=this.context.decode;var n=this.tmpCompsBuf;for(var s=0,o=4;s<t;s++,o+=2){var l=this.readBits(r);n[s]=l*a*(i[o+1]-i[o])+i[o]}var c=this.tmpCsCompsBuf;if(this.context.colorFn){this.context.colorFn(n,0,c,0)}return this.context.colorSpace.getRgb(c,0)}};function r(e,t){var r=e.coords;var a=e.colors;var i=[];var n=[];var s=0;while(t.hasData){var o=t.readFlag();var c=t.readCoordinate();var h=t.readComponents();if(s===0){l(0<=o&&o<=2,\"Unknown type4 flag\");switch(o){case 0:s=3;break;case 1:n.push(n[n.length-2],n[n.length-1]);s=1;break;case 2:n.push(n[n.length-3],n[n.length-1]);s=1;break}i.push(o)}n.push(r.length);r.push(c);a.push(h);s--;t.align()}e.figures.push({type:\"triangles\",coords:new Int32Array(n),colors:new Int32Array(n)})}function a(e,t,r){var a=e.coords;var i=e.colors;var n=[];while(t.hasData){var s=t.readCoordinate();var o=t.readComponents();n.push(a.length);a.push(s);i.push(o)}e.figures.push({type:\"lattice\",coords:new Int32Array(n),colors:new Int32Array(n),verticesPerRow:r})}var i=3;var n=20;var s=20;var o=function e(){function t(e){var t=[];for(var r=0;r<=e;r++){var a=r/e,i=1-a;t.push(new Float32Array([i*i*i,3*a*i*i,3*a*a*i,a*a*a]))}return t}var r=[];return function e(a){if(!r[a]){r[a]=t(a)}return r[a]}}();function h(e,t){var r=e.figures[t];l(r.type===\"patch\",\"Unexpected patch mesh figure\");var a=e.coords,c=e.colors;var h=r.coords;var u=r.colors;var f=Math.min(a[h[0]][0],a[h[3]][0],a[h[12]][0],a[h[15]][0]);var d=Math.min(a[h[0]][1],a[h[3]][1],a[h[12]][1],a[h[15]][1]);var g=Math.max(a[h[0]][0],a[h[3]][0],a[h[12]][0],a[h[15]][0]);var v=Math.max(a[h[0]][1],a[h[3]][1],a[h[12]][1],a[h[15]][1]);var p=Math.ceil((g-f)*s/(e.bounds[2]-e.bounds[0]));p=Math.max(i,Math.min(n,p));var m=Math.ceil((v-d)*s/(e.bounds[3]-e.bounds[1]));m=Math.max(i,Math.min(n,m));var b=p+1;var y=new Int32Array((m+1)*b);var k=new Int32Array((m+1)*b);var w=0;var C=new Uint8Array(3),x=new Uint8Array(3);var S=c[u[0]],A=c[u[1]],I=c[u[2]],B=c[u[3]];var R=o(m),T=o(p);for(var O=0;O<=m;O++){C[0]=(S[0]*(m-O)+I[0]*O)/m|0;C[1]=(S[1]*(m-O)+I[1]*O)/m|0;C[2]=(S[2]*(m-O)+I[2]*O)/m|0;x[0]=(A[0]*(m-O)+B[0]*O)/m|0;x[1]=(A[1]*(m-O)+B[1]*O)/m|0;x[2]=(A[2]*(m-O)+B[2]*O)/m|0;for(var P=0;P<=p;P++,w++){if((O===0||O===m)&&(P===0||P===p)){continue}var E=0,M=0;var L=0;for(var D=0;D<=3;D++){for(var F=0;F<=3;F++,L++){var U=R[O][D]*T[P][F];E+=a[h[L]][0]*U;M+=a[h[L]][1]*U}}y[w]=a.length;a.push([E,M]);k[w]=c.length;var j=new Uint8Array(3);j[0]=(C[0]*(p-P)+x[0]*P)/p|0;j[1]=(C[1]*(p-P)+x[1]*P)/p|0;j[2]=(C[2]*(p-P)+x[2]*P)/p|0;c.push(j)}}y[0]=h[0];k[0]=u[0];y[p]=h[3];k[p]=u[1];y[b*m]=h[12];k[b*m]=u[2];y[b*m+p]=h[15];k[b*m+p]=u[3];e.figures[t]={type:\"lattice\",coords:y,colors:k,verticesPerRow:b}}function u(e,t){var r=e.coords;var a=e.colors;var i=new Int32Array(16);var n=new Int32Array(4);while(t.hasData){var s=t.readFlag();l(0<=s&&s<=3,\"Unknown type6 flag\");var o,c;var h=r.length;for(o=0,c=s!==0?8:12;o<c;o++){r.push(t.readCoordinate())}var u=a.length;for(o=0,c=s!==0?2:4;o<c;o++){a.push(t.readComponents())}var f,d,g,v;switch(s){case 0:i[12]=h+3;i[13]=h+4;i[14]=h+5;i[15]=h+6;i[8]=h+2;i[11]=h+7;i[4]=h+1;i[7]=h+8;i[0]=h;i[1]=h+11;i[2]=h+10;i[3]=h+9;n[2]=u+1;n[3]=u+2;n[0]=u;n[1]=u+3;break;case 1:f=i[12];d=i[13];g=i[14];v=i[15];i[12]=v;i[13]=h+0;i[14]=h+1;i[15]=h+2;i[8]=g;i[11]=h+3;i[4]=d;i[7]=h+4;i[0]=f;i[1]=h+7;i[2]=h+6;i[3]=h+5;f=n[2];d=n[3];n[2]=d;n[3]=u;n[0]=f;n[1]=u+1;break;case 2:f=i[15];d=i[11];i[12]=i[3];i[13]=h+0;i[14]=h+1;i[15]=h+2;i[8]=i[7];i[11]=h+3;i[4]=d;i[7]=h+4;i[0]=f;i[1]=h+7;i[2]=h+6;i[3]=h+5;f=n[3];n[2]=n[1];n[3]=u;n[0]=f;n[1]=u+1;break;case 3:i[12]=i[0];i[13]=h+0;i[14]=h+1;i[15]=h+2;i[8]=i[1];i[11]=h+3;i[4]=i[2];i[7]=h+4;i[0]=i[3];i[1]=h+7;i[2]=h+6;i[3]=h+5;n[2]=n[0];n[3]=u;n[0]=n[1];n[1]=u+1;break}i[5]=r.length;r.push([(-4*r[i[0]][0]-r[i[15]][0]+6*(r[i[4]][0]+r[i[1]][0])-2*(r[i[12]][0]+r[i[3]][0])+3*(r[i[13]][0]+r[i[7]][0]))/9,(-4*r[i[0]][1]-r[i[15]][1]+6*(r[i[4]][1]+r[i[1]][1])-2*(r[i[12]][1]+r[i[3]][1])+3*(r[i[13]][1]+r[i[7]][1]))/9]);i[6]=r.length;r.push([(-4*r[i[3]][0]-r[i[12]][0]+6*(r[i[2]][0]+r[i[7]][0])-2*(r[i[0]][0]+r[i[15]][0])+3*(r[i[4]][0]+r[i[14]][0]))/9,(-4*r[i[3]][1]-r[i[12]][1]+6*(r[i[2]][1]+r[i[7]][1])-2*(r[i[0]][1]+r[i[15]][1])+3*(r[i[4]][1]+r[i[14]][1]))/9]);i[9]=r.length;r.push([(-4*r[i[12]][0]-r[i[3]][0]+6*(r[i[8]][0]+r[i[13]][0])-2*(r[i[0]][0]+r[i[15]][0])+3*(r[i[11]][0]+r[i[1]][0]))/9,(-4*r[i[12]][1]-r[i[3]][1]+6*(r[i[8]][1]+r[i[13]][1])-2*(r[i[0]][1]+r[i[15]][1])+3*(r[i[11]][1]+r[i[1]][1]))/9]);i[10]=r.length;r.push([(-4*r[i[15]][0]-r[i[0]][0]+6*(r[i[11]][0]+r[i[14]][0])-2*(r[i[12]][0]+r[i[3]][0])+3*(r[i[2]][0]+r[i[8]][0]))/9,(-4*r[i[15]][1]-r[i[0]][1]+6*(r[i[11]][1]+r[i[14]][1])-2*(r[i[12]][1]+r[i[3]][1])+3*(r[i[2]][1]+r[i[8]][1]))/9]);e.figures.push({type:\"patch\",coords:new Int32Array(i),colors:new Int32Array(n)})}}function p(e,t){var r=e.coords;var a=e.colors;var i=new Int32Array(16);var n=new Int32Array(4);while(t.hasData){var s=t.readFlag();l(0<=s&&s<=3,\"Unknown type7 flag\");var o,c;var h=r.length;for(o=0,c=s!==0?12:16;o<c;o++){r.push(t.readCoordinate())}var u=a.length;for(o=0,c=s!==0?2:4;o<c;o++){a.push(t.readComponents())}var f,d,g,v;switch(s){case 0:i[12]=h+3;i[13]=h+4;i[14]=h+5;i[15]=h+6;i[8]=h+2;i[9]=h+13;i[10]=h+14;i[11]=h+7;i[4]=h+1;i[5]=h+12;i[6]=h+15;i[7]=h+8;i[0]=h;i[1]=h+11;i[2]=h+10;i[3]=h+9;n[2]=u+1;n[3]=u+2;n[0]=u;n[1]=u+3;break;case 1:f=i[12];d=i[13];g=i[14];v=i[15];i[12]=v;i[13]=h+0;i[14]=h+1;i[15]=h+2;i[8]=g;i[9]=h+9;i[10]=h+10;i[11]=h+3;i[4]=d;i[5]=h+8;i[6]=h+11;i[7]=h+4;i[0]=f;i[1]=h+7;i[2]=h+6;i[3]=h+5;f=n[2];d=n[3];n[2]=d;n[3]=u;n[0]=f;n[1]=u+1;break;case 2:f=i[15];d=i[11];i[12]=i[3];i[13]=h+0;i[14]=h+1;i[15]=h+2;i[8]=i[7];i[9]=h+9;i[10]=h+10;i[11]=h+3;i[4]=d;i[5]=h+8;i[6]=h+11;i[7]=h+4;i[0]=f;i[1]=h+7;i[2]=h+6;i[3]=h+5;f=n[3];n[2]=n[1];n[3]=u;n[0]=f;n[1]=u+1;break;case 3:i[12]=i[0];i[13]=h+0;i[14]=h+1;i[15]=h+2;i[8]=i[1];i[9]=h+9;i[10]=h+10;i[11]=h+3;i[4]=i[2];i[5]=h+8;i[6]=h+11;i[7]=h+4;i[0]=i[3];i[1]=h+7;i[2]=h+6;i[3]=h+5;n[2]=n[0];n[3]=u;n[0]=n[1];n[1]=u+1;break}e.figures.push({type:\"patch\",coords:new Int32Array(i),colors:new Int32Array(n)})}}function m(e){var t=e.coords[0][0],r=e.coords[0][1],a=t,i=r;for(var n=1,s=e.coords.length;n<s;n++){var o=e.coords[n][0],l=e.coords[n][1];t=t>o?o:t;r=r>l?l:r;a=a<o?o:a;i=i<l?l:i}e.bounds=[t,r,a,i]}function b(e){var t,r,a,i;var n=e.coords;var s=new Float32Array(n.length*2);for(t=0,a=0,r=n.length;t<r;t++){var o=n[t];s[a++]=o[0];s[a++]=o[1]}e.coords=s;var l=e.colors;var c=new Uint8Array(l.length*3);for(t=0,a=0,r=l.length;t<r;t++){var h=l[t];c[a++]=h[0];c[a++]=h[1];c[a++]=h[2]}e.colors=c;var u=e.figures;for(t=0,r=u.length;t<r;t++){var f=u[t],d=f.coords,g=f.colors;for(a=0,i=d.length;a<i;a++){d[a]*=2;g[a]*=3}}}function y(e,i,n,s){l(f(e),\"Mesh data is not a stream\");var o=e.dict;this.matrix=i;this.shadingType=o.get(\"ShadingType\");this.type=\"Pattern\";this.bbox=o.getArray(\"BBox\");var y=o.get(\"ColorSpace\",\"CS\");y=g.parse(y,n,s);this.cs=y;this.background=o.has(\"Background\")?y.getRgb(o.get(\"Background\"),0):null;var k=o.get(\"Function\");var w=k?d.parseArray(n,k):null;this.coords=[];this.colors=[];this.figures=[];var C={bitsPerCoordinate:o.get(\"BitsPerCoordinate\"),bitsPerComponent:o.get(\"BitsPerComponent\"),bitsPerFlag:o.get(\"BitsPerFlag\"),decode:o.getArray(\"Decode\"),colorFn:w,colorSpace:y,numComps:w?1:y.numComps};var x=new t(e,C);var S=false;switch(this.shadingType){case v.FREE_FORM_MESH:r(this,x);break;case v.LATTICE_FORM_MESH:var A=o.get(\"VerticesPerRow\")|0;l(A>=2,\"Invalid VerticesPerRow\");a(this,x,A);break;case v.COONS_PATCH_MESH:u(this,x);S=true;break;case v.TENSOR_PATCH_MESH:p(this,x);S=true;break;default:c(\"Unsupported mesh type.\");break}if(S){m(this);for(var I=0,B=this.figures.length;I<B;I++){h(this,I)}}m(this);b(this)}y.prototype={getIR:function e(){return[\"Mesh\",this.shadingType,this.coords,this.colors,this.figures,this.bounds,this.matrix,this.bbox,this.background]}};return y}();m.Dummy=function e(){function t(){this.type=\"Pattern\"}t.prototype={getIR:function e(){return[\"Dummy\"]}};return t}();function b(e,t,r){var a=t.getArray(\"Matrix\");var i=t.getArray(\"BBox\");var n=t.get(\"XStep\");var s=t.get(\"YStep\");var o=t.get(\"PaintType\");var l=t.get(\"TilingType\");return[\"TilingPattern\",r,e,a,i,n,s,o,l]}e.Pattern=p;e.getTilingPatternIR=b});(function(e,t){t(e.pdfjsCoreEvaluator={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreStream,e.pdfjsCoreParser,e.pdfjsCoreImage,e.pdfjsCoreColorSpace,e.pdfjsCoreMurmurHash3,e.pdfjsCoreFonts,e.pdfjsCoreFunction,e.pdfjsCorePattern,e.pdfjsCoreCMap,e.pdfjsCoreMetrics,e.pdfjsCoreBidi,e.pdfjsCoreEncodings,e.pdfjsCoreStandardFonts,e.pdfjsCoreUnicode,e.pdfjsCoreGlyphList)})(this,function(e,t,r,a,i,n,s,o,l,c,h,u,f,d,g,v,p,m){var b=t.FONT_IDENTITY_MATRIX;var y=t.IDENTITY_MATRIX;var k=t.UNSUPPORTED_FEATURES;var w=t.ImageKind;var C=t.OPS;var x=t.TextRenderingMode;var S=t.Util;var A=t.assert;var I=t.createPromiseCapability;var B=t.error;var R=t.info;var T=t.isArray;var O=t.isNum;var P=t.isString;var E=t.getLookupTableFactory;var M=t.warn;var L=r.Dict;var D=r.Name;var F=r.isCmd;var U=r.isDict;var j=r.isName;var q=r.isRef;var N=r.isStream;var _=a.DecodeStream;var z=a.JpegStream;var H=a.Stream;var G=i.Lexer;var X=i.Parser;var W=i.isEOF;var V=n.PDFImage;var K=s.ColorSpace;var Y=o.MurmurHash3_64;var J=l.ErrorFont;var Z=l.FontFlags;var Q=l.Font;var $=l.IdentityToUnicodeMap;var ee=l.ToUnicodeMap;var te=l.getFontType;var re=c.isPDFFunction;var ae=c.PDFFunction;var ie=h.Pattern;var ne=h.getTilingPatternIR;var se=u.CMapFactory;var oe=u.IdentityCMap;var le=f.getMetrics;var ce=d.bidi;var he=g.WinAnsiEncoding;var ue=g.StandardEncoding;var fe=g.MacRomanEncoding;var de=g.SymbolSetEncoding;var ge=g.ZapfDingbatsEncoding;var ve=g.getEncoding;var pe=v.getStdFontMap;var me=v.getSerifFonts;var be=v.getSymbolsFonts;var ye=p.getNormalizedUnicodes;var ke=p.reverseIfRtl;var we=p.getUnicodeForGlyph;var Ce=m.getGlyphsUnicode;var xe=function e(){var t={forceDataSchema:false,maxImageSize:-1,disableFontFace:false,cMapOptions:{url:null,packed:false}};function r(e,t,r,a){this.xref=e;this.resources=t;this.handler=r;this.forceDataSchema=a}r.prototype={canDecode:function(e){return e instanceof z&&r.isDecodable(e,this.xref,this.resources)},decode:function(e){var t=e.dict;var r=t.get(\"ColorSpace\",\"CS\");r=K.parse(r,this.xref,this.resources);var a=r.numComps;var i=this.handler.sendWithPromise(\"JpegDecode\",[e.getIR(this.forceDataSchema),a]);return i.then(function(t){var r=t.data;return new H(r,0,r.length,e.dict)})}};r.isSupported=function e(t,r,a){var i=t.dict;if(i.has(\"DecodeParms\")||i.has(\"DP\")){return false}var n=K.parse(i.get(\"ColorSpace\",\"CS\"),r,a);return(n.name===\"DeviceGray\"||n.name===\"DeviceRGB\")&&n.isDefaultDecode(i.getArray(\"Decode\",\"D\"))};r.isDecodable=function e(t,r,a){var i=t.dict;if(i.has(\"DecodeParms\")||i.has(\"DP\")){return false}var n=K.parse(i.get(\"ColorSpace\",\"CS\"),r,a);return(n.numComps===1||n.numComps===3)&&n.isDefaultDecode(i.getArray(\"Decode\",\"D\"))};function a(e,r,a,i,n,s,o){this.pdfManager=e;this.xref=r;this.handler=a;this.pageIndex=i;this.idFactory=n;this.fontCache=s;this.options=o||t}var i=20;var n=100;function s(){this.reset()}s.prototype={check:function e(){if(++this.checked<n){return false}this.checked=0;return this.endTime<=Date.now()},reset:function e(){this.endTime=Date.now()+i;this.checked=0}};var o=Promise.resolve();var l=1,c=2;a.prototype={hasBlendModes:function e(t){if(!U(t)){return false}var r=Object.create(null);if(t.objId){r[t.objId]=true}var a=[t],i=this.xref;while(a.length){var n,s,o;var l=a.shift();var c=l.get(\"ExtGState\");if(U(c)){var h=c.getKeys();for(s=0,o=h.length;s<o;s++){n=h[s];var u=c.get(n);var f=u.get(\"BM\");if(j(f)&&f.name!==\"Normal\"){return true}}}var d=l.get(\"XObject\");if(!U(d)){continue}var g=d.getKeys();for(s=0,o=g.length;s<o;s++){n=g[s];var v=d.getRaw(n);if(q(v)){if(r[v.toString()]){continue}v=i.fetch(v)}if(!N(v)){continue}if(v.dict.objId){if(r[v.dict.objId]){continue}r[v.dict.objId]=true}var p=v.dict.get(\"Resources\");if(U(p)&&(!p.objId||!r[p.objId])){a.push(p);if(p.objId){r[p.objId]=true}}}}return false},buildFormXObject:function e(t,r,a,i,n,s){var o=r.dict.getArray(\"Matrix\");var l=r.dict.getArray(\"BBox\");var c=r.dict.get(\"Group\");if(c){var h={matrix:o,bbox:l,smask:a,isolated:false,knockout:false};var u=c.get(\"S\");var f;if(j(u,\"Transparency\")){h.isolated=c.get(\"I\")||false;h.knockout=c.get(\"K\")||false;f=c.has(\"CS\")?K.parse(c.get(\"CS\"),this.xref,t):null}if(a&&a.backdrop){f=f||K.singletons.rgb;a.backdrop=f.getRgb(a.backdrop,0)}i.addOp(C.beginGroup,[h])}i.addOp(C.paintFormXObjectBegin,[o,l]);return this.getOperatorList(r,n,r.dict.get(\"Resources\")||t,i,s).then(function(){i.addOp(C.paintFormXObjectEnd,[]);if(c){i.addOp(C.endGroup,[h])}})},buildPaintImageXObject:function e(t,a,i,n,s,o){var l=this;var c=a.dict;var h=c.get(\"Width\",\"W\");var u=c.get(\"Height\",\"H\");if(!(h&&O(h))||!(u&&O(u))){M(\"Image dimensions are missing, or not numbers.\");return}var f=this.options.maxImageSize;if(f!==-1&&h*u>f){M(\"Image exceeded maximum allowed size and was removed.\");return}var d=c.get(\"ImageMask\",\"IM\")||false;var g,v;if(d){var p=c.get(\"Width\",\"W\");var m=c.get(\"Height\",\"H\");var b=p+7>>3;var y=a.getBytes(b*m);var k=c.getArray(\"Decode\",\"D\");var w=!!k&&k[0]>0;g=V.createMask(y,p,m,a instanceof _,w);g.cached=true;v=[g];n.addOp(C.paintImageMaskXObject,v);if(s){o[s]={fn:C.paintImageMaskXObject,args:v}}return}var x=c.get(\"SMask\",\"SM\")||false;var S=c.get(\"Mask\")||false;var A=200;if(i&&!x&&!S&&!(a instanceof z)&&h+u<A){var I=new V(this.xref,t,a,i,null,null);g=I.createImageData(true);n.addOp(C.paintInlineImageXObject,[g]);return}var B=\"img_\"+this.idFactory.createObjId();n.addDependency(B);v=[B,h,u];if(!x&&!S&&a instanceof z&&r.isSupported(a,this.xref,t)){n.addOp(C.paintJpegXObject,v);this.handler.send(\"obj\",[B,this.pageIndex,\"JpegStream\",a.getIR(this.options.forceDataSchema)]);return}var R=null;if(a instanceof z||S instanceof z||x instanceof z){R=new r(l.xref,t,l.handler,l.options.forceDataSchema)}V.buildImage(l.handler,l.xref,t,a,i,R).then(function(e){var t=e.createImageData(false);l.handler.send(\"obj\",[B,l.pageIndex,\"Image\",t],[t.data.buffer])}).then(undefined,function(e){M(\"Unable to decode image: \"+e);l.handler.send(\"obj\",[B,l.pageIndex,\"Image\",null])});n.addOp(C.paintImageXObject,v);if(s){o[s]={fn:C.paintImageXObject,args:v}}},handleSMask:function e(t,r,a,i,n){var s=t.get(\"G\");var o={subtype:t.get(\"S\").name,backdrop:t.get(\"BC\")};var l=t.get(\"TR\");if(re(l)){var c=ae.parse(this.xref,l);var h=new Uint8Array(256);var u=new Float32Array(1);for(var f=0;f<256;f++){u[0]=f/255;c(u,0,u,0);h[f]=u[0]*255|0}o.transferMap=h}return this.buildFormXObject(r,s,o,a,i,n.state.clone())},handleTilingType:function e(t,r,a,i,n,s,o){var l=new Ae;var c=[n.get(\"Resources\"),a];var h=L.merge(this.xref,c);return this.getOperatorList(i,o,h,l).then(function(){s.addDependencies(l.dependencies);s.addOp(t,ne({fnArray:l.fnArray,argsArray:l.argsArray},n,r))})},handleSetFont:function e(t,r,a,i,n,s){var o;if(r){r=r.slice();o=r[0].name}var l=this;return this.loadFont(o,a,this.xref,t).then(function(e){if(!e.font.isType3Font){return e}return e.loadType3Data(l,t,i,n).then(function(){return e},function(t){l.handler.send(\"UnsupportedFeature\",{featureId:k.font});return new Se(\"g_font_error\",new J(\"Type3 font load error: \"+t),e.font)})}).then(function(e){s.font=e.font;e.send(l.handler);return e.loadedName})},handleText:function e(t,r){var a=r.font;var i=a.charsToGlyphs(t);var n=!!(r.textRenderingMode&x.ADD_TO_PATH_FLAG);if(a.data&&(n||this.options.disableFontFace)){var s=function(e){if(!a.renderer.hasBuiltPath(e)){var t=a.renderer.getPathJs(e);this.handler.send(\"commonobj\",[a.loadedName+\"_path_\"+e,\"FontPath\",t])}}.bind(this);for(var o=0,l=i.length;o<l;o++){var c=i[o];s(c.fontChar);var h=c.accent;if(h&&h.fontChar){s(h.fontChar)}}}return i},setGState:function e(t,r,a,i,n,s){var o=[];var l=r.getKeys();var c=this;var h=Promise.resolve();for(var u=0,f=l.length;u<f;u++){var d=l[u];var g=r.get(d);switch(d){case\"Type\":break;case\"LW\":case\"LC\":case\"LJ\":case\"ML\":case\"D\":case\"RI\":case\"FL\":case\"CA\":case\"ca\":o.push([d,g]);break;case\"Font\":h=h.then(function(){return c.handleSetFont(t,null,g[0],a,i,s.state).then(function(e){a.addDependency(e);o.push([d,[e,g[1]]])})});break;case\"BM\":o.push([d,g]);break;case\"SMask\":if(j(g,\"None\")){o.push([d,false]);break}if(U(g)){h=h.then(function(e){return c.handleSMask(e,t,a,i,s)}.bind(this,g));o.push([d,true])}else{M(\"Unsupported SMask type\")}break;case\"OP\":case\"op\":case\"OPM\":case\"BG\":case\"BG2\":case\"UCR\":case\"UCR2\":case\"TR\":case\"TR2\":case\"HT\":case\"SM\":case\"SA\":case\"AIS\":case\"TK\":R(\"graphic state operator \"+d);break;default:R(\"Unknown graphic state operator \"+d);break}}return h.then(function(){if(o.length>0){a.addOp(C.setGState,[o])}})},loadFont:function e(t,r,a,i){function n(){return Promise.resolve(new Se(\"g_font_error\",new J(\"Font \"+t+\" is not available\"),r))}var s;if(r){A(q(r));s=r}else{var o=i.get(\"Font\");if(o){s=o.getRaw(t)}else{M(\"fontRes not available\");return n()}}if(!s){M(\"fontRef not available\");return n()}if(this.fontCache.has(s)){return this.fontCache.get(s)}r=a.fetchIfRef(s);if(!U(r)){return n()}if(r.translated){return r.translated}var l=I();var c=this.preEvaluateFont(r,a);var h=c.descriptor;var u=q(s),f;if(u){f=s.toString()}if(U(h)){if(!h.fontAliases){h.fontAliases=Object.create(null)}var d=h.fontAliases;var g=c.hash;if(d[g]){var v=d[g].aliasRef;if(u&&v&&this.fontCache.has(v)){this.fontCache.putAlias(s,v);return this.fontCache.get(s)}}else{d[g]={fontID:Q.getFontID()}}if(u){d[g].aliasRef=s}f=d[g].fontID}if(u){this.fontCache.put(s,l.promise)}else{if(!f){f=this.idFactory.createObjId()}this.fontCache.put(\"id_\"+f,l.promise)}A(f,'The \"fontID\" must be defined.');r.loadedName=\"g_\"+this.pdfManager.docId+\"_f\"+f;r.translated=l.promise;var p;try{p=this.translateFont(c,a)}catch(e){p=Promise.reject(e)}var m=this;p.then(function(e){if(e.fontType!==undefined){var t=a.stats.fontTypes;t[e.fontType]=true}l.resolve(new Se(r.loadedName,e,r))},function(e){m.handler.send(\"UnsupportedFeature\",{featureId:k.font});try{var t=c.descriptor;var i=t&&t.get(\"FontFile3\");var n=i&&i.get(\"Subtype\");var s=te(c.type,n&&n.name);var o=a.stats.fontTypes;o[s]=true}catch(e){}l.resolve(new Se(r.loadedName,new J(e instanceof Error?e.message:e),r))});return l.promise},buildPath:function e(t,r,a){var i=t.length-1;if(!a){a=[]}if(i<0||t.fnArray[i]!==C.constructPath){t.addOp(C.constructPath,[[r],a])}else{var n=t.argsArray[i];n[0].push(r);Array.prototype.push.apply(n[1],a)}},handleColorN:function e(t,r,a,i,n,s,o,h){var u=a[a.length-1];var f;if(j(u)&&(f=n.get(u.name))){var d=N(f)?f.dict:f;var g=d.get(\"PatternType\");if(g===l){var v=i.base?i.base.getRgb(a,0):null;return this.handleTilingType(r,v,s,f,d,t,o)}else if(g===c){var p=d.get(\"Shading\");var m=d.getArray(\"Matrix\");f=ie.parseShading(p,m,h,s,this.handler);t.addOp(r,f.getIR());return Promise.resolve()}return Promise.reject(\"Unknown PatternType: \"+g)}t.addOp(r,a);return Promise.resolve()},getOperatorList:function e(t,r,a,i,n){var l=this;var c=this.xref;var h=Object.create(null);A(i);a=a||L.empty;var u=a.get(\"XObject\")||L.empty;var f=a.get(\"Pattern\")||L.empty;var d=new Ie(n||new Re);var g=new Te(t,c,d);var v=new s;return new Promise(function e(t,n){var s=function(r){r.then(function(){try{e(t,n)}catch(e){n(e)}},n)};r.ensureNotTerminated();v.reset();var p,m={},b,y,k;while(!(p=v.check())){m.args=null;if(!g.read(m)){break}var w=m.args;var x=m.fn;switch(x|0){case C.paintXObject:if(w[0].code){break}var S=w[0].name;if(!S){M(\"XObject must be referred to by name.\");continue}if(h[S]!==undefined){i.addOp(h[S].fn,h[S].args);w=null;continue}var I=u.get(S);if(I){A(N(I),\"XObject should be a stream\");var T=I.dict.get(\"Subtype\");A(j(T),\"XObject should have a Name subtype\");if(T.name===\"Form\"){d.save();s(l.buildFormXObject(a,I,null,i,r,d.state.clone()).then(function(){d.restore()}));return}else if(T.name===\"Image\"){l.buildPaintImageXObject(a,I,false,i,S,h);w=null;continue}else if(T.name===\"PS\"){R(\"Ignored XObject subtype PS\");continue}else{B(\"Unhandled XObject subtype \"+T.name)}}break;case C.setFont:var E=w[1];s(l.handleSetFont(a,w,null,i,r,d.state).then(function(e){i.addDependency(e);i.addOp(C.setFont,[e,E])}));return;case C.endInlineImage:var D=w[0].cacheKey;if(D){var F=h[D];if(F!==undefined){i.addOp(F.fn,F.args);w=null;continue}}l.buildPaintImageXObject(a,w[0],true,i,D,h);w=null;continue;case C.showText:w[0]=l.handleText(w[0],d.state);break;case C.showSpacedText:var q=w[0];var _=[];var z=q.length;var H=d.state;for(b=0;b<z;++b){var G=q[b];if(P(G)){Array.prototype.push.apply(_,l.handleText(G,H))}else if(O(G)){_.push(G)}}w[0]=_;x=C.showText;break;case C.nextLineShowText:i.addOp(C.nextLine);w[0]=l.handleText(w[0],d.state);x=C.showText;break;case C.nextLineSetSpacingShowText:i.addOp(C.nextLine);i.addOp(C.setWordSpacing,[w.shift()]);i.addOp(C.setCharSpacing,[w.shift()]);w[0]=l.handleText(w[0],d.state);x=C.showText;break;case C.setTextRenderingMode:d.state.textRenderingMode=w[0];break;case C.setFillColorSpace:d.state.fillColorSpace=K.parse(w[0],c,a);continue;case C.setStrokeColorSpace:d.state.strokeColorSpace=K.parse(w[0],c,a);continue;case C.setFillColor:k=d.state.fillColorSpace;w=k.getRgb(w,0);x=C.setFillRGBColor;break;case C.setStrokeColor:k=d.state.strokeColorSpace;w=k.getRgb(w,0);x=C.setStrokeRGBColor;break;case C.setFillGray:d.state.fillColorSpace=K.singletons.gray;w=K.singletons.gray.getRgb(w,0);x=C.setFillRGBColor;break;case C.setStrokeGray:d.state.strokeColorSpace=K.singletons.gray;w=K.singletons.gray.getRgb(w,0);x=C.setStrokeRGBColor;break;case C.setFillCMYKColor:d.state.fillColorSpace=K.singletons.cmyk;w=K.singletons.cmyk.getRgb(w,0);x=C.setFillRGBColor;break;case C.setStrokeCMYKColor:d.state.strokeColorSpace=K.singletons.cmyk;w=K.singletons.cmyk.getRgb(w,0);x=C.setStrokeRGBColor;break;case C.setFillRGBColor:d.state.fillColorSpace=K.singletons.rgb;w=K.singletons.rgb.getRgb(w,0);break;case C.setStrokeRGBColor:d.state.strokeColorSpace=K.singletons.rgb;w=K.singletons.rgb.getRgb(w,0);break;case C.setFillColorN:k=d.state.fillColorSpace;if(k.name===\"Pattern\"){s(l.handleColorN(i,C.setFillColorN,w,k,f,a,r,c));return}w=k.getRgb(w,0);x=C.setFillRGBColor;break;case C.setStrokeColorN:k=d.state.strokeColorSpace;if(k.name===\"Pattern\"){s(l.handleColorN(i,C.setStrokeColorN,w,k,f,a,r,c));return}w=k.getRgb(w,0);x=C.setStrokeRGBColor;break;case C.shadingFill:var X=a.get(\"Shading\");if(!X){B(\"No shading resource found\")}var W=X.get(w[0].name);if(!W){B(\"No shading object found\")}var V=ie.parseShading(W,null,c,a,l.handler);var Y=V.getIR();w=[Y];x=C.shadingFill;break;case C.setGState:var J=w[0];var Z=a.get(\"ExtGState\");if(!U(Z)||!Z.has(J.name)){break}var Q=Z.get(J.name);s(l.setGState(a,Q,i,r,c,d));return;case C.moveTo:case C.lineTo:case C.curveTo:case C.curveTo2:case C.curveTo3:case C.closePath:l.buildPath(i,x,w);continue;case C.rectangle:l.buildPath(i,x,w);continue;case C.markPoint:case C.markPointProps:case C.beginMarkedContent:case C.beginMarkedContentProps:case C.endMarkedContent:case C.beginCompat:case C.endCompat:continue;default:if(w!==null){for(b=0,y=w.length;b<y;b++){if(w[b]instanceof L){break}}if(b<y){M(\"getOperatorList - ignoring operator: \"+x);continue}}}i.addOp(x,w)}if(p){s(o);return}for(b=0,y=g.savedStatesDepth;b<y;b++){i.addOp(C.restore,[])}t()})},getTextContent:function e(t,r,a,i,n,l){i=i||new Ie(new Be);var c=/\\s/g;var h={items:[],styles:Object.create(null)};var u={initialized:false,str:[],width:0,height:0,vertical:false,lastAdvanceWidth:0,lastAdvanceHeight:0,textAdvanceScale:0,spaceWidth:0,fakeSpaceMin:Infinity,fakeMultiSpaceMin:Infinity,fakeMultiSpaceMax:-0,textRunBreakAllowed:false,transform:null,fontName:null};var f=.3;var d=1.5;var g=4;var v=this;var p=this.xref;a=p.fetchIfRef(a)||L.empty;var m=null;var k=Object.create(null);var w=new Te(t,p,i);var x;function I(){if(u.initialized){return u}var e=x.font;if(!(e.loadedName in h.styles)){h.styles[e.loadedName]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical}}u.fontName=e.loadedName;var t=[x.fontSize*x.textHScale,0,0,x.fontSize,0,x.textRise];if(e.isType3Font&&x.fontMatrix!==b&&x.fontSize===1){var r=e.bbox[3]-e.bbox[1];if(r>0){r=r*x.fontMatrix[3];t[3]*=r}}var a=S.transform(x.ctm,S.transform(x.textMatrix,t));u.transform=a;if(!e.vertical){u.width=0;u.height=Math.sqrt(a[2]*a[2]+a[3]*a[3]);u.vertical=false}else{u.width=Math.sqrt(a[0]*a[0]+a[1]*a[1]);u.height=0;u.vertical=true}var i=x.textLineMatrix[0];var n=x.textLineMatrix[1];var s=Math.sqrt(i*i+n*n);i=x.ctm[0];n=x.ctm[1];var o=Math.sqrt(i*i+n*n);u.textAdvanceScale=o*s;u.lastAdvanceWidth=0;u.lastAdvanceHeight=0;var l=e.spaceWidth/1e3*x.fontSize;if(l){u.spaceWidth=l;u.fakeSpaceMin=l*f;u.fakeMultiSpaceMin=l*d;u.fakeMultiSpaceMax=l*g;u.textRunBreakAllowed=!e.isMonospace}else{u.spaceWidth=0;u.fakeSpaceMin=Infinity;u.fakeMultiSpaceMin=Infinity;u.fakeMultiSpaceMax=0;u.textRunBreakAllowed=false}u.initialized=true;return u}function B(e){var t=0,r=e.length,a;while(t<r&&(a=e.charCodeAt(t))>=32&&a<=127){t++}return t<r?e.replace(c,\" \"):e}function R(e){var t=e.str.join(\"\");var r=ce(t,-1,e.vertical);return{str:n?B(r.str):r.str,dir:r.dir,width:e.width,height:e.height,transform:e.transform,fontName:e.fontName}}function P(e,t){return v.loadFont(e,t,p,a).then(function(e){x.font=e.font;x.fontMatrix=e.font.fontMatrix||b})}function E(e){var t=x.font;var r=I();var a=0;var i=0;var n=t.charsToGlyphs(e);var s=t.defaultVMetrics;for(var o=0;o<n.length;o++){var l=n[o];var c=null;var h=null;var u=null;if(t.vertical){if(l.vmetric){u=l.vmetric[0];c=l.vmetric[1];h=l.vmetric[2]}else{u=l.width;c=l.width*.5;h=s[2]}}else{u=l.width}var f=l.unicode;var d=ye();if(d[f]!==undefined){f=d[f]}f=ke(f);var g=x.charSpacing;if(l.isSpace){var v=x.wordSpacing;g+=v;if(v>0){M(v,r.str)}}var p=0;var m=0;if(!t.vertical){var b=u*x.fontMatrix[0];p=(b*x.fontSize+g)*x.textHScale;a+=p}else{var y=u*x.fontMatrix[0];m=y*x.fontSize+g;i+=m}x.translateTextMatrix(p,m);r.str.push(f)}if(!t.vertical){r.lastAdvanceWidth=a;r.width+=a}else{r.lastAdvanceHeight=i;r.height+=Math.abs(i)}return r}function M(e,t){if(e<u.fakeSpaceMin){return}if(e<u.fakeMultiSpaceMin){t.push(\" \");return}var r=Math.round(e/u.spaceWidth);while(r-- >0){t.push(\" \")}}function D(){if(!u.initialized){return}u.width*=u.textAdvanceScale;u.height*=u.textAdvanceScale;h.items.push(R(u));u.initialized=false;u.str.length=0}var F=new s;return new Promise(function e(t,s){var c=function(r){r.then(function(){try{e(t,s)}catch(e){s(e)}},s)};r.ensureNotTerminated();F.reset();var f,d={},g=[];while(!(f=F.check())){g.length=0;d.args=g;if(!w.read(d)){break}x=i.state;var p=d.fn;g=d.args;var b,B;switch(p|0){case C.setFont:var R=g[0].name,q=g[1];if(x.font&&R===x.fontName&&q===x.fontSize){break}D();x.fontName=R;x.fontSize=q;c(P(R,null));return;case C.setTextRise:D();x.textRise=g[0];break;case C.setHScale:D();x.textHScale=g[0]/100;break;case C.setLeading:D();x.leading=g[0];break;case C.moveText:var _=!x.font?false:(x.font.vertical?g[0]:g[1])===0;b=g[0]-g[1];if(l&&_&&u.initialized&&b>0&&b<=u.fakeMultiSpaceMax){x.translateTextLineMatrix(g[0],g[1]);u.width+=g[0]-u.lastAdvanceWidth;u.height+=g[1]-u.lastAdvanceHeight;B=g[0]-u.lastAdvanceWidth-(g[1]-u.lastAdvanceHeight);M(B,u.str);break}D();x.translateTextLineMatrix(g[0],g[1]);x.textMatrix=x.textLineMatrix.slice();break;case C.setLeadingMoveText:D();x.leading=-g[1];x.translateTextLineMatrix(g[0],g[1]);x.textMatrix=x.textLineMatrix.slice();break;case C.nextLine:D();x.carriageReturn();break;case C.setTextMatrix:b=x.calcTextLineMatrixAdvance(g[0],g[1],g[2],g[3],g[4],g[5]);if(l&&b!==null&&u.initialized&&b.value>0&&b.value<=u.fakeMultiSpaceMax){x.translateTextLineMatrix(b.width,b.height);u.width+=b.width-u.lastAdvanceWidth;u.height+=b.height-u.lastAdvanceHeight;B=b.width-u.lastAdvanceWidth-(b.height-u.lastAdvanceHeight);M(B,u.str);break}D();x.setTextMatrix(g[0],g[1],g[2],g[3],g[4],g[5]);x.setTextLineMatrix(g[0],g[1],g[2],g[3],g[4],g[5]);break;case C.setCharSpacing:x.charSpacing=g[0];break;case C.setWordSpacing:x.wordSpacing=g[0];break;case C.beginText:D();x.textMatrix=y.slice();x.textLineMatrix=y.slice();break;case C.showSpacedText:var z=g[0];var H;for(var G=0,X=z.length;G<X;G++){if(typeof z[G]===\"string\"){E(z[G])}else if(O(z[G])){I();b=z[G]*x.fontSize/1e3;var W=false;if(x.font.vertical){H=b;x.translateTextMatrix(0,H);W=u.textRunBreakAllowed&&b>u.fakeMultiSpaceMax;if(!W){u.height+=H}}else{b=-b;H=b*x.textHScale;x.translateTextMatrix(H,0);W=u.textRunBreakAllowed&&b>u.fakeMultiSpaceMax;if(!W){u.width+=H}}if(W){D()}else if(b>0){M(b,u.str)}}}break;case C.showText:E(g[0]);break;case C.nextLineShowText:D();x.carriageReturn();E(g[0]);break;case C.nextLineSetSpacingShowText:D();x.wordSpacing=g[0];x.charSpacing=g[1];x.carriageReturn();E(g[2]);break;case C.paintXObject:D();if(g[0].code){break}if(!m){m=a.get(\"XObject\")||L.empty}var V=g[0].name;if(k.key===V){if(k.texts){S.appendToArray(h.items,k.texts.items);S.extendObj(h.styles,k.texts.styles)}break}var K=m.get(V);if(!K){break}A(N(K),\"XObject should be a stream\");var Y=K.dict.get(\"Subtype\");A(j(Y),\"XObject should have a Name subtype\");if(\"Form\"!==Y.name){k.key=V;k.texts=null;break}i.save();var J=K.dict.getArray(\"Matrix\");if(T(J)&&J.length===6){i.transform(J)}c(v.getTextContent(K,r,K.dict.get(\"Resources\")||a,i,n,l).then(function(e){S.appendToArray(h.items,e.items);S.extendObj(h.styles,e.styles);i.restore();k.key=V;k.texts=e}));return;case C.setGState:D();var Z=g[0];var Q=a.get(\"ExtGState\");if(!U(Q)||!j(Z)){break}var $=Q.get(Z.name);if(!U($)){break}var ee=$.get(\"Font\");if(ee){x.fontName=null;x.fontSize=ee[1];c(P(null,ee[0]));return}break}}if(f){c(o);return}D();t(h)})},extractDataStructures:function e(t,r,a,i){var n=t.get(\"ToUnicode\")||r.get(\"ToUnicode\");var s=n?this.readToUnicode(n):Promise.resolve(undefined);if(i.composite){var o=t.get(\"CIDSystemInfo\");if(U(o)){i.cidSystemInfo={registry:o.get(\"Registry\"),ordering:o.get(\"Ordering\"),supplement:o.get(\"Supplement\")}}var l=t.get(\"CIDToGIDMap\");if(N(l)){i.cidToGidMap=this.readCidToGidMap(l)}}var c=[];var h=null;var u;if(t.has(\"Encoding\")){u=t.get(\"Encoding\");if(U(u)){h=u.get(\"BaseEncoding\");h=j(h)?h.name:null;if(u.has(\"Differences\")){var f=u.get(\"Differences\");var d=0;for(var g=0,v=f.length;g<v;g++){var p=a.fetchIfRef(f[g]);if(O(p)){d=p}else if(j(p)){c[d++]=p.name}else{B(\"Invalid entry in 'Differences' array: \"+p)}}}}else if(j(u)){h=u.name}else{B(\"Encoding is not a Name nor a Dict\")}if(h!==\"MacRomanEncoding\"&&h!==\"MacExpertEncoding\"&&h!==\"WinAnsiEncoding\"){h=null}}if(h){i.defaultEncoding=ve(h).slice()}else{var m=!!(i.flags&Z.Symbolic);var b=!!(i.flags&Z.Nonsymbolic);u=ue;if(i.type===\"TrueType\"&&!b){u=he}if(m){u=fe;if(!i.file){if(/Symbol/i.test(i.name)){u=de}else if(/Dingbats/i.test(i.name)){u=ge}}}i.defaultEncoding=u}i.differences=c;i.baseEncodingName=h;i.hasEncoding=!!h||c.length>0;i.dict=t;return s.then(function(e){i.toUnicode=e;return this.buildToUnicode(i)}.bind(this)).then(function(e){i.toUnicode=e;return i})},buildToUnicode:function e(t){t.hasIncludedToUnicodeMap=!!t.toUnicode&&t.toUnicode.length>0;if(t.hasIncludedToUnicodeMap){return Promise.resolve(t.toUnicode)}var r,a,i;if(!t.composite){r=[];var n=t.defaultEncoding.slice();var s=t.baseEncodingName;var o=t.differences;for(a in o){i=o[a];if(i===\".notdef\"){continue}n[a]=i}var l=Ce();for(a in n){i=n[a];if(i===\"\"){continue}else if(l[i]===undefined){var c=0;switch(i[0]){case\"G\":if(i.length===3){c=parseInt(i.substr(1),16)}break;case\"g\":if(i.length===5){c=parseInt(i.substr(1),16)}break;case\"C\":case\"c\":if(i.length>=3){c=+i.substr(1)}break;default:var h=we(i,l);if(h!==-1){c=h}}if(c){if(s&&c===+a){var u=ve(s);if(u&&(i=u[a])){r[a]=String.fromCharCode(l[i]);continue}}r[a]=String.fromCharCode(c)}continue}r[a]=String.fromCharCode(l[i])}return Promise.resolve(new ee(r))}if(t.composite&&(t.cMap.builtInCMap&&!(t.cMap instanceof oe)||t.cidSystemInfo.registry===\"Adobe\"&&(t.cidSystemInfo.ordering===\"GB1\"||t.cidSystemInfo.ordering===\"CNS1\"||t.cidSystemInfo.ordering===\"Japan1\"||t.cidSystemInfo.ordering===\"Korea1\"))){var f=t.cidSystemInfo.registry;var d=t.cidSystemInfo.ordering;var g=D.get(f+\"-\"+d+\"-UCS2\");return se.create(g,this.options.cMapOptions,null).then(function(e){var a=t.cMap;r=[];a.forEach(function(t,a){A(a<=65535,\"Max size of CID is 65,535\");var i=e.lookup(a);if(i){r[t]=String.fromCharCode((i.charCodeAt(0)<<8)+i.charCodeAt(1))}});return new ee(r)})}return Promise.resolve(new $(t.firstChar,t.lastChar))},readToUnicode:function e(t){var r=t;if(j(r)){return se.create(r,this.options.cMapOptions,null).then(function(e){if(e instanceof oe){return new $(0,65535)}return new ee(e.getMap())})}else if(N(r)){return se.create(r,this.options.cMapOptions,null).then(function(e){if(e instanceof oe){return new $(0,65535)}var t=new Array(e.length);e.forEach(function(e,r){var a=[];for(var i=0;i<r.length;i+=2){var n=r.charCodeAt(i)<<8|r.charCodeAt(i+1);if((n&63488)!==55296){a.push(n);continue}i+=2;var s=r.charCodeAt(i)<<8|r.charCodeAt(i+1);a.push(((n&1023)<<10)+(s&1023)+65536)}t[e]=String.fromCharCode.apply(String,a)});return new ee(t)})}return Promise.resolve(null)},readCidToGidMap:function e(t){var r=t.getBytes();var a=[];for(var i=0,n=r.length;i<n;i++){var s=r[i++]<<8|r[i];if(s===0){continue}var o=i>>1;a[o]=s}return a},extractWidths:function e(t,r,a,i){var n=[];var s=0;var o=[];var l;var c,h,u,f,d,g,v;if(i.composite){s=t.get(\"DW\")||1e3;v=t.get(\"W\");if(v){for(c=0,h=v.length;c<h;c++){d=r.fetchIfRef(v[c++]);g=r.fetchIfRef(v[c]);if(T(g)){for(u=0,f=g.length;u<f;u++){n[d++]=r.fetchIfRef(g[u])}}else{var p=r.fetchIfRef(v[++c]);for(u=d;u<=g;u++){n[u]=p}}}}if(i.vertical){var m=t.getArray(\"DW2\")||[880,-1e3];l=[m[1],s*.5,m[0]];m=t.get(\"W2\");if(m){for(c=0,h=m.length;c<h;c++){d=r.fetchIfRef(m[c++]);g=r.fetchIfRef(m[c]);if(T(g)){for(u=0,f=g.length;u<f;u++){o[d++]=[r.fetchIfRef(g[u++]),r.fetchIfRef(g[u++]),r.fetchIfRef(g[u])]}}else{var b=[r.fetchIfRef(m[++c]),r.fetchIfRef(m[++c]),r.fetchIfRef(m[++c])];for(u=d;u<=g;u++){o[u]=b}}}}}}else{var y=i.firstChar;v=t.get(\"Widths\");if(v){u=y;for(c=0,h=v.length;c<h;c++){n[u++]=r.fetchIfRef(v[c])}s=parseFloat(a.get(\"MissingWidth\"))||0}else{var k=t.get(\"BaseFont\");if(j(k)){var w=this.getBaseFontMetrics(k.name);n=this.buildCharCodeToWidth(w.widths,i);s=w.defaultWidth}}}var C=true;var x=s;for(var S in n){var A=n[S];if(!A){continue}if(!x){x=A;continue}if(x!==A){C=false;break}}if(C){i.flags|=Z.FixedPitch}i.defaultWidth=s;i.widths=n;i.defaultVMetrics=l;i.vmetrics=o},isSerifFont:function e(t){var r=t.split(\"-\")[0];return r in me()||r.search(/serif/gi)!==-1},getBaseFontMetrics:function e(t){var r=0;var a=[];var i=false;var n=pe();var s=n[t]||t;var o=le();if(!(s in o)){if(this.isSerifFont(t)){s=\"Times-Roman\"}else{s=\"Helvetica\"}}var l=o[s];if(O(l)){r=l;i=true}else{a=l()}return{defaultWidth:r,monospace:i,widths:a}},buildCharCodeToWidth:function e(t,r){var a=Object.create(null);var i=r.differences;var n=r.defaultEncoding;for(var s=0;s<256;s++){if(s in i&&t[i[s]]){a[s]=t[i[s]];continue}if(s in n&&t[n[s]]){a[s]=t[n[s]];continue}}return a},preEvaluateFont:function e(t,r){var a=t;var i=t.get(\"Subtype\");A(j(i),\"invalid font Subtype\");var n=false;var s;if(i.name===\"Type0\"){var o=t.get(\"DescendantFonts\");if(!o){B(\"Descendant fonts are not specified\")}t=T(o)?r.fetchIfRef(o[0]):o;i=t.get(\"Subtype\");A(j(i),\"invalid font Subtype\");n=true}var l=t.get(\"FontDescriptor\");if(l){var c=new Y;var h=a.getRaw(\"Encoding\");if(j(h)){c.update(h.name)}else if(q(h)){c.update(h.toString())}else if(U(h)){var u=h.getKeys();for(var f=0,d=u.length;f<d;f++){var g=h.getRaw(u[f]);if(j(g)){c.update(g.name)}else if(q(g)){c.update(g.toString())}else if(T(g)){var v=g.length,p=new Array(v);for(var m=0;m<v;m++){var b=g[m];if(j(b)){p[m]=b.name}else if(O(b)||q(b)){p[m]=b.toString()}}c.update(p.join())}}}var y=t.get(\"ToUnicode\")||a.get(\"ToUnicode\");if(N(y)){var k=y.str||y;s=k.buffer?new Uint8Array(k.buffer.buffer,0,k.bufferLength):new Uint8Array(k.bytes.buffer,k.start,k.end-k.start);c.update(s)}else if(j(y)){c.update(y.name)}var w=t.get(\"Widths\")||a.get(\"Widths\");if(w){s=new Uint8Array(new Uint32Array(w).buffer);c.update(s)}}return{descriptor:l,dict:t,baseDict:a,composite:n,type:i.name,hash:c?c.hexdigest():\"\"}},translateFont:function e(t,r){var a=t.baseDict;var i=t.dict;var n=t.composite;var s=t.descriptor;var o=t.type;var l=n?65535:255;var c=this.options.cMapOptions;var h;if(!s){if(o===\"Type3\"){s=new L(null);s.set(\"FontName\",D.get(o));s.set(\"FontBBox\",i.getArray(\"FontBBox\"))}else{var u=i.get(\"BaseFont\");if(!j(u)){B(\"Base font is not specified\")}u=u.name.replace(/[,_]/g,\"-\");var f=this.getBaseFontMetrics(u);var d=u.split(\"-\")[0];var g=(this.isSerifFont(d)?Z.Serif:0)|(f.monospace?Z.FixedPitch:0)|(be()[d]?Z.Symbolic:Z.Nonsymbolic);h={type:o,name:u,widths:f.widths,defaultWidth:f.defaultWidth,flags:g,firstChar:0,lastChar:l};return this.extractDataStructures(i,i,r,h).then(function(e){e.widths=this.buildCharCodeToWidth(f.widths,e);return new Q(u,null,e)}.bind(this))}}var v=i.get(\"FirstChar\")||0;var p=i.get(\"LastChar\")||l;var m=s.get(\"FontName\");var y=i.get(\"BaseFont\");if(P(m)){m=D.get(m)}if(P(y)){y=D.get(y)}if(o!==\"Type3\"){var k=m&&m.name;var w=y&&y.name;if(k!==w){R(\"The FontDescriptor's FontName is \\\"\"+k+'\" but should be the same as the Font\\'s BaseFont \"'+w+'\"');if(k&&w&&w.indexOf(k)===0){m=y}}}m=m||y;A(j(m),\"invalid font name\");var C=s.get(\"FontFile\",\"FontFile2\",\"FontFile3\");if(C){if(C.dict){var x=C.dict.get(\"Subtype\");if(x){x=x.name}var S=C.dict.get(\"Length1\");var I=C.dict.get(\"Length2\");var T=C.dict.get(\"Length3\")}}h={type:o,name:m.name,subtype:x,file:C,length1:S,length2:I,length3:T,loadedName:a.loadedName,composite:n,wideChars:n,fixedPitch:false,fontMatrix:i.getArray(\"FontMatrix\")||b,firstChar:v||0,lastChar:p||l,bbox:s.getArray(\"FontBBox\"),ascent:s.get(\"Ascent\"),descent:s.get(\"Descent\"),xHeight:s.get(\"XHeight\"),capHeight:s.get(\"CapHeight\"),flags:s.get(\"Flags\"),italicAngle:s.get(\"ItalicAngle\"),coded:false};var O;if(n){var E=a.get(\"Encoding\");if(j(E)){h.cidEncoding=E.name}O=se.create(E,c,null).then(function(e){h.cMap=e;h.vertical=h.cMap.vertical})}else{O=Promise.resolve(undefined)}return O.then(function(){return this.extractDataStructures(i,a,r,h)}.bind(this)).then(function(e){this.extractWidths(i,r,s,e);if(o===\"Type3\"){e.isType3Font=true}return new Q(m.name,C,e)}.bind(this))}};return a}();var Se=function e(){function t(e,t,r){this.loadedName=e;this.font=t;this.dict=r;this.type3Loaded=null;this.sent=false}t.prototype={send:function(e){if(this.sent){return}var t=this.font.exportData();e.send(\"commonobj\",[this.loadedName,\"Font\",t]);this.sent=true},loadType3Data:function(e,t,r,a){A(this.font.isType3Font);if(this.type3Loaded){return this.type3Loaded}var i=this.font;var n=Promise.resolve();var s=this.dict.get(\"CharProcs\");var o=this.dict.get(\"Resources\")||t;var l=s.getKeys();var c=Object.create(null);for(var h=0,u=l.length;h<u;++h){n=n.then(function(t){var i=s.get(t);var n=new Ae;return e.getOperatorList(i,a,o,n).then(function(){c[t]=n.getIR();r.addDependencies(n.dependencies)},function(e){M('Type3 font resource \"'+t+'\" is not available');var r=new Ae;c[t]=r.getIR()})}.bind(this,l[h]))}this.type3Loaded=n.then(function(){i.charProcOperatorList=c});return this.type3Loaded}};return t}();var Ae=function e(){var t=1e3;var r=t-5;function a(e){var t=[];var r=e.fnArray,a=e.argsArray;for(var i=0,n=e.length;i<n;i++){switch(r[i]){case C.paintInlineImageXObject:case C.paintInlineImageXObjectGroup:case C.paintImageMaskXObject:var s=a[i][0];if(!s.cached){t.push(s.data.buffer)}break}}return t}function i(e,t,r){this.messageHandler=t;this.fnArray=[];this.argsArray=[];this.dependencies=Object.create(null);this._totalLength=0;this.pageIndex=r;this.intent=e}i.prototype={get length(){return this.argsArray.length},get totalLength(){return this._totalLength+this.length},addOp:function(e,a){this.fnArray.push(e);this.argsArray.push(a);if(this.messageHandler){if(this.fnArray.length>=t){this.flush()}else if(this.fnArray.length>=r&&(e===C.restore||e===C.endText)){this.flush()}}},addDependency:function(e){if(e in this.dependencies){return}this.dependencies[e]=true;this.addOp(C.dependency,[e])},addDependencies:function(e){for(var t in e){this.addDependency(t)}},addOpList:function(e){S.extendObj(this.dependencies,e.dependencies);for(var t=0,r=e.length;t<r;t++){this.addOp(e.fnArray[t],e.argsArray[t])}},getIR:function(){return{fnArray:this.fnArray,argsArray:this.argsArray,length:this.length}},flush:function(e){if(this.intent!==\"oplist\"){(new Oe).optimize(this)}var t=a(this);var r=this.length;this._totalLength+=r;this.messageHandler.send(\"RenderPageChunk\",{operatorList:{fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,length:r},pageIndex:this.pageIndex,intent:this.intent},t);this.dependencies=Object.create(null);this.fnArray.length=0;this.argsArray.length=0}};return i}();var Ie=function e(){function t(e){this.state=e;this.stateStack=[]}t.prototype={save:function(){var e=this.state;this.stateStack.push(this.state);this.state=e.clone()},restore:function(){var e=this.stateStack.pop();if(e){this.state=e}},transform:function(e){this.state.ctm=S.transform(this.state.ctm,e)}};return t}();var Be=function e(){function t(){this.ctm=new Float32Array(y);this.fontName=null;this.fontSize=0;this.font=null;this.fontMatrix=b;this.textMatrix=y.slice();this.textLineMatrix=y.slice();this.charSpacing=0;this.wordSpacing=0;this.leading=0;this.textHScale=1;this.textRise=0}t.prototype={setTextMatrix:function e(t,r,a,i,n,s){var o=this.textMatrix;o[0]=t;o[1]=r;o[2]=a;o[3]=i;o[4]=n;o[5]=s},setTextLineMatrix:function e(t,r,a,i,n,s){var o=this.textLineMatrix;o[0]=t;o[1]=r;o[2]=a;o[3]=i;o[4]=n;o[5]=s},translateTextMatrix:function e(t,r){var a=this.textMatrix;a[4]=a[0]*t+a[2]*r+a[4];a[5]=a[1]*t+a[3]*r+a[5]},translateTextLineMatrix:function e(t,r){var a=this.textLineMatrix;a[4]=a[0]*t+a[2]*r+a[4];a[5]=a[1]*t+a[3]*r+a[5]},calcTextLineMatrixAdvance:function e(t,r,a,i,n,s){var o=this.font;if(!o){return null}var l=this.textLineMatrix;if(!(t===l[0]&&r===l[1]&&a===l[2]&&i===l[3])){return null}var c=n-l[4],h=s-l[5];if(o.vertical&&c!==0||!o.vertical&&h!==0){return null}var u,f,d=t*i-r*a;if(o.vertical){u=-h*a/d;f=h*t/d}else{u=c*i/d;f=-c*r/d}return{width:u,height:f,value:o.vertical?f:u}},calcRenderMatrix:function e(t){var r=[this.fontSize*this.textHScale,0,0,this.fontSize,0,this.textRise];return S.transform(t,S.transform(this.textMatrix,r))},carriageReturn:function e(){this.translateTextLineMatrix(0,-this.leading);this.textMatrix=this.textLineMatrix.slice()},clone:function e(){var t=Object.create(this);t.textMatrix=this.textMatrix.slice();t.textLineMatrix=this.textLineMatrix.slice();t.fontMatrix=this.fontMatrix.slice();return t}};return t}();var Re=function e(){function t(){this.ctm=new Float32Array(y);this.font=null;this.textRenderingMode=x.FILL;this.fillColorSpace=K.singletons.gray;this.strokeColorSpace=K.singletons.gray}t.prototype={clone:function e(){return Object.create(this)}};return t}();var Te=function e(){var t=E(function(e){e[\"w\"]={id:C.setLineWidth,numArgs:1,variableArgs:false};e[\"J\"]={id:C.setLineCap,numArgs:1,variableArgs:false};e[\"j\"]={id:C.setLineJoin,numArgs:1,variableArgs:false};e[\"M\"]={id:C.setMiterLimit,numArgs:1,variableArgs:false};e[\"d\"]={id:C.setDash,numArgs:2,variableArgs:false};e[\"ri\"]={id:C.setRenderingIntent,numArgs:1,variableArgs:false};e[\"i\"]={id:C.setFlatness,numArgs:1,variableArgs:false};e[\"gs\"]={id:C.setGState,numArgs:1,variableArgs:false};e[\"q\"]={id:C.save,numArgs:0,variableArgs:false};e[\"Q\"]={id:C.restore,numArgs:0,variableArgs:false};e[\"cm\"]={id:C.transform,numArgs:6,variableArgs:false};e[\"m\"]={id:C.moveTo,numArgs:2,variableArgs:false};e[\"l\"]={id:C.lineTo,numArgs:2,variableArgs:false};e[\"c\"]={id:C.curveTo,numArgs:6,variableArgs:false};e[\"v\"]={id:C.curveTo2,numArgs:4,variableArgs:false};e[\"y\"]={id:C.curveTo3,numArgs:4,variableArgs:false};e[\"h\"]={id:C.closePath,numArgs:0,variableArgs:false};e[\"re\"]={id:C.rectangle,numArgs:4,variableArgs:false};e[\"S\"]={id:C.stroke,numArgs:0,variableArgs:false};e[\"s\"]={id:C.closeStroke,numArgs:0,variableArgs:false};e[\"f\"]={id:C.fill,numArgs:0,variableArgs:false};e[\"F\"]={id:C.fill,numArgs:0,variableArgs:false};e[\"f*\"]={id:C.eoFill,numArgs:0,variableArgs:false};e[\"B\"]={id:C.fillStroke,numArgs:0,variableArgs:false};e[\"B*\"]={id:C.eoFillStroke,numArgs:0,variableArgs:false};e[\"b\"]={id:C.closeFillStroke,numArgs:0,variableArgs:false};e[\"b*\"]={id:C.closeEOFillStroke,numArgs:0,variableArgs:false};e[\"n\"]={id:C.endPath,numArgs:0,variableArgs:false};e[\"W\"]={id:C.clip,numArgs:0,variableArgs:false};e[\"W*\"]={id:C.eoClip,numArgs:0,variableArgs:false};e[\"BT\"]={id:C.beginText,numArgs:0,variableArgs:false};e[\"ET\"]={id:C.endText,numArgs:0,variableArgs:false};e[\"Tc\"]={id:C.setCharSpacing,numArgs:1,variableArgs:false};e[\"Tw\"]={id:C.setWordSpacing,numArgs:1,variableArgs:false};e[\"Tz\"]={id:C.setHScale,numArgs:1,variableArgs:false};e[\"TL\"]={id:C.setLeading,numArgs:1,variableArgs:false};e[\"Tf\"]={id:C.setFont,numArgs:2,variableArgs:false};e[\"Tr\"]={id:C.setTextRenderingMode,numArgs:1,variableArgs:false};e[\"Ts\"]={id:C.setTextRise,numArgs:1,variableArgs:false};e[\"Td\"]={id:C.moveText,numArgs:2,variableArgs:false};e[\"TD\"]={id:C.setLeadingMoveText,numArgs:2,variableArgs:false};e[\"Tm\"]={id:C.setTextMatrix,numArgs:6,variableArgs:false};e[\"T*\"]={id:C.nextLine,numArgs:0,variableArgs:false};e[\"Tj\"]={id:C.showText,numArgs:1,variableArgs:false};e[\"TJ\"]={id:C.showSpacedText,numArgs:1,variableArgs:false};e[\"'\"]={id:C.nextLineShowText,numArgs:1,variableArgs:false};e['\"']={id:C.nextLineSetSpacingShowText,numArgs:3,variableArgs:false};e[\"d0\"]={id:C.setCharWidth,numArgs:2,variableArgs:false};e[\"d1\"]={id:C.setCharWidthAndBounds,numArgs:6,variableArgs:false};e[\"CS\"]={id:C.setStrokeColorSpace,numArgs:1,variableArgs:false};e[\"cs\"]={id:C.setFillColorSpace,numArgs:1,variableArgs:false};e[\"SC\"]={id:C.setStrokeColor,numArgs:4,variableArgs:true};e[\"SCN\"]={id:C.setStrokeColorN,numArgs:33,variableArgs:true};e[\"sc\"]={id:C.setFillColor,numArgs:4,variableArgs:true};e[\"scn\"]={id:C.setFillColorN,numArgs:33,variableArgs:true};e[\"G\"]={id:C.setStrokeGray,numArgs:1,variableArgs:false};e[\"g\"]={id:C.setFillGray,numArgs:1,variableArgs:false};e[\"RG\"]={id:C.setStrokeRGBColor,numArgs:3,variableArgs:false};e[\"rg\"]={id:C.setFillRGBColor,numArgs:3,variableArgs:false};e[\"K\"]={id:C.setStrokeCMYKColor,numArgs:4,variableArgs:false};e[\"k\"]={id:C.setFillCMYKColor,numArgs:4,variableArgs:false};e[\"sh\"]={id:C.shadingFill,numArgs:1,variableArgs:false};e[\"BI\"]={id:C.beginInlineImage,numArgs:0,variableArgs:false};e[\"ID\"]={id:C.beginImageData,numArgs:0,variableArgs:false};e[\"EI\"]={id:C.endInlineImage,numArgs:1,variableArgs:false};e[\"Do\"]={id:C.paintXObject,numArgs:1,variableArgs:false};e[\"MP\"]={id:C.markPoint,numArgs:1,variableArgs:false};e[\"DP\"]={id:C.markPointProps,numArgs:2,variableArgs:false};e[\"BMC\"]={id:C.beginMarkedContent,numArgs:1,variableArgs:false};e[\"BDC\"]={id:C.beginMarkedContentProps,numArgs:2,variableArgs:false};e[\"EMC\"]={id:C.endMarkedContent,numArgs:0,variableArgs:false};e[\"BX\"]={id:C.beginCompat,numArgs:0,variableArgs:false};e[\"EX\"]={id:C.endCompat,numArgs:0,variableArgs:false};e[\"BM\"]=null;e[\"BD\"]=null;e[\"true\"]=null;e[\"fa\"]=null;e[\"fal\"]=null;e[\"fals\"]=null;e[\"false\"]=null;e[\"nu\"]=null;e[\"nul\"]=null;e[\"null\"]=null});function r(e,r,a){this.opMap=t();this.parser=new X(new G(e,this.opMap),false,r);this.stateManager=a;this.nonProcessedArgs=[]}r.prototype={get savedStatesDepth(){return this.stateManager.stateStack.length},read:function e(t){var r=t.args;while(true){var a=this.parser.getObj();if(F(a)){var i=a.cmd;var n=this.opMap[i];if(!n){M('Unknown command \"'+i+'\"');continue}var s=n.id;var o=n.numArgs;var l=r!==null?r.length:0;if(!n.variableArgs){if(l!==o){var c=this.nonProcessedArgs;while(l>o){c.push(r.shift());l--}while(l<o&&c.length!==0){if(r===null){r=[]}r.unshift(c.pop());l++}}if(l<o){M(\"Skipping command \"+s+\": expected \"+o+\" args, but received \"+l+\" args.\");if(r!==null){r.length=0}continue}}else if(l>o){R(\"Command \"+s+\": expected [0,\"+o+\"] args, but received \"+l+\" args.\")}this.preprocessCommand(s,r);t.fn=s;t.args=r;return true}if(W(a)){return false}if(a!==null){if(r===null){r=[]}r.push(a);A(r.length<=33,\"Too many arguments\")}}},preprocessCommand:function e(t,r){switch(t|0){case C.save:this.stateManager.save();break;case C.restore:this.stateManager.restore();break;case C.transform:this.stateManager.transform(r);break}}};return r}();var Oe=function e(){function t(e,t,r){var a=e;for(var i=0,n=t.length-1;i<n;i++){var s=t[i];a=a[s]||(a[s]=[])}a[t[t.length-1]]=r}function r(e,t,r,a){var i=e+2;for(var n=0;n<t;n++){var s=a[i+4*n];var o=s.length===1&&s[0];if(o&&o.width===1&&o.height===1&&(!o.data.length||o.data.length===1&&o.data[0]===0)){r[i+4*n]=C.paintSolidColorImageMask;continue}break}return t-n}var a=[];t(a,[C.save,C.transform,C.paintInlineImageXObject,C.restore],function e(t){var r=10;var a=200;var i=1e3;var n=1;var s=t.fnArray,o=t.argsArray;var l=t.iCurr;var c=l-3;var h=l-2;var u=l-1;var f=c+4;var d=s.length;while(f+3<d){if(s[f]!==C.save||s[f+1]!==C.transform||s[f+2]!==C.paintInlineImageXObject||s[f+3]!==C.restore){break}f+=4}var g=Math.min((f-c)/4,a);if(g<r){return f}var v=0;var p=[],m=0;var b=n,y=n;var k;for(k=0;k<g;k++){var x=o[h+(k<<2)];var S=o[u+(k<<2)][0];if(b+S.width>i){v=Math.max(v,b);y+=m+2*n;b=0;m=0}p.push({transform:x,x:b,y:y,w:S.width,h:S.height});b+=S.width+2*n;m=Math.max(m,S.height)}var A=Math.max(v,b)+n;var I=y+m+n;var B=new Uint8Array(A*I*4);var R=A<<2;for(k=0;k<g;k++){var T=o[u+(k<<2)][0].data;var O=p[k].w<<2;var P=0;var E=p[k].x+p[k].y*A<<2;B.set(T.subarray(0,O),E-R);for(var M=0,L=p[k].h;M<L;M++){B.set(T.subarray(P,P+O),E);P+=O;E+=R}B.set(T.subarray(P-O,P),E);while(E>=0){T[E-4]=T[E];T[E-3]=T[E+1];T[E-2]=T[E+2];T[E-1]=T[E+3];T[E+O]=T[E+O-4];T[E+O+1]=T[E+O-3];T[E+O+2]=T[E+O-2];T[E+O+3]=T[E+O-1];E-=R}}s.splice(c,g*4,C.paintInlineImageXObjectGroup);o.splice(c,g*4,[{width:A,height:I,kind:w.RGBA_32BPP,data:B},p]);return c+1});t(a,[C.save,C.transform,C.paintImageMaskXObject,C.restore],function e(t){var a=10;var i=100;var n=1e3;var s=t.fnArray,o=t.argsArray;var l=t.iCurr;var c=l-3;var h=l-2;var u=l-1;var f=c+4;var d=s.length;while(f+3<d){if(s[f]!==C.save||s[f+1]!==C.transform||s[f+2]!==C.paintImageMaskXObject||s[f+3]!==C.restore){break}f+=4}var g=(f-c)/4;g=r(c,g,s,o);if(g<a){return f}var v;var p=false;var m,b;var y=o[u][0];if(o[h][1]===0&&o[h][2]===0){p=true;var k=o[h][0];var w=o[h][3];m=h+4;var x=u+4;for(v=1;v<g;v++,m+=4,x+=4){b=o[m];if(o[x][0]!==y||b[0]!==k||b[1]!==0||b[2]!==0||b[3]!==w){if(v<a){p=false}else{g=v}break}}}if(p){g=Math.min(g,n);var S=new Float32Array(g*2);m=h;for(v=0;v<g;v++,m+=4){b=o[m];S[v<<1]=b[4];S[(v<<1)+1]=b[5]}s.splice(c,g*4,C.paintImageMaskXObjectRepeat);o.splice(c,g*4,[y,k,w,S])}else{g=Math.min(g,i);var A=[];for(v=0;v<g;v++){b=o[h+(v<<2)];var I=o[u+(v<<2)][0];A.push({data:I.data,width:I.width,height:I.height,transform:b})}s.splice(c,g*4,C.paintImageMaskXObjectGroup);o.splice(c,g*4,[A])}return c+1});t(a,[C.save,C.transform,C.paintImageXObject,C.restore],function(e){var t=3;var r=1e3;var a=e.fnArray,i=e.argsArray;var n=e.iCurr;var s=n-3;var o=n-2;var l=n-1;var c=n;if(i[o][1]!==0||i[o][2]!==0){return c+1}var h=i[l][0];var u=i[o][0];var f=i[o][3];var d=s+4;var g=a.length;while(d+3<g){if(a[d]!==C.save||a[d+1]!==C.transform||a[d+2]!==C.paintImageXObject||a[d+3]!==C.restore){break}if(i[d+1][0]!==u||i[d+1][1]!==0||i[d+1][2]!==0||i[d+1][3]!==f){break}if(i[d+2][0]!==h){break}d+=4}var v=Math.min((d-s)/4,r);if(v<t){return d}var p=new Float32Array(v*2);var m=o;for(var b=0;b<v;b++,m+=4){var y=i[m];p[b<<1]=y[4];p[(b<<1)+1]=y[5]}var k=[h,u,f,p];a.splice(s,v*4,C.paintImageXObjectRepeat);i.splice(s,v*4,k);return s+1});t(a,[C.beginText,C.setFont,C.setTextMatrix,C.showText,C.endText],function(e){var t=3;var r=1e3;var a=e.fnArray,i=e.argsArray;var n=e.iCurr;var s=n-4;var o=n-3;var l=n-2;var c=n-1;var h=n;var u=i[o][0];var f=i[o][1];var d=s+5;var g=a.length;while(d+4<g){if(a[d]!==C.beginText||a[d+1]!==C.setFont||a[d+2]!==C.setTextMatrix||a[d+3]!==C.showText||a[d+4]!==C.endText){break}if(i[d+1][0]!==u||i[d+1][1]!==f){break}d+=5}var v=Math.min((d-s)/5,r);if(v<t){return d}var p=s;if(s>=4&&a[s-4]===a[o]&&a[s-3]===a[l]&&a[s-2]===a[c]&&a[s-1]===a[h]&&i[s-4][0]===u&&i[s-4][1]===f){v++;p-=5}var m=p+4;for(var b=1;b<v;b++){a.splice(m,3);i.splice(m,3);m+=2}return m+1});function i(){}i.prototype={optimize:function e(t){var r=t.fnArray,i=t.argsArray;var n={iCurr:0,fnArray:r,argsArray:i};var s;var o=0,l=r.length;while(o<l){s=(s||a)[r[o]];if(typeof s===\"function\"){n.iCurr=o;o=s(n);s=undefined;l=n.fnArray.length}else{o++}}}};return i}();e.OperatorList=Ae;e.PartialEvaluator=xe});(function(e,t){t(e.pdfjsCoreAnnotation={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreStream,e.pdfjsCoreColorSpace,e.pdfjsCoreObj,e.pdfjsCoreEvaluator)})(this,function(e,t,r,a,i,n,s){var o=t.AnnotationBorderStyleType;var l=t.AnnotationFieldFlag;var c=t.AnnotationFlag;var h=t.AnnotationType;var u=t.OPS;var f=t.Util;var d=t.isString;var g=t.isArray;var v=t.isInt;var p=t.stringToBytes;var m=t.stringToPDFString;var b=t.warn;var y=r.Dict;var k=r.isDict;var w=r.isName;var C=r.isRef;var x=a.Stream;var S=i.ColorSpace;var A=n.Catalog;var I=n.ObjectLoader;var B=n.FileSpec;var R=s.OperatorList;function T(){}T.prototype={create:function e(t,r,a,i){var n=t.fetchIfRef(r);if(!k(n)){return}var s=C(r)?r.toString():\"annot_\"+i.createObjId();var o=n.get(\"Subtype\");o=w(o)?o.name:null;var l={xref:t,dict:n,ref:C(r)?r:null,subtype:o,id:s,pdfManager:a};switch(o){case\"Link\":return new U(l);case\"Text\":return new F(l);case\"Widget\":var c=f.getInheritableProperty(n,\"FT\");c=w(c)?c.name:null;switch(c){case\"Tx\":return new M(l);case\"Btn\":return new L(l);case\"Ch\":return new D(l)}b('Unimplemented widget field type \"'+c+'\", '+\"falling back to base field type.\");return new E(l);case\"Popup\":return new j(l);case\"Highlight\":return new q(l);case\"Underline\":return new N(l);case\"Squiggly\":return new _(l);case\"StrikeOut\":return new z(l);case\"FileAttachment\":return new H(l);default:if(!o){b(\"Annotation is missing the required /Subtype.\")}else{b('Unimplemented annotation type \"'+o+'\", '+\"falling back to base annotation.\")}return new O(l)}}};var O=function e(){function t(e,t,r){var a=f.getAxialAlignedBoundingBox(t,r);var i=a[0];var n=a[1];var s=a[2];var o=a[3];if(i===s||n===o){return[1,0,0,1,e[0],e[1]]}var l=(e[2]-e[0])/(s-i);var c=(e[3]-e[1])/(o-n);return[l,0,0,c,e[0]-i*l,e[1]-n*c]}function r(e){var t=e.get(\"AP\");if(!k(t)){return}var r;var a=t.get(\"N\");if(k(a)){var i=e.get(\"AS\");if(i&&a.has(i.name)){r=a.get(i.name)}}else{r=a}return r}function a(e){var t=e.dict;this.setFlags(t.get(\"F\"));this.setRectangle(t.getArray(\"Rect\"));this.setColor(t.getArray(\"C\"));this.setBorderStyle(t);this.appearance=r(t);this.data={};this.data.id=e.id;this.data.subtype=e.subtype;this.data.annotationFlags=this.flags;this.data.rect=this.rectangle;this.data.color=this.color;this.data.borderStyle=this.borderStyle;this.data.hasAppearance=!!this.appearance}a.prototype={_hasFlag:function e(t,r){return!!(t&r)},_isViewable:function e(t){return!this._hasFlag(t,c.INVISIBLE)&&!this._hasFlag(t,c.HIDDEN)&&!this._hasFlag(t,c.NOVIEW)},_isPrintable:function e(t){return this._hasFlag(t,c.PRINT)&&!this._hasFlag(t,c.INVISIBLE)&&!this._hasFlag(t,c.HIDDEN)},get viewable(){if(this.flags===0){return true}return this._isViewable(this.flags)},get printable(){if(this.flags===0){return false}return this._isPrintable(this.flags)},setFlags:function e(t){this.flags=v(t)&&t>0?t:0},hasFlag:function e(t){return this._hasFlag(this.flags,t)},setRectangle:function e(t){if(g(t)&&t.length===4){this.rectangle=f.normalizeRect(t)}else{this.rectangle=[0,0,0,0]}},setColor:function e(t){var r=new Uint8Array(3);if(!g(t)){this.color=r;return}switch(t.length){case 0:this.color=null;break;case 1:S.singletons.gray.getRgbItem(t,0,r,0);this.color=r;break;case 3:S.singletons.rgb.getRgbItem(t,0,r,0);this.color=r;break;case 4:S.singletons.cmyk.getRgbItem(t,0,r,0);this.color=r;break;default:this.color=r;break}},setBorderStyle:function e(t){this.borderStyle=new P;if(!k(t)){return}if(t.has(\"BS\")){var r=t.get(\"BS\");var a=r.get(\"Type\");if(!a||w(a,\"Border\")){this.borderStyle.setWidth(r.get(\"W\"));this.borderStyle.setStyle(r.get(\"S\"));this.borderStyle.setDashArray(r.getArray(\"D\"))}}else if(t.has(\"Border\")){var i=t.getArray(\"Border\");if(g(i)&&i.length>=3){this.borderStyle.setHorizontalCornerRadius(i[0]);this.borderStyle.setVerticalCornerRadius(i[1]);this.borderStyle.setWidth(i[2]);if(i.length===4){this.borderStyle.setDashArray(i[3])}}}else{this.borderStyle.setWidth(0)}},_preparePopup:function e(t){if(!t.has(\"C\")){this.data.color=null}this.data.hasPopup=t.has(\"Popup\");this.data.title=m(t.get(\"T\")||\"\");this.data.contents=m(t.get(\"Contents\")||\"\")},loadResources:function e(t){return new Promise(function(e,r){this.appearance.dict.getAsync(\"Resources\").then(function(a){if(!a){e();return}var i=new I(a.map,t,a.xref);i.load().then(function(){e(a)},r)},r)}.bind(this))},getOperatorList:function e(r,a,i){if(!this.appearance){return Promise.resolve(new R)}var n=this.data;var s=this.appearance.dict;var o=this.loadResources([\"ExtGState\",\"ColorSpace\",\"Pattern\",\"Shading\",\"XObject\",\"Font\"]);var l=s.getArray(\"BBox\")||[0,0,1,1];var c=s.getArray(\"Matrix\")||[1,0,0,1,0,0];var h=t(n.rect,l,c);var f=this;return o.then(function(e){var t=new R;t.addOp(u.beginAnnotation,[n.rect,h,c]);return r.getOperatorList(f.appearance,a,e,t).then(function(){t.addOp(u.endAnnotation,[]);f.appearance.reset();return t})})}};a.appendToOperatorList=function e(t,r,a,i,n,s){var o=[];for(var l=0,c=t.length;l<c;++l){if(n===\"display\"&&t[l].viewable||n===\"print\"&&t[l].printable){o.push(t[l].getOperatorList(a,i,s))}}return Promise.all(o).then(function(e){r.addOp(u.beginAnnotations,[]);for(var t=0,a=e.length;t<a;++t){r.addOpList(e[t])}r.addOp(u.endAnnotations,[])})};return a}();var P=function e(){function t(){this.width=1;this.style=o.SOLID;this.dashArray=[3];this.horizontalCornerRadius=0;this.verticalCornerRadius=0}t.prototype={setWidth:function e(t){if(t===(t|0)){this.width=t}},setStyle:function e(t){if(!t){return}switch(t.name){case\"S\":this.style=o.SOLID;break;case\"D\":this.style=o.DASHED;break;case\"B\":this.style=o.BEVELED;break;case\"I\":this.style=o.INSET;break;case\"U\":this.style=o.UNDERLINE;break;default:break}},setDashArray:function e(t){if(g(t)&&t.length>0){var r=true;var a=true;for(var i=0,n=t.length;i<n;i++){var s=t[i];var o=+s>=0;if(!o){r=false;break}else if(s>0){a=false}}if(r&&!a){this.dashArray=t}else{this.width=0}}else if(t){this.width=0}},setHorizontalCornerRadius:function e(t){if(t===(t|0)){this.horizontalCornerRadius=t}},setVerticalCornerRadius:function e(t){if(t===(t|0)){this.verticalCornerRadius=t}}};return t}();var E=function e(){function t(e){O.call(this,e);var t=e.dict;var r=this.data;r.annotationType=h.WIDGET;r.fieldName=this._constructFieldName(t);r.fieldValue=f.getInheritableProperty(t,\"V\",true);r.alternativeText=m(t.get(\"TU\")||\"\");r.defaultAppearance=f.getInheritableProperty(t,\"DA\")||\"\";var a=f.getInheritableProperty(t,\"FT\");r.fieldType=w(a)?a.name:null;this.fieldResources=f.getInheritableProperty(t,\"DR\")||y.empty;r.fieldFlags=f.getInheritableProperty(t,\"Ff\");if(!v(r.fieldFlags)||r.fieldFlags<0){r.fieldFlags=0}r.readOnly=this.hasFieldFlag(l.READONLY);if(r.fieldType===\"Sig\"){this.setFlags(c.HIDDEN)}}f.inherit(t,O,{_constructFieldName:function e(t){if(!t.has(\"T\")&&!t.has(\"Parent\")){b(\"Unknown field name, falling back to empty field name.\");return\"\"}if(!t.has(\"Parent\")){return m(t.get(\"T\"))}var r=[];if(t.has(\"T\")){r.unshift(m(t.get(\"T\")))}var a=t;while(a.has(\"Parent\")){a=a.get(\"Parent\");if(a.has(\"T\")){r.unshift(m(a.get(\"T\")))}}return r.join(\".\")},hasFieldFlag:function e(t){return!!(this.data.fieldFlags&t)}});return t}();var M=function e(){function t(e){E.call(this,e);this.data.fieldValue=m(this.data.fieldValue||\"\");var t=f.getInheritableProperty(e.dict,\"Q\");if(!v(t)||t<0||t>2){t=null}this.data.textAlignment=t;var r=f.getInheritableProperty(e.dict,\"MaxLen\");if(!v(r)||r<0){r=null}this.data.maxLen=r;this.data.multiLine=this.hasFieldFlag(l.MULTILINE);this.data.comb=this.hasFieldFlag(l.COMB)&&!this.hasFieldFlag(l.MULTILINE)&&!this.hasFieldFlag(l.PASSWORD)&&!this.hasFieldFlag(l.FILESELECT)&&this.data.maxLen!==null}f.inherit(t,E,{getOperatorList:function e(t,r,a){var i=new R;if(a){return Promise.resolve(i)}if(this.appearance){return O.prototype.getOperatorList.call(this,t,r,a)}if(!this.data.defaultAppearance){return Promise.resolve(i)}var n=new x(p(this.data.defaultAppearance));return t.getOperatorList(n,r,this.fieldResources,i).then(function(){return i})}});return t}();var L=function e(){function t(e){E.call(this,e);this.data.checkBox=!this.hasFieldFlag(l.RADIO)&&!this.hasFieldFlag(l.PUSHBUTTON);if(this.data.checkBox){if(!w(this.data.fieldValue)){return}this.data.fieldValue=this.data.fieldValue.name}this.data.radioButton=this.hasFieldFlag(l.RADIO)&&!this.hasFieldFlag(l.PUSHBUTTON);if(this.data.radioButton){this.data.fieldValue=this.data.buttonValue=null;var t=e.dict.get(\"Parent\");if(!k(t)||!t.has(\"V\")){return}var r=t.get(\"V\");if(!w(r)){return}this.data.fieldValue=r.name;var a=e.dict.get(\"AP\");if(!k(a)){return}var i=a.get(\"N\");if(!k(i)){return}var n=i.getKeys();for(var s=0,o=n.length;s<o;s++){if(n[s]!==\"Off\"){this.data.buttonValue=n[s];break}}}}f.inherit(t,E,{getOperatorList:function e(t,r,a){var i=new R;if(a){return Promise.resolve(i)}if(this.appearance){return O.prototype.getOperatorList.call(this,t,r,a)}return Promise.resolve(i)}});return t}();var D=function e(){function t(e){E.call(this,e);this.data.options=[];var t=e.dict.get(\"Opt\");if(g(t)){var r=e.xref;for(var a=0,i=t.length;a<i;a++){var n=r.fetchIfRef(t[a]);var s=g(n);this.data.options[a]={exportValue:s?r.fetchIfRef(n[0]):n,displayValue:s?r.fetchIfRef(n[1]):n}}}if(!g(this.data.fieldValue)){this.data.fieldValue=[this.data.fieldValue]}this.data.combo=this.hasFieldFlag(l.COMBO);this.data.multiSelect=this.hasFieldFlag(l.MULTISELECT)}f.inherit(t,E,{getOperatorList:function e(t,r,a){var i=new R;if(a){return Promise.resolve(i)}return O.prototype.getOperatorList.call(this,t,r,a)}});return t}();var F=function e(){var t=22;function r(e){O.call(this,e);this.data.annotationType=h.TEXT;if(this.data.hasAppearance){this.data.name=\"NoIcon\"}else{this.data.rect[1]=this.data.rect[3]-t;this.data.rect[2]=this.data.rect[0]+t;this.data.name=e.dict.has(\"Name\")?e.dict.get(\"Name\").name:\"Note\"}this._preparePopup(e.dict)}f.inherit(r,O,{});return r}();var U=function e(){function t(e){O.call(this,e);var t=this.data;t.annotationType=h.LINK;A.parseDestDictionary({destDict:e.dict,resultObj:t,docBaseUrl:e.pdfManager.docBaseUrl})}f.inherit(t,O,{});return t}();var j=function e(){function t(e){O.call(this,e);this.data.annotationType=h.POPUP;var t=e.dict;var r=t.get(\"Parent\");if(!r){b(\"Popup annotation has a missing or invalid parent annotation.\");return}this.data.parentId=t.getRaw(\"Parent\").toString();this.data.title=m(r.get(\"T\")||\"\");this.data.contents=m(r.get(\"Contents\")||\"\");if(!r.has(\"C\")){this.data.color=null}else{this.setColor(r.getArray(\"C\"));this.data.color=this.color}if(!this.viewable){var a=r.get(\"F\");if(this._isViewable(a)){this.setFlags(a)}}}f.inherit(t,O,{});return t}();var q=function e(){function t(e){O.call(this,e);this.data.annotationType=h.HIGHLIGHT;this._preparePopup(e.dict);this.data.borderStyle.setWidth(0)}f.inherit(t,O,{});return t}();var N=function e(){function t(e){O.call(this,e);this.data.annotationType=h.UNDERLINE;this._preparePopup(e.dict);this.data.borderStyle.setWidth(0)}f.inherit(t,O,{});return t}();var _=function e(){function t(e){O.call(this,e);this.data.annotationType=h.SQUIGGLY;this._preparePopup(e.dict);this.data.borderStyle.setWidth(0)}f.inherit(t,O,{});return t}();var z=function e(){function t(e){O.call(this,e);this.data.annotationType=h.STRIKEOUT;this._preparePopup(e.dict);this.data.borderStyle.setWidth(0)}f.inherit(t,O,{});return t}();var H=function e(){function t(e){O.call(this,e);var t=new B(e.dict.get(\"FS\"),e.xref);this.data.annotationType=h.FILEATTACHMENT;this.data.file=t.serializable;this._preparePopup(e.dict)}f.inherit(t,O,{});return t}();e.Annotation=O;e.AnnotationBorderStyle=P;e.AnnotationFactory=T});(function(e,t){t(e.pdfjsCoreDocument={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCoreStream,e.pdfjsCoreObj,e.pdfjsCoreParser,e.pdfjsCoreCrypto,e.pdfjsCoreEvaluator,e.pdfjsCoreAnnotation)})(this,function(e,t,r,a,i,n,s,o,l){var c=t.MissingDataException;var h=t.Util;var u=t.assert;var f=t.error;var d=t.info;var g=t.isArray;var v=t.isArrayBuffer;var p=t.isNum;var m=t.isString;var b=t.shadow;var y=t.stringToBytes;var k=t.stringToPDFString;var w=t.warn;var C=t.isSpace;var x=r.Dict;var S=r.isDict;var A=r.isName;var I=r.isStream;var B=a.NullStream;var R=a.Stream;var T=a.StreamsSequenceStream;var O=i.Catalog;var P=i.ObjectLoader;var E=i.XRef;var M=n.Linearization;var L=s.calculateMD5;var D=o.OperatorList;var F=o.PartialEvaluator;var U=l.Annotation;var j=l.AnnotationFactory;var q=function e(){var t=1;var r=[0,0,612,792];function a(e,t,r,a,i,n){this.pdfManager=e;this.pageIndex=r;this.pageDict=a;this.xref=t;this.ref=i;this.fontCache=n;this.evaluatorOptions=e.evaluatorOptions;this.resourcesPromise=null;var s=\"p\"+this.pageIndex+\"_\";var o={obj:0};this.idFactory={createObjId:function(){return s+ ++o.obj}}}a.prototype={getPageProp:function e(t){return this.pageDict.get(t)},getInheritedPageProp:function e(t,r){var a=this.pageDict,i=null,n=0;var s=100;r=r||false;while(a){var o=r?a.getArray(t):a.get(t);if(o){if(!i){i=[]}i.push(o)}if(++n>s){w(\"Page_getInheritedPageProp: maximum loop count exceeded.\");break}a=a.get(\"Parent\")}if(!i){return x.empty}if(i.length===1||!S(i[0])||n>s){return i[0]}return x.merge(this.xref,i)},get content(){return this.getPageProp(\"Contents\")},get resources(){return b(this,\"resources\",this.getInheritedPageProp(\"Resources\"))},get mediaBox(){var e=this.getInheritedPageProp(\"MediaBox\",true);if(!g(e)||e.length!==4){return b(this,\"mediaBox\",r)}return b(this,\"mediaBox\",e)},get cropBox(){var e=this.getInheritedPageProp(\"CropBox\",true);if(!g(e)||e.length!==4){return b(this,\"cropBox\",this.mediaBox)}return b(this,\"cropBox\",e)},get userUnit(){var e=this.getPageProp(\"UserUnit\");if(!p(e)||e<=0){e=t}return b(this,\"userUnit\",e)},get view(){var e=this.mediaBox,t=this.cropBox;if(e===t){return b(this,\"view\",e)}var r=h.intersect(t,e);return b(this,\"view\",r||e)},get rotate(){var e=this.getInheritedPageProp(\"Rotate\")||0;if(e%90!==0){e=0}else if(e>=360){e=e%360}else if(e<0){e=(e%360+360)%360}return b(this,\"rotate\",e)},getContentStream:function e(){var t=this.content;var r;if(g(t)){var a=this.xref;var i,n=t.length;var s=[];for(i=0;i<n;++i){s.push(a.fetchIfRef(t[i]))}r=new T(s)}else if(I(t)){r=t}else{r=new B}return r},loadResources:function e(t){if(!this.resourcesPromise){this.resourcesPromise=this.pdfManager.ensure(this,\"resources\")}return this.resourcesPromise.then(function e(){var r=new P(this.resources.map,t,this.xref);return r.load()}.bind(this))},getOperatorList:function e(t,r,a,i){var n=this;var s=this.pdfManager;var o=s.ensure(this,\"getContentStream\",[]);var l=this.loadResources([\"ExtGState\",\"ColorSpace\",\"Pattern\",\"Shading\",\"XObject\",\"Font\"]);var c=new F(s,this.xref,t,this.pageIndex,this.idFactory,this.fontCache,this.evaluatorOptions);var h=Promise.all([o,l]);var u=h.then(function(e){var i=e[0];var s=new D(a,t,n.pageIndex);t.send(\"StartRenderPage\",{transparency:c.hasBlendModes(n.resources),pageIndex:n.pageIndex,intent:a});return c.getOperatorList(i,r,n.resources,s).then(function(){return s})});var f=s.ensure(this,\"annotations\");return Promise.all([u,f]).then(function(e){var t=e[0];var n=e[1];if(n.length===0){t.flush(true);return t}var s=U.appendToOperatorList(n,t,c,r,a,i);return s.then(function(){t.flush(true);return t})})},extractTextContent:function e(t,r,a){var i={on:function e(){},send:function e(){}};var n=this;var s=this.pdfManager;var o=s.ensure(this,\"getContentStream\",[]);var l=this.loadResources([\"ExtGState\",\"XObject\",\"Font\"]);var c=Promise.all([o,l]);return c.then(function(e){var o=e[0];var l=new F(s,n.xref,i,n.pageIndex,n.idFactory,n.fontCache,n.evaluatorOptions);return l.getTextContent(o,t,n.resources,null,r,a)})},getAnnotationsData:function e(t){var r=this.annotations;var a=[];for(var i=0,n=r.length;i<n;++i){if(t){if(!(t===\"display\"&&r[i].viewable)&&!(t===\"print\"&&r[i].printable)){continue}}a.push(r[i].data)}return a},get annotations(){var e=[];var t=this.getInheritedPageProp(\"Annots\")||[];var r=new j;for(var a=0,i=t.length;a<i;++a){var n=t[a];var s=r.create(this.xref,n,this.pdfManager,this.idFactory);if(s){e.push(s)}}return b(this,\"annotations\",e)}};return a}();var N=function e(){var t=1024;var r=\"\\0\\0\\0\\0\\0\\0\\0\"+\"\\0\\0\\0\\0\\0\\0\\0\\0\\0\";function a(e,t){var r;if(I(t)){r=t}else if(v(t)){r=new R(t)}else{f(\"PDFDocument: Unknown argument type\")}u(r.length>0,\"stream must have data\");this.pdfManager=e;this.stream=r;this.xref=new E(r,e)}function i(e,t,r,a){var i=e.pos;var n=e.end;var s=[];if(i+r>n){r=n-i}for(var o=0;o<r;++o){s.push(String.fromCharCode(e.getByte()))}var l=s.join(\"\");e.pos=i;var c=a?l.lastIndexOf(t):l.indexOf(t);if(c===-1){return false}e.pos+=c;return true}var n={get entries(){return b(this,\"entries\",{Title:m,Author:m,Subject:m,Keywords:m,Creator:m,Producer:m,CreationDate:m,ModDate:m,Trapped:A})}};a.prototype={parse:function e(t){this.setup(t);var r=this.catalog.catDict.get(\"Version\");if(A(r)){this.pdfFormatVersion=r.name}try{this.acroForm=this.catalog.catDict.get(\"AcroForm\");if(this.acroForm){this.xfa=this.acroForm.get(\"XFA\");var a=this.acroForm.get(\"Fields\");if((!a||!g(a)||a.length===0)&&!this.xfa){this.acroForm=null}}}catch(e){d(\"Something wrong with AcroForm entry\");this.acroForm=null}},get linearization(){var e=null;if(this.stream.length){try{e=M.create(this.stream)}catch(e){if(e instanceof c){throw e}d(e)}}return b(this,\"linearization\",e)},get startXRef(){var e=this.stream;var t=0;var r=this.linearization;if(r){e.reset();if(i(e,\"endobj\",1024)){t=e.pos+6}}else{var a=1024;var n=false,s=e.end;while(!n&&s>0){s-=a-\"startxref\".length;if(s<0){s=0}e.pos=s;n=i(e,\"startxref\",a,true)}if(n){e.skip(9);var o;do{o=e.getByte()}while(C(o));var l=\"\";while(o>=32&&o<=57){l+=String.fromCharCode(o);o=e.getByte()}t=parseInt(l,10);if(isNaN(t)){t=0}}}return b(this,\"startXRef\",t)},get mainXRefEntriesOffset(){var e=0;var t=this.linearization;if(t){e=t.mainXRefEntriesOffset}return b(this,\"mainXRefEntriesOffset\",e)},checkHeader:function e(){var t=this.stream;t.reset();if(i(t,\"%PDF-\",1024)){t.moveStart();var r=12;var a=\"\",n;while((n=t.getByte())>32){if(a.length>=r){break}a+=String.fromCharCode(n)}if(!this.pdfFormatVersion){this.pdfFormatVersion=a.substring(5)}return}},parseStartXRef:function e(){var t=this.startXRef;this.xref.setStartXRef(t)},setup:function e(t){this.xref.parse(t);var r=this;var a={createPage:function(e,t,a,i){return new q(r.pdfManager,r.xref,e,t,a,i)}};this.catalog=new O(this.pdfManager,this.xref,a)},get numPages(){var e=this.linearization;var t=e?e.numPages:this.catalog.numPages;return b(this,\"numPages\",t)},get documentInfo(){var e={PDFFormatVersion:this.pdfFormatVersion,IsAcroFormPresent:!!this.acroForm,IsXFAPresent:!!this.xfa};var t;try{t=this.xref.trailer.get(\"Info\")}catch(e){d(\"The document information dictionary is invalid.\")}if(t){var r=n.entries;for(var a in r){if(t.has(a)){var i=t.get(a);if(r[a](i)){e[a]=typeof i!==\"string\"?i:k(i)}else{d('Bad value in document info for \"'+a+'\"')}}}}return b(this,\"documentInfo\",e)},get fingerprint(){var e=this.xref,a,i=\"\";var n=e.trailer.get(\"ID\");if(n&&g(n)&&n[0]&&m(n[0])&&n[0]!==r){a=y(n[0])}else{if(this.stream.ensureRange){this.stream.ensureRange(0,Math.min(t,this.stream.end))}a=L(this.stream.bytes.subarray(0,t),0,t)}for(var s=0,o=a.length;s<o;s++){var l=a[s].toString(16);i+=l.length===1?\"0\"+l:l}return b(this,\"fingerprint\",i)},getPage:function e(t){return this.catalog.getPage(t)},cleanup:function e(){return this.catalog.cleanup()}};return a}();e.Page=q;e.PDFDocument=N});(function(e,t){t(e.pdfjsCorePdfManager={},e.pdfjsSharedUtil,e.pdfjsCoreStream,e.pdfjsCoreChunkedStream,e.pdfjsCoreDocument)})(this,function(e,t,r,a,i){var n=t.warn;var s=t.createValidAbsoluteUrl;var o=t.shadow;var l=t.NotImplementedException;var c=t.MissingDataException;var h=t.createPromiseCapability;var u=t.Util;var f=r.Stream;var d=a.ChunkedStreamManager;var g=i.PDFDocument;var v=function e(){function t(){throw new Error(\"Cannot initialize BaseManagerManager\")}t.prototype={get docId(){return this._docId},get password(){return this._password},get docBaseUrl(){var e=null;if(this._docBaseUrl){var t=s(this._docBaseUrl);if(t){e=t.href}else{n('Invalid absolute docBaseUrl: \"'+this._docBaseUrl+'\".')}}return o(this,\"docBaseUrl\",e)},onLoadedStream:function e(){throw new l},ensureDoc:function e(t,r){return this.ensure(this.pdfDocument,t,r)},ensureXRef:function e(t,r){return this.ensure(this.pdfDocument.xref,t,r)},ensureCatalog:function e(t,r){return this.ensure(this.pdfDocument.catalog,t,r)},getPage:function e(t){return this.pdfDocument.getPage(t)},cleanup:function e(){return this.pdfDocument.cleanup()},ensure:function e(t,r,a){return new l},requestRange:function e(t,r){return new l},requestLoadedStream:function e(){return new l},sendProgressiveData:function e(t){return new l},updatePassword:function e(t){this._password=t},terminate:function e(){return new l}};return t}();var p=function e(){function t(e,t,r,a,i){this._docId=e;this._password=r;this._docBaseUrl=i;this.evaluatorOptions=a;var n=new f(t);this.pdfDocument=new g(this,n);this._loadedStreamCapability=h();this._loadedStreamCapability.resolve(n)}u.inherit(t,v,{ensure:function e(t,r,a){return new Promise(function(e,i){try{var n=t[r];var s;if(typeof n===\"function\"){s=n.apply(t,a)}else{s=n}e(s)}catch(e){i(e)}})},requestRange:function e(t,r){return Promise.resolve()},requestLoadedStream:function e(){},onLoadedStream:function e(){return this._loadedStreamCapability.promise},terminate:function e(){}});return t}();var m=function e(){function t(e,t,r,a,i){this._docId=e;this._password=r.password;this._docBaseUrl=i;this.msgHandler=r.msgHandler;this.evaluatorOptions=a;var n={msgHandler:r.msgHandler,url:r.url,length:r.length,disableAutoFetch:r.disableAutoFetch,rangeChunkSize:r.rangeChunkSize};this.streamManager=new d(t,n);this.pdfDocument=new g(this,this.streamManager.getStream())}u.inherit(t,v,{ensure:function e(t,r,a){var i=this;return new Promise(function(e,n){function s(){try{var o;var l=t[r];if(typeof l===\"function\"){o=l.apply(t,a)}else{o=l}e(o)}catch(e){if(!(e instanceof c)){n(e);return}i.streamManager.requestRange(e.begin,e.end).then(s,n)}}s()})},requestRange:function e(t,r){return this.streamManager.requestRange(t,r)},requestLoadedStream:function e(){this.streamManager.requestAllChunks()},sendProgressiveData:function e(t){this.streamManager.onReceiveData({chunk:t})},onLoadedStream:function e(){return this.streamManager.onLoadedStream()},terminate:function e(){this.streamManager.abort()}});return t}();e.LocalPdfManager=p;e.NetworkPdfManager=m});(function(e,t){t(e.pdfjsCoreWorker={},e.pdfjsSharedUtil,e.pdfjsCorePrimitives,e.pdfjsCorePdfManager)})(this,function(e,t,r,a){var i=t.UNSUPPORTED_FEATURES;var n=t.InvalidPDFException;var s=t.MessageHandler;var o=t.MissingPDFException;var l=t.UnexpectedResponseException;var c=t.PasswordException;var h=t.PasswordResponses;var u=t.UnknownErrorException;var f=t.XRefParseException;var d=t.arrayByteLength;var g=t.arraysToBytes;var v=t.assert;var p=t.createPromiseCapability;var m=t.error;var b=t.info;var y=t.warn;var k=t.setVerbosityLevel;var w=r.Ref;var C=a.LocalPdfManager;var x=a.NetworkPdfManager;var S=t.globalScope;var A=function e(){function t(e){this.name=e;this.terminated=false;this._capability=p()}t.prototype={get finished(){return this._capability.promise},finish:function(){this._capability.resolve()},terminate:function(){this.terminated=true},ensureNotTerminated:function(){if(this.terminated){throw new Error(\"Worker task was terminated\")}}};return t}();var I=function e(){function t(e,t){this._queuedChunks=[];var r=e.initialData;if(r&&r.length>0){this._queuedChunks.push(r)}this._msgHandler=t;this._isRangeSupported=!e.disableRange;this._isStreamingSupported=!e.disableStream;this._contentLength=e.length;this._fullRequestReader=null;this._rangeReaders=[];t.on(\"OnDataRange\",this._onReceiveData.bind(this));t.on(\"OnDataProgress\",this._onProgress.bind(this))}t.prototype={_onReceiveData:function e(t){if(t.begin===undefined){if(this._fullRequestReader){this._fullRequestReader._enqueue(t.chunk)}else{this._queuedChunks.push(t.chunk)}}else{var r=this._rangeReaders.some(function(e){if(e._begin!==t.begin){return false}e._enqueue(t.chunk);return true});v(r)}},_onProgress:function e(t){if(this._rangeReaders.length>0){var r=this._rangeReaders[0];if(r.onProgress){r.onProgress({loaded:t.loaded})}}},_removeRangeReader:function e(t){var r=this._rangeReaders.indexOf(t);if(r>=0){this._rangeReaders.splice(r,1)}},getFullReader:function e(){v(!this._fullRequestReader);var t=this._queuedChunks;this._queuedChunks=null;return new r(this,t)},getRangeReader:function e(t,r){var i=new a(this,t,r);this._msgHandler.send(\"RequestDataRange\",{begin:t,end:r});this._rangeReaders.push(i);return i},cancelAllRequests:function e(t){if(this._fullRequestReader){this._fullRequestReader.cancel(t)}var r=this._rangeReaders.slice(0);r.forEach(function(e){e.cancel(t)})}};function r(e,t){this._stream=e;this._done=false;this._queuedChunks=t||[];this._requests=[];this._headersReady=Promise.resolve();e._fullRequestReader=this;this.onProgress=null}r.prototype={_enqueue:function e(t){if(this._done){return}if(this._requests.length>0){var r=this._requests.shift();r.resolve({value:t,done:false});return}this._queuedChunks.push(t)},get headersReady(){return this._headersReady},get isRangeSupported(){return this._stream._isRangeSupported},get isStreamingSupported(){return this._stream._isStreamingSupported},get contentLength(){return this._stream._contentLength},read:function e(){if(this._queuedChunks.length>0){var t=this._queuedChunks.shift();return Promise.resolve({value:t,done:false})}if(this._done){return Promise.resolve({value:undefined,done:true})}var r=p();this._requests.push(r);return r.promise},cancel:function e(t){this._done=true;this._requests.forEach(function(e){e.resolve({value:undefined,done:true})});this._requests=[]}};function a(e,t,r){this._stream=e;this._begin=t;this._end=r;this._queuedChunk=null;this._requests=[];this._done=false;this.onProgress=null}a.prototype={_enqueue:function e(t){if(this._done){return}if(this._requests.length===0){this._queuedChunk=t}else{var r=this._requests.shift();r.resolve({value:t,done:false});this._requests.forEach(function(e){e.resolve({value:undefined,done:true})});this._requests=[]}this._done=true;this._stream._removeRangeReader(this)},get isStreamingSupported(){return false},read:function e(){if(this._queuedChunk){return Promise.resolve({value:this._queuedChunk,done:false})}if(this._done){return Promise.resolve({value:undefined,done:true})}var t=p();this._requests.push(t);return t.promise},cancel:function e(t){this._done=true;this._requests.forEach(function(e){e.resolve({value:undefined,done:true})});this._requests=[];this._stream._removeRangeReader(this)}};return t}();var B;function R(e){B=e}var T={setup:function e(t,r){var a=false;t.on(\"test\",function e(r){if(a){return}a=true;if(!(r instanceof Uint8Array)){t.send(\"test\",\"main\",false);return}var i=r[0]===255;t.postMessageTransfers=i;var n=new XMLHttpRequest;var s=\"response\"in n;try{var o=n.responseType}catch(e){s=false}if(!s){t.send(\"test\",false);return}t.send(\"test\",{supportTypedArray:true,supportTransfers:i})});t.on(\"configure\",function e(t){k(t.verbosity)});t.on(\"GetDocRequest\",function e(t){return T.createDocumentHandler(t,r)})},createDocumentHandler:function e(t,r){var a;var h=false;var m=null;var k=[];var S=t.docId;var R=t.docBaseUrl;var T=t.docId+\"_worker\";var O=new s(T,S,r);O.postMessageTransfers=t.postMessageTransfers;function P(){if(h){throw new Error(\"Worker was terminated\")}}function E(e){k.push(e)}function M(e){e.finish();var t=k.indexOf(e);k.splice(t,1)}function L(e){var t=p();var r=function e(){var r=a.ensureDoc(\"numPages\");var n=a.ensureDoc(\"fingerprint\");var s=a.ensureXRef(\"encrypt\");Promise.all([r,n,s]).then(function e(r){var a={numPages:r[0],fingerprint:r[1],encrypted:!!r[2]};t.resolve(a)},i)};var i=function e(r){t.reject(r)};a.ensureDoc(\"checkHeader\",[]).then(function(){a.ensureDoc(\"parseStartXRef\",[]).then(function(){a.ensureDoc(\"parse\",[e]).then(r,i)},i)},i);return t.promise}function D(e,t){var r=p();var a;var i=e.source;if(i.data){try{a=new C(S,i.data,i.password,t,R);r.resolve(a)}catch(e){r.reject(e)}return r.promise}var n;try{if(i.chunkedViewerLoading){n=new I(i,O)}else{v(B,\"pdfjs/core/network module is not loaded\");n=new B(e)}}catch(e){r.reject(e);return r.promise}var s=n.getFullReader();s.headersReady.then(function(){if(!s.isStreamingSupported||!s.isRangeSupported){s.onProgress=function(e){O.send(\"DocProgress\",{loaded:e.loaded,total:e.total})}}if(!s.isRangeSupported){return}var e=i.disableAutoFetch||s.isStreamingSupported;a=new x(S,n,{msgHandler:O,url:i.url,password:i.password,length:s.contentLength,disableAutoFetch:e,rangeChunkSize:i.rangeChunkSize},t,R);r.resolve(a);m=null}).catch(function(e){r.reject(e);m=null});var o=[],l=0;var c=function(){var e=g(o);if(i.length&&e.length!==i.length){y(\"reported HTTP length is different from actual\")}try{a=new C(S,e,i.password,t,R);r.resolve(a)}catch(e){r.reject(e)}o=[]};var h=new Promise(function(e,t){var r=function(e){try{P();if(e.done){if(!a){c()}m=null;return}var i=e.value;l+=d(i);if(!s.isStreamingSupported){O.send(\"DocProgress\",{loaded:l,total:Math.max(l,s.contentLength||0)})}if(a){a.sendProgressiveData(i)}else{o.push(i)}s.read().then(r,t)}catch(e){t(e)}};s.read().then(r,t)});h.catch(function(e){r.reject(e);m=null});m=function(){n.cancelAllRequests(\"abort\")};return r.promise}function F(e){function t(e){P();O.send(\"GetDoc\",{pdfInfo:e})}function r(e){if(e instanceof c){var t=new A(\"PasswordException: response \"+e.code);E(t);O.sendWithPromise(\"PasswordRequest\",e).then(function(e){M(t);a.updatePassword(e.password);i()}).catch(function(e){M(t);O.send(\"PasswordException\",e)}.bind(null,e))}else if(e instanceof n){O.send(\"InvalidPDF\",e)}else if(e instanceof o){O.send(\"MissingPDF\",e)}else if(e instanceof l){O.send(\"UnexpectedResponse\",e)}else{O.send(\"UnknownError\",new u(e.message,e.toString()))}}function i(){P();L(false).then(t,function e(i){P();if(!(i instanceof f)){r(i);return}a.requestLoadedStream();a.onLoadedStream().then(function(){P();L(true).then(t,r)})},r)}P();var s={url:e.cMapUrl===undefined?null:e.cMapUrl,packed:e.cMapPacked===true};var d={forceDataSchema:e.disableCreateObjectURL,maxImageSize:e.maxImageSize===undefined?-1:e.maxImageSize,disableFontFace:e.disableFontFace,cMapOptions:s};D(e,d).then(function(e){if(h){e.terminate();throw new Error(\"Worker was terminated\")}a=e;O.send(\"PDFManagerReady\",null);a.onLoadedStream().then(function(e){O.send(\"DataLoaded\",{length:e.bytes.byteLength})})}).then(i,r)}O.on(\"GetPage\",function e(t){return a.getPage(t.pageIndex).then(function(e){var t=a.ensure(e,\"rotate\");var r=a.ensure(e,\"ref\");var i=a.ensure(e,\"userUnit\");var n=a.ensure(e,\"view\");return Promise.all([t,r,i,n]).then(function(e){return{rotate:e[0],ref:e[1],userUnit:e[2],view:e[3]}})})});O.on(\"GetPageIndex\",function e(t){var r=new w(t.ref.num,t.ref.gen);var i=a.pdfDocument.catalog;return i.getPageIndex(r)});O.on(\"GetDestinations\",function e(t){return a.ensureCatalog(\"destinations\")});O.on(\"GetDestination\",function e(t){return a.ensureCatalog(\"getDestination\",[t.id])});O.on(\"GetPageLabels\",function e(t){return a.ensureCatalog(\"pageLabels\")});O.on(\"GetAttachments\",function e(t){return a.ensureCatalog(\"attachments\")});O.on(\"GetJavaScript\",function e(t){return a.ensureCatalog(\"javaScript\")});O.on(\"GetOutline\",function e(t){return a.ensureCatalog(\"documentOutline\")});O.on(\"GetMetadata\",function e(t){return Promise.all([a.ensureDoc(\"documentInfo\"),a.ensureCatalog(\"metadata\")])});O.on(\"GetData\",function e(t){a.requestLoadedStream();return a.onLoadedStream().then(function(e){return e.bytes})});O.on(\"GetStats\",function e(t){return a.pdfDocument.xref.stats});O.on(\"GetAnnotations\",function e(t){return a.getPage(t.pageIndex).then(function(e){return a.ensure(e,\"getAnnotationsData\",[t.intent])})});O.on(\"RenderPageRequest\",function e(t){var r=t.pageIndex;a.getPage(r).then(function(e){var a=new A(\"RenderPageRequest: page \"+r);E(a);var n=r+1;var s=Date.now();e.getOperatorList(O,a,t.intent,t.renderInteractiveForms).then(function(e){M(a);b(\"page=\"+n+\" - getOperatorList: time=\"+(Date.now()-s)+\"ms, len=\"+e.totalLength)},function(e){M(a);if(a.terminated){return}O.send(\"UnsupportedFeature\",{featureId:i.unknown});var r=\"worker.js: while trying to getPage() and getOperatorList()\";var s;if(typeof e===\"string\"){s={message:e,stack:r}}else if(typeof e===\"object\"){s={message:e.message||e.toString(),stack:e.stack||r}}else{s={message:\"Unknown exception type: \"+typeof e,stack:r}}O.send(\"PageError\",{pageNum:n,error:s,intent:t.intent})})})},this);O.on(\"GetTextContent\",function e(t){var r=t.pageIndex;var i=t.normalizeWhitespace;var n=t.combineTextItems;return a.getPage(r).then(function(e){var t=new A(\"GetTextContent: page \"+r);E(t);var a=r+1;var s=Date.now();return e.extractTextContent(t,i,n).then(function(e){M(t);b(\"text indexing: page=\"+a+\" - time=\"+(Date.now()-s)+\"ms\");return e},function(e){M(t);if(t.terminated){return}throw e})})});O.on(\"Cleanup\",function e(t){return a.cleanup()});O.on(\"Terminate\",function e(t){h=true;if(a){a.terminate();a=null}if(m){m()}var r=[];k.forEach(function(e){r.push(e.finished);e.terminate()});return Promise.all(r).then(function(){O.destroy();O=null})});O.on(\"Ready\",function e(r){F(t);t=null});return T}};function O(){if(!(\"console\"in S)){var e={};var t={log:function e(){var t=Array.prototype.slice.call(arguments);S.postMessage({targetName:\"main\",action:\"console_log\",data:t})},error:function e(){var t=Array.prototype.slice.call(arguments);S.postMessage({targetName:\"main\",action:\"console_error\",data:t});throw\"pdf.js execution error\"},time:function t(r){e[r]=Date.now()},timeEnd:function t(r){var a=e[r];if(!a){m(\"Unknown timer name \"+r)}this.log(\"Timer:\",r,Date.now()-a)}};S.console=t}var r=new s(\"worker\",\"main\",self);T.setup(r,self);r.send(\"ready\",null)}if(typeof window===\"undefined\"&&!(typeof module!==\"undefined\"&&module.require)){O()}e.setPDFNetworkStreamClass=R;e.WorkerTask=A;e.WorkerMessageHandler=T});(function(e,t){t(e.pdfjsCoreNetwork={},e.pdfjsSharedUtil,e.pdfjsCoreWorker)})(this,function(e,t,r){var a=200;var i=206;function n(e,t){this.url=e;t=t||{};this.isHttp=/^https?:/i.test(e);this.httpHeaders=this.isHttp&&t.httpHeaders||{};this.withCredentials=t.withCredentials||false;this.getXhr=t.getXhr||function e(){return new XMLHttpRequest};this.currXhrId=0;this.pendingRequests=Object.create(null);this.loadedRequests=Object.create(null)}function s(e){var t=e.response;if(typeof t!==\"string\"){return t}var r=t.length;var a=new Uint8Array(r);for(var i=0;i<r;i++){a[i]=t.charCodeAt(i)&255}return a.buffer}var o=function e(){try{var t=new XMLHttpRequest;t.open(\"GET\",\"https://example.com\");t.responseType=\"moz-chunked-arraybuffer\";return t.responseType===\"moz-chunked-arraybuffer\"}catch(e){return false}}();n.prototype={requestRange:function e(t,r,a){var i={begin:t,end:r};for(var n in a){i[n]=a[n]}return this.request(i)},requestFull:function e(t){return this.request(t)},request:function e(t){var r=this.getXhr();var a=this.currXhrId++;var i=this.pendingRequests[a]={xhr:r};r.open(\"GET\",this.url);r.withCredentials=this.withCredentials;for(var n in this.httpHeaders){var s=this.httpHeaders[n];if(typeof s===\"undefined\"){continue}r.setRequestHeader(n,s)}if(this.isHttp&&\"begin\"in t&&\"end\"in t){var l=t.begin+\"-\"+(t.end-1);r.setRequestHeader(\"Range\",\"bytes=\"+l);i.expectedStatus=206}else{i.expectedStatus=200}var c=o&&!!t.onProgressiveData;if(c){r.responseType=\"moz-chunked-arraybuffer\";i.onProgressiveData=t.onProgressiveData;i.mozChunked=true}else{r.responseType=\"arraybuffer\"}if(t.onError){r.onerror=function(e){t.onError(r.status)}}r.onreadystatechange=this.onStateChange.bind(this,a);r.onprogress=this.onProgress.bind(this,a);i.onHeadersReceived=t.onHeadersReceived;i.onDone=t.onDone;i.onError=t.onError;i.onProgress=t.onProgress;r.send(null);return a},onProgress:function e(t,r){var a=this.pendingRequests[t];if(!a){return}if(a.mozChunked){var i=s(a.xhr);a.onProgressiveData(i)}var n=a.onProgress;if(n){n(r)}},onStateChange:function e(t,r){var n=this.pendingRequests[t];if(!n){return}var o=n.xhr;if(o.readyState>=2&&n.onHeadersReceived){n.onHeadersReceived();delete n.onHeadersReceived}if(o.readyState!==4){return}if(!(t in this.pendingRequests)){return}delete this.pendingRequests[t];if(o.status===0&&this.isHttp){if(n.onError){n.onError(o.status)}return}var l=o.status||a;var c=l===a&&n.expectedStatus===i;if(!c&&l!==n.expectedStatus){if(n.onError){n.onError(o.status)}return}this.loadedRequests[t]=true;var h=s(o);if(l===i){var u=o.getResponseHeader(\"Content-Range\");var f=/bytes (\\d+)-(\\d+)\\/(\\d+)/.exec(u);var d=parseInt(f[1],10);n.onDone({begin:d,chunk:h})}else if(n.onProgressiveData){n.onDone(null)}else if(h){n.onDone({begin:0,chunk:h})}else if(n.onError){n.onError(o.status)}},hasPendingRequests:function e(){for(var t in this.pendingRequests){return true}return false},getRequestXhr:function e(t){return this.pendingRequests[t].xhr},isStreamingRequest:function e(t){return!!this.pendingRequests[t].onProgressiveData},isPendingRequest:function e(t){return t in this.pendingRequests},isLoadedRequest:function e(t){return t in this.loadedRequests},abortAllRequests:function e(){for(var t in this.pendingRequests){this.abortRequest(t|0)}},abortRequest:function e(t){var r=this.pendingRequests[t].xhr;delete this.pendingRequests[t];r.abort()}};var l=t.assert;var c=t.createPromiseCapability;var h=t.isInt;var u=t.MissingPDFException;var f=t.UnexpectedResponseException;function d(e){this._options=e;var t=e.source;this._manager=new n(t.url,{httpHeaders:t.httpHeaders,withCredentials:t.withCredentials});this._rangeChunkSize=t.rangeChunkSize;this._fullRequestReader=null;this._rangeRequestReaders=[]}d.prototype={_onRangeRequestReaderClosed:function e(t){var r=this._rangeRequestReaders.indexOf(t);if(r>=0){this._rangeRequestReaders.splice(r,1)}},getFullReader:function e(){l(!this._fullRequestReader);this._fullRequestReader=new g(this._manager,this._options);return this._fullRequestReader},getRangeReader:function e(t,r){var a=new v(this._manager,t,r);a.onClosed=this._onRangeRequestReaderClosed.bind(this);this._rangeRequestReaders.push(a);return a},cancelAllRequests:function e(t){if(this._fullRequestReader){this._fullRequestReader.cancel(t)}var r=this._rangeRequestReaders.slice(0);r.forEach(function(e){e.cancel(t)})}};function g(e,t){this._manager=e;var r=t.source;var a={onHeadersReceived:this._onHeadersReceived.bind(this),onProgressiveData:r.disableStream?null:this._onProgressiveData.bind(this),onDone:this._onDone.bind(this),onError:this._onError.bind(this),onProgress:this._onProgress.bind(this)};this._url=r.url;this._fullRequestId=e.requestFull(a);this._headersReceivedCapability=c();this._disableRange=t.disableRange||false;this._contentLength=r.length;this._rangeChunkSize=r.rangeChunkSize;if(!this._rangeChunkSize&&!this._disableRange){this._disableRange=true}this._isStreamingSupported=false;this._isRangeSupported=false;this._cachedChunks=[];this._requests=[];this._done=false;this._storedError=undefined;this.onProgress=null}g.prototype={_validateRangeRequestCapabilities:function e(){if(this._disableRange){return false}var t=this._manager;if(!t.isHttp){return false}var r=this._fullRequestId;var a=t.getRequestXhr(r);if(a.getResponseHeader(\"Accept-Ranges\")!==\"bytes\"){return false}var i=a.getResponseHeader(\"Content-Encoding\")||\"identity\";if(i!==\"identity\"){return false}var n=a.getResponseHeader(\"Content-Length\");n=parseInt(n,10);if(!h(n)){return false}this._contentLength=n;if(n<=2*this._rangeChunkSize){return false}return true},_onHeadersReceived:function e(){if(this._validateRangeRequestCapabilities()){this._isRangeSupported=true}var t=this._manager;var r=this._fullRequestId;if(t.isStreamingRequest(r)){this._isStreamingSupported=true}else if(this._isRangeSupported){t.abortRequest(r)}this._headersReceivedCapability.resolve()},_onProgressiveData:function e(t){if(this._requests.length>0){var r=this._requests.shift();r.resolve({value:t,done:false})}else{this._cachedChunks.push(t)}},_onDone:function e(t){if(t){this._onProgressiveData(t.chunk)}this._done=true;if(this._cachedChunks.length>0){return}this._requests.forEach(function(e){e.resolve({value:undefined,done:true})});this._requests=[]},_onError:function e(t){var r=this._url;var a;if(t===404||t===0&&/^file:/.test(r)){a=new u('Missing PDF \"'+r+'\".')}else{a=new f(\"Unexpected server response (\"+t+') while retrieving PDF \"'+r+'\".',t)}this._storedError=a;this._headersReceivedCapability.reject(a);this._requests.forEach(function(e){e.reject(a)});this._requests=[];this._cachedChunks=[]},_onProgress:function e(t){if(this.onProgress){this.onProgress({loaded:t.loaded,total:t.lengthComputable?t.total:this._contentLength})}},get isRangeSupported(){return this._isRangeSupported},get isStreamingSupported(){return this._isStreamingSupported},get contentLength(){return this._contentLength},get headersReady(){return this._headersReceivedCapability.promise},read:function e(){if(this._storedError){return Promise.reject(this._storedError)}if(this._cachedChunks.length>0){var t=this._cachedChunks.shift();return Promise.resolve(t)}if(this._done){return Promise.resolve({value:undefined,done:true})}var r=c();this._requests.push(r);return r.promise},cancel:function e(t){this._done=true;this._headersReceivedCapability.reject(t);this._requests.forEach(function(e){e.resolve({value:undefined,done:true})});this._requests=[];if(this._manager.isPendingRequest(this._fullRequestId)){this._manager.abortRequest(this._fullRequestId)}this._fullRequestReader=null}};function v(e,t,r){this._manager=e;var a={onDone:this._onDone.bind(this),onProgress:this._onProgress.bind(this)};this._requestId=e.requestRange(t,r,a);this._requests=[];this._queuedChunk=null;this._done=false;this.onProgress=null;this.onClosed=null}v.prototype={_close:function e(){if(this.onClosed){this.onClosed(this)}},_onDone:function e(t){var r=t.chunk;if(this._requests.length>0){var a=this._requests.shift();a.resolve({value:r,done:false})}else{this._queuedChunk=r}this._done=true;this._requests.forEach(function(e){e.resolve({value:undefined,done:true})});this._requests=[];this._close()},_onProgress:function e(t){if(!this.isStreamingSupported&&this.onProgress){this.onProgress({loaded:t.loaded})}},get isStreamingSupported(){return false},read:function e(){if(this._queuedChunk!==null){var t=this._queuedChunk;this._queuedChunk=null;return Promise.resolve({value:t,done:false})}if(this._done){return Promise.resolve({value:undefined,done:true})}var r=c();this._requests.push(r);return r.promise},cancel:function e(t){this._done=true;this._requests.forEach(function(e){e.resolve({value:undefined,done:true})});this._requests=[];if(this._manager.isPendingRequest(this._requestId)){this._manager.abortRequest(this._requestId)}this._close()}};r.setPDFNetworkStreamClass(d);e.PDFNetworkStream=d;e.NetworkManager=n})}).call(i);e.WorkerMessageHandler=i.pdfjsCoreWorker.WorkerMessageHandler});"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"flip-book\",\n  \"version\": \"1.9.9\",\n  \"description\": \"3D FlipBook allows to browse images, PDFs or HTMLs as a flipping book. It helps to attract user attention and make more impression on him.\",\n  \"main\": \"dist/flip-book.js\",\n  \"scripts\": {\n    \"build-debug\": \"webpack --env.debug\",\n    \"build-production\": \"webpack --display-modules\",\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/iberezansky/flip-book-jquery.git\"\n  },\n  \"keywords\": [\n    \"jquery-plugin\",\n    \"ecosystem:jquery\",\n    \"flipbook\",\n    \"jquery flipbook\",\n    \"flip book\",\n    \"pdf flipbook\",\n    \"pdf to flip book\",\n    \"flip gallery\",\n    \"magazine\",\n    \"mobile flipbook\",\n    \"page flip\",\n    \"page turn\",\n    \"pageflip\"\n  ],\n  \"author\": \"iberezansky\",\n  \"license\": \"GPL-2.0\",\n  \"dependencies\": {\n    \"babel-core\": \"^6.18.2\",\n    \"babel-loader\": \"^6.2.7\",\n    \"babel-plugin-transform-class-properties\": \"^6.18.0\",\n    \"babel-preset-es2015\": \"^6.18.0\",\n    \"babel-preset-stage-0\": \"^6.16.0\",\n    \"html2canvas\": \"^0.5.0-beta4\",\n    \"imports-loader\": \"^0.6.5\",\n    \"jquery\": \"^3.1.1\",\n    \"raw-loader\": \"^0.5.1\",\n    \"three\": \"^0.81.2\",\n    \"webpack\": \"^2.1.0-beta.27\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/iberezansky/flip-book-jquery/issues\"\n  },\n  \"homepage\": \"https://github.com/iberezansky/flip-book-jquery#readme\"\n}\n"
  },
  {
    "path": "src/3dflipbook.js",
    "content": "/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 72);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\nvar _$ =  true ? window.jQuery : require('jquery'),\n    _html2canvas =  true ? window.html2canvas : require('html2canvas'),\n    _THREE =  true ? window.THREE : require('three'),\n    _React =  true ? window.React : require('react'),\n    _ReactDOM =  true ? window.ReactDOM : require('react-dom'),\n    _PDFJS =  true ? window.PDFJS : require('pdfjs'),\n    _tr = function _tr(s) {\n  return (window.iberezansky || {}).tr && window.iberezansky.tr(s) || s;\n};\n\nexports.$ = _$;\nexports.html2canvas = _html2canvas;\nexports.THREE = _THREE;\nexports.React = _React;\nexports.ReactDOM = _ReactDOM;\nexports.PDFJS = _PDFJS;\nexports.tr = _tr;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _$ =  true ? window.jQuery : require('jquery'),\n    _html2canvas =  true ? window.html2canvas : require('html2canvas'),\n    _THREE =  true ? window.THREE : require('three'),\n    _PDFJS =  true ? window.PDFJS : require('pdfjs'),\n    _tr = function _tr(s) {\n  return (window.iberezansky || {}).tr && window.iberezansky.tr(s) || s;\n};\n\nif (window.FB3D_LOCALE) {\n  window.iberezansky = _extends({}, window.iberezansky, {\n    tr: function tr(s) {\n      return (FB3D_LOCALE.dictionary || {})[s] || s;\n    }\n  });\n}\n\nexports.$ = _$;\nexports.html2canvas = _html2canvas;\nexports.THREE = _THREE;\nexports.PDFJS = _PDFJS;\nexports.tr = _tr;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BaseMathUtils = function () {\n  function BaseMathUtils() {\n    _classCallCheck(this, BaseMathUtils);\n  }\n\n  BaseMathUtils.sum1 = function sum1(ka, a, kb, b) {\n    return [ka * a[0] + kb * b[0]];\n  };\n\n  BaseMathUtils.sum2 = function sum2(ka, a, kb, b) {\n    return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1]];\n  };\n\n  BaseMathUtils.sum3 = function sum3(ka, a, kb, b) {\n    return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1], ka * a[2] + kb * b[2]];\n  };\n\n  BaseMathUtils.sum4 = function sum4(ka, a, kb, b) {\n    return [ka * a[0] + kb * b[0], ka * a[1] + kb * b[1], ka * a[2] + kb * b[2], ka * a[3] + kb * b[3]];\n  };\n\n  BaseMathUtils.rk4 = function rk4(dy, t, dt, y) {\n    var sum = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : BaseMathUtils.sum[y.length - 1];\n\n    var k1 = dy(t, y),\n        k2 = dy(t + dt / 2, sum(1, y, dt / 2, k1)),\n        k3 = dy(t + dt / 2, sum(1, y, dt / 2, k2)),\n        k4 = dy(t + dt, sum(1, y, dt, k3));\n    return sum(1, y, dt / 6, sum(1, sum(1, k1, 2, k2), 1, sum(2, k3, 1, k4)));\n  };\n\n  BaseMathUtils.extrapolateLinear = function extrapolateLinear(x, y, xi) {\n    return y[0] + (y[1] - y[0]) / (x[1] - x[0]) * (xi - x[0]);\n  };\n\n  BaseMathUtils.interpolateLinear = function interpolateLinear(x, y, xi) {\n    var yi = void 0;\n    if (x[0] > x[1]) {\n      x = x.reverse();\n      y = y.reverse();\n    }\n    if (xi < x[0]) {\n      yi = y[0];\n    } else if (xi > x[1]) {\n      yi = y[1];\n    } else {\n      yi = BaseMathUtils.extrapolateLinear(x, y, xi);\n    }\n    return yi;\n  };\n\n  BaseMathUtils.calcScale = function calcScale(srcW, srcH, dstW, dstH) {\n    return Math.min(dstW / srcW, dstH / srcH);\n  };\n\n  BaseMathUtils.mulM = function mulM(a, b) {\n    var r = [];\n    for (var i = 0; i < a.length; ++i) {\n      r.push([]);\n      for (var j = 0; j < b[0].length; ++j) {\n        r[i][j] = 0;\n        for (var k = 0; k < b.length; ++k) {\n          r[i][j] += a[i][k] * b[k][j];\n        }\n      }\n    }\n    return r;\n  };\n\n  BaseMathUtils.transM = function transM(m) {\n    var r = [];\n    for (var i = 0; i < m.length; ++i) {\n      for (var j = 0; j < m[0].length; ++j) {\n        if (!r[j]) {\n          r[j] = [];\n        }\n        r[j][i] = m[i][j];\n      }\n    }\n    return r;\n  };\n\n  BaseMathUtils.mat = function mat(data) {\n    var s = 0;\n    for (var _iterator = data, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var x = _ref;\n\n      s += x;\n    }\n    return s / data.length;\n  };\n\n  BaseMathUtils.disp = function disp(data) {\n    var M = BaseMathUtils.mat(data);\n    var s = 0;\n    for (var _iterator2 = data, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      if (_isArray2) {\n        if (_i2 >= _iterator2.length) break;\n        _ref2 = _iterator2[_i2++];\n      } else {\n        _i2 = _iterator2.next();\n        if (_i2.done) break;\n        _ref2 = _i2.value;\n      }\n\n      var x = _ref2;\n\n      s += (x - M) * (x - M);\n    }\n    return s / data.length;\n  };\n\n  BaseMathUtils.predict = function predict(data, num) {\n    var r = [],\n        l = data.length,\n        D = BaseMathUtils.disp(data);\n    if (D < l && l > 1) {\n      var am = [],\n          bm = [];\n      for (var i = 0; i < l; ++i) {\n        am.push([i, 1]);\n        bm.push([data[i]]);\n      }\n      var ta = BaseMathUtils.transM(am),\n          a = BaseMathUtils.mulM(ta, am),\n          b = BaseMathUtils.mulM(ta, bm),\n          d = a[0][0] * a[1][1] - a[1][0] * a[0][1],\n          p = [-(a[0][1] * b[1][0] - b[0][0] * a[1][1]) / d, (a[0][0] * b[1][0] - a[1][0] * b[0][0]) / d];\n      for (var _i3 = 0; _i3 < num; ++_i3) {\n        var v = Math.round(p[0] * (_i3 + l) + p[1]);\n        if (r.indexOf(v) === -1) {\n          r.push(v);\n        }\n      }\n    }\n    return r;\n  };\n\n  BaseMathUtils.getUnique = function getUnique() {\n    return Math.ceil(1e9 * Math.random());\n  };\n\n  BaseMathUtils.setSplinePoints = function setSplinePoints(spline, ps) {\n    if (spline.points.length !== ps.x.length) {\n      console.warn('setSplinePoints: bad points');\n    }\n    for (var i = 0; i < spline.points.length; ++i) {\n      spline.points[i].set(ps.x[i], ps.y[i], ps.z ? ps.z[i] : 0);\n    }\n  };\n\n  BaseMathUtils.mapl2L = function mapl2L(ls, len, n, f) {\n    var dL = len / (n - 1);\n    var L = 0;\n    for (var i = 0, d = ls[0]; i < ls.length - 1 && L < len + 0.1 * dL; ++i, d += ls[i]) {\n      if (Math.abs(L - d) < Math.abs(L - d - ls[i + 1])) {\n        f(i, L);\n        L += dL;\n      }\n    }\n    if (L < len + 0.1 * dL) {\n      console.warn('mapl2L: ls is not enought');\n    }\n  };\n\n  BaseMathUtils.det2 = function det2(a, b, c, d) {\n    return a * d - b * c;\n  };\n\n  BaseMathUtils.solve2Lin = function solve2Lin(a1, b1, a2, b2) {\n    var res = void 0;\n    var d = BaseMathUtils.det2(a1[0], a1[1], a2[0], a2[1]);\n    if (Math.abs(d) > BaseMathUtils.eps) {\n      var dx = BaseMathUtils.det2(b1, a1[1], b2, a2[1]),\n          dy = BaseMathUtils.det2(a1[0], b1, a2[0], b2);\n      res = {\n        x: dx / d,\n        y: dy / d\n      };\n    }\n    return res;\n  };\n\n  BaseMathUtils.isInsidePoly = function isInsidePoly(ps, p) {\n    var done = false,\n        ct = void 0;\n    for (var i = 0; i < ps.length; ++i) {\n      if (BaseMathUtils.v2dist(p, ps[i]) < BaseMathUtils.eps) {\n        ct = 1;\n        done = true;\n        break;\n      }\n    }\n    while (!done) {\n      done = true;\n      ct = 0;\n      var np = { x: p.x + Math.random() - 0.5, y: p.y + Math.random() - 0.5 },\n          rn = { x: np.x - p.x, y: np.y - p.y },\n          a1 = [rn.y, -rn.x],\n          b1 = p.x * rn.y - p.y * rn.x;\n      for (var _i4 = 0; _i4 < ps.length; ++_i4) {\n        var p0 = ps[_i4],\n            p1 = ps[(_i4 + 1) % ps.length],\n            n = { x: p1.x - p0.x, y: p1.y - p0.y },\n            a2 = [n.y, -n.x],\n            b2 = p0.x * n.y - p0.y * n.x,\n            ip = BaseMathUtils.solve2Lin(a1, b1, a2, b2);\n        if (ip) {\n          if (BaseMathUtils.v2dist(ip, p0) < BaseMathUtils.eps || BaseMathUtils.v2dist(ip, p1) < BaseMathUtils.eps) {\n            done = false;\n            break;\n          } else if (ip.x > Math.min(p0.x, p1.x) - BaseMathUtils.eps && ip.x < Math.max(p0.x, p1.x) + BaseMathUtils.eps && ip.y > Math.min(p0.y, p1.y) - BaseMathUtils.eps && ip.y < Math.max(p0.y, p1.y) + BaseMathUtils.eps) {\n            if (BaseMathUtils.v2dist(ip, p) < BaseMathUtils.eps) {\n              ct = 1;\n              break;\n            } else {\n              var tn = { x: ip.x - p.x, y: ip.y - p.y };\n              ct += tn.x * rn.x + tn.y * rn.y > 0;\n            }\n          }\n        }\n      }\n    }\n    return ct % 2;\n  };\n\n  BaseMathUtils.isInsideConvPoly = function isInsideConvPoly(ps, p) {\n    var sg = [0, 0];\n    for (var i = 0; i < ps.length; ++i) {\n      var p0 = ps[i],\n          p1 = ps[(i + 1) % ps.length],\n          a = { x: p0.x - p.x, y: p0.y - p.y },\n          b = { x: p1.x - p.x, y: p1.y - p.y };\n      ++sg[(a.x * b.y - a.y * b.x < 0) + 0];\n    }\n    return ~sg.indexOf(ps.length);\n  };\n\n  BaseMathUtils.v2len = function v2len(v2) {\n    return Math.sqrt(v2.x * v2.x + v2.y * v2.y);\n  };\n\n  BaseMathUtils.v2dist = function v2dist(v21, v22) {\n    return BaseMathUtils.v2len({\n      x: v22.x - v21.x,\n      y: v22.y - v21.y\n    });\n  };\n\n  BaseMathUtils.computeSquare = function computeSquare(ps) {\n    var a = [];\n    var p = 0;\n    for (var i = 0; i < ps.length; ++i) {\n      a.push(BaseMathUtils.v2dist(ps[i], ps[(i + 1) % ps.length]));\n      p += 0.5 * a[i];\n    }\n    return Math.sqrt(p * (p - a[0]) * (p - a[1]) * (p - a[2]));\n  };\n\n  BaseMathUtils.computeInterpCoefs = function computeInterpCoefs(tri, p) {\n    var s = BaseMathUtils.computeSquare(tri),\n        coefs = [],\n        l = tri.length;\n    for (var i = 0; i < l; ++i) {\n      coefs[i] = BaseMathUtils.computeSquare([p, tri[(i + 1) % l], tri[(i + 2) % l]]) / s;\n    }\n    return coefs;\n  };\n\n  return BaseMathUtils;\n}();\n\nBaseMathUtils.sum = [BaseMathUtils.sum1, BaseMathUtils.sum2, BaseMathUtils.sum3, BaseMathUtils.sum4];\nBaseMathUtils.eps = 1e-4;\nexports.default = BaseMathUtils;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _BaseMathUtils2 = __webpack_require__(2);\n\nvar _BaseMathUtils3 = _interopRequireDefault(_BaseMathUtils2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MathUtils = function (_BaseMathUtils) {\n  _inherits(MathUtils, _BaseMathUtils);\n\n  function MathUtils() {\n    _classCallCheck(this, MathUtils);\n\n    return _possibleConstructorReturn(this, _BaseMathUtils.apply(this, arguments));\n  }\n\n  MathUtils.splitSpline = function splitSpline(spline, N) {\n    var o = { len: 0, ls: [0] },\n        dl = 1 / N;\n    for (var i = 0; i <= N; ++i) {\n      var p = spline.getPoint(i * dl);\n      if (i) {\n        var d = MathUtils.v1.distanceTo(p);\n        o.len += d;\n        o.ls.push(d);\n      }\n      MathUtils.v1.copy(p);\n    }\n    return o;\n  };\n\n  MathUtils.getLinearIndeces = function getLinearIndeces(spline, n) {\n    var del = 5000,\n        dDel = 1 / del;\n    var ls = [0];\n    var l = 0;\n    for (var i = 0; i <= del; ++i) {\n      var p = spline.getPoint(i * dDel);\n      if (i) {\n        var d = MathUtils.v1.distanceTo(p);\n        l += d;\n        ls.push(d);\n      }\n      MathUtils.v1.copy(p);\n    }\n    ls.push(1e7);\n\n    var res = [],\n        dl = l / (n - 1);\n    for (var _i = 0, L = 0, _d = ls[0]; _i < ls.length - 1; ++_i, _d += ls[_i]) {\n      if (Math.abs(L - _d) < Math.abs(L - _d - ls[_i + 1])) {\n        res.push(_i * dDel);\n        L += dl;\n      }\n    }\n\n    return res;\n  };\n\n  MathUtils.refinePoly = function refinePoly(poly, maxDl) {\n    var res = [];\n    for (var i = 0; i < poly.length; ++i) {\n      var p0 = poly[i],\n          p1 = poly[(i + 1) % poly.length],\n          l = _BaseMathUtils3.default.v2dist(p0, p1),\n          n = Math.ceil(l / maxDl),\n          dl = l / n;\n      res.push(p0);\n      for (var j = 1; j < n; ++j) {\n        res.push(new _libs.THREE.Vector2(p0.x + j * dl * (p1.x - p0.x) / l, p0.y + j * dl * (p1.y - p0.y) / l));\n      }\n    }\n    return res;\n  };\n\n  return MathUtils;\n}(_BaseMathUtils3.default);\n\nMathUtils.v1 = new _libs.THREE.Vector3();\nexports.default = MathUtils;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Utils = function () {\n  function Utils() {\n    _classCallCheck(this, Utils);\n  }\n\n  Utils.normalizeUrl = function normalizeUrl(url) {\n    function split(s) {\n      return s.replace(/\\\\/g, '/').split('/');\n    }\n    var base = split(window.location.href);\n    url = split(url);\n    if (base[2] === url[2]) {\n      url[0] = base[0];\n    }\n    return url.join('/');\n  };\n\n  Utils.extends = function _extends(der, base) {\n    for (var name in base) {\n      if (!der.hasOwnProperty(name)) {\n        der[name] = base[name];\n      }\n    }\n  };\n\n  Utils.defaultCmp = function defaultCmp(a, b) {\n    return a - b;\n  };\n\n  Utils.lowerBound = function lowerBound(a, x, cmp) {\n    cmp = cmp || Utils.defaultCmp;\n    var l = 0,\n        h = a.length - 1;\n    while (h - l > 1) {\n      var mid = Math.floor((l + h) / 2);\n      if (cmp(x, a[mid]) < 0) {\n        h = mid;\n      } else {\n        l = mid;\n      }\n    }\n    return cmp(x, a[h]) >= 0 ? h : l;\n  };\n\n  return Utils;\n}();\n\nexports.default = Utils;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _GraphUtils = __webpack_require__(7);\n\nvar _GraphUtils2 = _interopRequireDefault(_GraphUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ImageBase = function () {\n  function ImageBase(context, width, height, color) {\n    _classCallCheck(this, ImageBase);\n\n    this.context = context;\n    this.wnd = context.wnd;\n    this.doc = context.doc;\n    this.element = context.element || context.doc.body;\n    this.c = context.renderCanvas || ImageBase.renderCanvas;\n    this.ctx = context.renderCanvasCtx || ImageBase.renderCanvasCtx;\n    this.resW = this.width = width;\n    this.resH = this.height = height;\n    this.color = color;\n  }\n\n  ImageBase.prototype.setResolution = function setResolution(res) {\n    this.resW = res.width;\n    this.resH = res.height;\n  };\n\n  ImageBase.prototype.dispose = function dispose() {};\n\n  ImageBase.prototype.renderBlankPage = function renderBlankPage() {\n    this.ctx.beginPath();\n    this.ctx.fillStyle = _GraphUtils2.default.color2Rgba(this.color, 1);\n    this.ctx.rect(0, 0, this.c.width, this.c.height);\n    this.ctx.fill();\n  };\n\n  ImageBase.prototype.renderImage = function renderImage(image) {\n    this.pushCtx();\n    this.ctx.drawImage(image, 0, 0);\n    this.popCtx();\n  };\n\n  ImageBase.prototype.normToConv = function normToConv(p) {\n    return {\n      x: p.x * this.c.width,\n      y: (1 - p.y) * this.c.height\n    };\n  };\n\n  ImageBase.prototype.renderHit = function renderHit(poly) {\n    var ctx = this.ctx;\n    ctx.fillStyle = 'rgba(255,255,0,0.4)';\n    ctx.beginPath();\n    var p = this.normToConv(poly[0]);\n    ctx.moveTo(p.x, p.y);\n    for (var i = 1; i < poly.length; ++i) {\n      p = this.normToConv(poly[i]);\n      ctx.lineTo(p.x, p.y);\n    }\n    ctx.closePath();\n    ctx.fill();\n  };\n\n  ImageBase.prototype.pushCtx = function pushCtx() {\n    if (this.resW != this.c.width) {\n      this.c.width = this.resW;\n    }\n    if (this.resH != this.c.height) {\n      this.c.height = this.resH;\n    }\n    this.ctx.save();\n    this.ctx.scale(this.c.width / this.width, this.c.height / this.height);\n    return this.ctx;\n  };\n\n  ImageBase.prototype.popCtx = function popCtx() {\n    this.ctx.restore();\n  };\n\n  ImageBase.prototype.renderNotFoundPage = function renderNotFoundPage() {\n    this.renderBlankPage();\n  };\n\n  ImageBase.prototype.finishRender = function finishRender() {\n    if (this.onChange) {\n      this.onChange(this.c);\n    }\n  };\n\n  ImageBase.prototype.finishLoad = function finishLoad() {\n    if (this.onLoad) {\n      this.onLoad();\n    } else {\n      this.startRender();\n    }\n  };\n\n  ImageBase.prototype.getSimulatedDoc = function getSimulatedDoc() {\n    return undefined;\n  };\n\n  return ImageBase;\n}();\n\nImageBase.renderCanvas = (0, _libs.$)('<canvas>')[0];\nImageBase.renderCanvasCtx = ImageBase.renderCanvas.getContext('2d');\nexports.default = ImageBase;\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventConverter = function () {\n\n  // virtuals\n  // getObject(e, data);\n  // getCallback(object);\n  // test(object1, object1);\n\n  function EventConverter(wnd, doc) {\n    _classCallCheck(this, EventConverter);\n\n    this.wnd = wnd;\n    this.doc = doc;\n    this.enabled = true;\n  }\n\n  EventConverter.prototype.setEnable = function setEnable(vl) {\n    if (!vl) {\n      if (this.mCapObject) {\n        this.notify(this.mCapObject, _libs.$.Event('mouseup'), 'mouseup');\n        this.mCapObject = undefined;\n      }\n      if (this.mHovObject) {\n        this.notify(this.mHovObject, _libs.$.Event('mouseout'), 'mouseout');\n        this.mHovObject = undefined;\n      }\n    }\n    this.enabled = vl;\n  };\n\n  EventConverter.prototype.getCallback = function getCallback(object) {\n    return undefined;\n  };\n\n  EventConverter.prototype.notify = function notify(object, e, type) {\n    var callback = this.getCallback(object);\n    if (callback) {\n      var props = _extends({}, e, {\n        type: type,\n        view: this.wnd\n      });\n      var jE = _libs.$.Event(type, props);\n      callback(jE, object);\n    }\n  };\n\n  EventConverter.prototype.convert = function convert(e, data) {\n    if (!this.enabled) return;\n\n    if (this.filter) {\n      e = this.filter(this.element, e);\n    }\n\n    var object = this.getObject(e, data),\n        notify = ~e.type.indexOf('touch') ? this.convertTouch(e, data, object) : this.convertMouse(e, data, object);\n    if (notify && object) {\n      this.notify(object, e, e.type);\n    }\n  };\n\n  EventConverter.prototype.convertTouch = function convertTouch(e, data, object) {\n    var notify = true;\n    switch (e.type) {\n      case 'touchstart':\n        {\n          if (this.tCapObject) {\n            this.notify(this.tCapObject, e, 'touchend');\n          }\n          this.tCapObject = object;\n          break;\n        }\n      case 'touchend':\n        {\n          if (this.tCapObject && !this.test(this.tCapObject, object)) {\n            this.notify(this.tCapObject, e, 'touchend');\n            notify = false;\n          } else if (object && this.test(this.tCapObject, object)) {\n            this.notify(object, e, 'touchtap');\n          }\n          this.tCapObject = undefined;\n          break;\n        }\n      case 'touchtap':\n        {\n          notify = false;\n          break;\n        }\n    }\n    return notify;\n  };\n\n  EventConverter.prototype.convertMouse = function convertMouse(e, data, object) {\n    var notify = true;\n    switch (e.type) {\n      case 'mousedown':\n        {\n          if (this.mCapObject) {\n            this.notify(this.mCapObject, e, 'mouseup');\n          }\n          this.mCapObject = object;\n          break;\n        }\n      case 'mouseup':\n        {\n          if (this.mCapObject && !this.test(this.mCapObject, object)) {\n            this.notify(this.mCapObject, e, 'mouseup');\n            notify = false;\n          }\n          break;\n        }\n      case 'click':\n        {\n          notify = this.test(this.mCapObject, object);\n          this.mCapObject = undefined;\n          break;\n        }\n      case 'mouseenter':\n      case 'mouseover':\n      case 'mousemove':\n        {\n          if (!this.test(this.mHovObject, object) && this.mHovObject) {\n            this.notify(this.mHovObject, e, 'mouseout');\n            this.mHovObject = undefined;\n          }\n          if (!this.mHovObject && object) {\n            this.notify(object, e, 'mouseover');\n            this.mHovObject = object;\n          }\n          notify = e.type === 'mousemove';\n          break;\n        }\n      case 'mouseleave':\n      case 'mouseout':\n        {\n          if (this.mHovObject) {\n            this.notify(this.mHovObject, e, 'mouseout');\n            this.mHovObject = undefined;\n          }\n          notify = false;\n          break;\n        }\n    }\n    return notify;\n  };\n\n  return EventConverter;\n}();\n\nexports.default = EventConverter;\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar GraphUtils = function () {\n  function GraphUtils() {\n    _classCallCheck(this, GraphUtils);\n  }\n\n  GraphUtils.extrapolateLinear = function extrapolateLinear(x, y, xi) {\n    return y[0] + (y[1] - y[0]) / (x[1] - x[0]) * (xi - x[0]);\n  };\n\n  GraphUtils.interpolate01 = function interpolate01(y1, y2, t) {\n    return GraphUtils.extrapolateLinear([0, 1], [y1, y2], t);\n  };\n\n  GraphUtils.getColorBytes = function getColorBytes(color) {\n    return [color >> 16 & 0xFF, color >> 8 & 0xFF, color & 0xFF];\n  };\n\n  GraphUtils.inverseColor = function inverseColor(color) {\n    var t = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n    var bs = GraphUtils.getColorBytes(color),\n        ibs = [0xFF - bs[0], 0xFF - bs[1], 0xFF - bs[2]],\n        nbs = [Math.round(GraphUtils.interpolate01(bs[0], ibs[0], t)), Math.round(GraphUtils.interpolate01(bs[1], ibs[1], t)), Math.round(GraphUtils.interpolate01(bs[2], ibs[2], t))];\n    return GraphUtils.bytes2Color(nbs);\n  };\n\n  GraphUtils.color2Rgba = function color2Rgba(color, a) {\n    return GraphUtils.bytes2Rgba(GraphUtils.getColorBytes(color), a);\n  };\n\n  GraphUtils.bytes2Rgba = function bytes2Rgba(bs, a) {\n    return 'rgba(' + bs.join(',') + ',' + a + ')';\n  };\n\n  GraphUtils.bytes2Color = function bytes2Color(bs) {\n    return bs[2] | bs[1] << 8 | bs[0] << 16;\n  };\n\n  return GraphUtils;\n}();\n\nexports.default = GraphUtils;\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _Cache = __webpack_require__(14);\n\nvar _Cache2 = _interopRequireDefault(_Cache);\n\nvar _BlankImage = __webpack_require__(43);\n\nvar _BlankImage2 = _interopRequireDefault(_BlankImage);\n\nvar _StaticImage = __webpack_require__(59);\n\nvar _StaticImage2 = _interopRequireDefault(_StaticImage);\n\nvar _PdfImage = __webpack_require__(57);\n\nvar _PdfImage2 = _interopRequireDefault(_PdfImage);\n\nvar _InteractiveImage = __webpack_require__(51);\n\nvar _InteractiveImage2 = _interopRequireDefault(_InteractiveImage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ImageFactory = function () {\n  function ImageFactory(context, cache) {\n    _classCallCheck(this, ImageFactory);\n\n    this.context = context;\n    this.cache = cache || new _Cache2.default();\n  }\n\n  ImageFactory.prototype.build = function build(info) {\n    var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var widthTexels = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 210;\n    var heightTexels = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 297;\n    var color = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0xFFFFFF;\n    var injector = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;\n\n    var image = void 0;\n    switch (info.type) {\n      case 'html':\n        {\n          image = new _InteractiveImage2.default(this.context, widthTexels, heightTexels, color, info.src, this.cache, injector);\n          break;\n        }\n      case 'image':\n        {\n          image = new _StaticImage2.default(this.context, widthTexels, heightTexels, color, info.src);\n          break;\n        }\n      case 'pdf':\n        {\n          image = new _PdfImage2.default(this.context, widthTexels, heightTexels, color, info.src, n);\n          break;\n        }\n      case 'blank':\n      default:\n        {\n          image = new _BlankImage2.default(this.context, widthTexels, heightTexels, color);\n          break;\n        }\n    }\n    return image;\n  };\n\n  return ImageFactory;\n}();\n\nexports.default = ImageFactory;\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _book = __webpack_require__(11);\n\nvar _BaseMathUtils = __webpack_require__(2);\n\nvar _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BookPropsBuilder = function () {\n  function BookPropsBuilder(onReady) {\n    _classCallCheck(this, BookPropsBuilder);\n\n    this.onReady = onReady;\n    this.defaults = (0, _book.props)();\n  }\n\n  BookPropsBuilder.prototype.dispose = function dispose() {};\n\n  BookPropsBuilder.prototype.calcSize = function calcSize(width, height) {\n    var scale = _BaseMathUtils2.default.calcScale(width, height, this.defaults.width, this.defaults.height);\n    return {\n      width: scale * width,\n      height: scale * height\n    };\n  };\n\n  BookPropsBuilder.prototype.calcTexels = function calcTexels(width, height) {\n    var sheet = this.defaults.sheet,\n        scale = _BaseMathUtils2.default.calcScale(width, height, sheet.widthTexels, sheet.heightTexels);\n    return {\n      widthTexels: scale * width,\n      heightTexels: scale * height\n    };\n  };\n\n  BookPropsBuilder.prototype.calcProps = function calcProps(width, height) {\n    this.props = _extends({}, this.defaults, this.calcSize(width, height), {\n      sheet: _extends({}, this.defaults.sheet, this.calcTexels(width, height)),\n      cover: _extends({}, this.defaults.cover),\n      page: _extends({}, this.defaults.page)\n    });\n  };\n\n  BookPropsBuilder.prototype.calcSheets = function calcSheets(pages) {\n    return this.sheets = Math.ceil(Math.max(0, pages - 4) / 2);\n  };\n\n  BookPropsBuilder.prototype.getSheets = function getSheets() {\n    return this.sheets;\n  };\n\n  BookPropsBuilder.prototype.getProps = function getProps() {\n    return this.props;\n  };\n\n  BookPropsBuilder.prototype.getPageCallback = function getPageCallback() {\n    return this.binds.pageCallback;\n  };\n\n  BookPropsBuilder.prototype.ready = function ready() {\n    if (this.onReady) {\n      this.onReady(this.getProps(), this.getSheets(), this.getPageCallback());\n    }\n  };\n\n  return BookPropsBuilder;\n}();\n\nexports.default = BookPropsBuilder;\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(1);\n\nvar _sheetBlock = __webpack_require__(41);\n\nvar _sheetBlock2 = _interopRequireDefault(_sheetBlock);\n\nvar _MathUtils = __webpack_require__(3);\n\nvar _MathUtils2 = _interopRequireDefault(_MathUtils);\n\nvar _ThreeUtils = __webpack_require__(20);\n\nvar _ThreeUtils2 = _interopRequireDefault(_ThreeUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// import ThreeMarkup from './ThreeMarkup';\n\nvar SheetBlock = function () {\n  function SheetBlock(visual, p, first, last) {\n    var angle = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n\n    var _this = this;\n\n    var state = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'closed';\n    var height = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n\n    _classCallCheck(this, SheetBlock);\n\n    this.visual = visual;\n    this.p = _extends({}, p, {\n      first: first,\n      last: last\n    });\n    var props = this.getProps();\n\n    var loadedPoints = this.loadPoints();\n    Object.keys(loadedPoints).map(function (k) {\n      _this[k] = loadedPoints[k][props.shape] || loadedPoints[k][0];\n    });\n\n    this.pSpline = new _libs.THREE.Spline([]);\n    for (var i = 0; i < this.interpolationPoints.x[0].length; ++i) {\n      this.pSpline.points.push(new _libs.THREE.Vector3());\n    }\n\n    this.iSpline = new _libs.THREE.Spline([]);\n    for (var _i = 0; _i < _sheetBlock2.default.resX; ++_i) {\n      this.iSpline.points.push(new _libs.THREE.Vector3());\n    }\n\n    this.aSplines = [];\n\n    //this.three = new THREE.Object3D();\n\n    this.geometry = _sheetBlock2.default.geometry.clone();\n\n    this.p.sideFaces = [{\n      first: 0,\n      last: _sheetBlock2.default.faces[0]\n    }, {\n      first: _sheetBlock2.default.faces[0],\n      last: _sheetBlock2.default.faces[1]\n    }];\n\n    this.sideTexture = new _libs.THREE.Texture();\n    this.sideTexture.wrapT = _libs.THREE.RepeatWrapping;\n    this.sideTexture.repeat.set(0, last - first);\n    this.sideTexture.image = props.sideTexture;\n    this.sideTexture.needsUpdate = true;\n\n    this.materials = [new _libs.THREE.MeshPhongMaterial(), new _libs.THREE.MeshPhongMaterial(), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture }), new _libs.THREE.MeshPhongMaterial({ map: this.sideTexture })];\n\n    this.p.setTexture(this.materials[0], 2 * first);\n    this.p.setTexture(this.materials[1], 2 * last - 1);\n\n    this.mesh = new _libs.THREE.Mesh(this.geometry, new _libs.THREE.MeshFaceMaterial(this.materials));\n    this.mesh.castShadow = false;\n    this.mesh.receiveShadow = false;\n    // this.mesh.frustumCulled = true;\n\n    //this.three.add(this.mesh);\n    this.three = this.mesh;\n    this.three.userData.self = this;\n\n    this.markers = [];\n    if (this.p.marker.use) {\n      var l = this.geometry.vertices.length;\n      var is = void 0;\n      // is = [0, sheetBlock.resX-1, (sheetBlock.resZ-1)*sheetBlock.resX, sheetBlock.resZ*sheetBlock.resX-1];\n      is = Array.apply(0, Array(l)).map(function (_, i) {\n        return i;\n      });\n\n      for (var _iterator = is, _isArray = Array.isArray(_iterator), _i2 = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i2 >= _iterator.length) break;\n          _ref = _iterator[_i2++];\n        } else {\n          _i2 = _iterator.next();\n          if (_i2.done) break;\n          _ref = _i2.value;\n        }\n\n        var _i3 = _ref;\n\n        var marker = _ThreeUtils2.default.createMarker(this.geometry.vertices[_i3], _i3 < l / 2 ? 0xFF0000 : 0x00FF00, this.p.marker.size);\n        this.markers.push({\n          marker: marker,\n          vertex: _i3\n        });\n        this.three.add(marker);\n      }\n    }\n\n    this.corner = {\n      use: true,\n      height: 0,\n      maxDistance: 0,\n      points: [],\n      OZ: new _libs.THREE.Vector3(0, 0, 1),\n      axis: new _libs.THREE.Vector3()\n    };\n    this.set(0, 'closed', height, first, last); // calculate corner points\n\n    this.set(angle, state, height, first, last); // init position\n\n    // if(!SheetBlock.markup) {\n    //   SheetBlock.markup=true;\n    //   this.markup = new ThreeMarkup(this, 0, [{\n    //     x: 0,\n    //     y: 0,\n    //   }, {\n    //     x: 0.5,\n    //     y: 1\n    //   }, {\n    //     x: 1,\n    //     y: 0\n    //   }].map((p)=>new THREE.Vector2(p.x, p.y)), {});\n    // }\n  }\n\n  SheetBlock.prototype.dispose = function dispose() {\n    for (var _iterator2 = this.materials, _isArray2 = Array.isArray(_iterator2), _i4 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      if (_isArray2) {\n        if (_i4 >= _iterator2.length) break;\n        _ref2 = _iterator2[_i4++];\n      } else {\n        _i4 = _iterator2.next();\n        if (_i4.done) break;\n        _ref2 = _i4.value;\n      }\n\n      var m = _ref2;\n\n      if (m.map) {\n        m.map = null;\n        m.needsUpdate = true;\n      }\n      m.dispose();\n    }\n    delete this.materials;\n    this.geometry.dispose();\n  };\n\n  SheetBlock.prototype.getSize = function getSize() {\n    return this.p.last - this.p.first;\n  };\n\n  SheetBlock.prototype.getProps = function getProps() {\n    return _extends({}, this.p.page, {\n      sheets: this.p.sheets\n    });\n  };\n\n  SheetBlock.prototype.getTopCerners = function getTopCerners() {\n    var off = this.angle > Math.PI / 2 ? this.geometry.vertices.length / 2 : 0;\n    return [this.geometry.vertices[off], this.geometry.vertices[_sheetBlock2.default.resX - 1 + off], this.geometry.vertices[(_sheetBlock2.default.resZ - 1) * _sheetBlock2.default.resX + off], this.geometry.vertices[_sheetBlock2.default.resZ * _sheetBlock2.default.resX - 1 + off]];\n  };\n\n  SheetBlock.prototype.getTopSize = function getTopSize() {\n    // const l=this.geometry.vertices.length, off = this.angle>Math.PI/2? l/2: 0,\n    //   v0 = this.geometry.vertices[off], v1 = this.geometry.vertices[sheetBlock.resZ*sheetBlock.resX-1+off];\n    // // is = [0, sheetBlock.resX-1, (sheetBlock.resZ-1)*sheetBlock.resX, sheetBlock.resZ*sheetBlock.resX-1];\n    // return {\n    //   width: Math.abs(v1.x-v0.x),\n    //   height: Math.abs(v1.z-v0.z)\n    // };\n    var vs = this.getTopCerners();\n    return {\n      width: vs[0].distanceTo(vs[1]),\n      height: vs[0].distanceTo(vs[2])\n    };\n  };\n\n  SheetBlock.prototype.getTopWorldRotation = function getTopWorldRotation(q) {\n    q.x = -Math.PI / 2;\n    return q;\n  };\n\n  SheetBlock.prototype.getTopWorldPosition = function getTopWorldPosition(v) {\n    var l = this.geometry.vertices.length,\n        off = this.angle > Math.PI / 2 ? l / 2 : 0,\n        vs = [this.geometry.vertices[off], this.geometry.vertices[_sheetBlock2.default.resX - 1 + off], this.geometry.vertices[(_sheetBlock2.default.resZ - 1) * _sheetBlock2.default.resX + off], this.geometry.vertices[_sheetBlock2.default.resZ * _sheetBlock2.default.resX - 1 + off]];\n    v.set(0, 0, 0);\n    for (var _iterator3 = vs, _isArray3 = Array.isArray(_iterator3), _i5 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n      var _ref3;\n\n      if (_isArray3) {\n        if (_i5 >= _iterator3.length) break;\n        _ref3 = _iterator3[_i5++];\n      } else {\n        _i5 = _iterator3.next();\n        if (_i5.done) break;\n        _ref3 = _i5.value;\n      }\n\n      var vi = _ref3;\n\n      v.x += 0.25 * vi.x;\n      v.y += 0.25 * vi.y;\n      v.z += 0.25 * vi.z;\n    }\n    this.three.localToWorld(v);\n    return v;\n  };\n\n  SheetBlock.prototype.getInterpolationPoints = function getInterpolationPoints(inds, mod) {\n    var ps = { x: [], y: [] },\n        K = this.getProps().wave;\n    for (var _iterator4 = inds, _isArray4 = Array.isArray(_iterator4), _i6 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n      var _ref4;\n\n      if (_isArray4) {\n        if (_i6 >= _iterator4.length) break;\n        _ref4 = _iterator4[_i6++];\n      } else {\n        _i6 = _iterator4.next();\n        if (_i6.done) break;\n        _ref4 = _i6.value;\n      }\n\n      var i = _ref4;\n\n      ps.x.push([].concat(this.interpolationPoints.x[i]));\n      ps.y.push(~mod.indexOf(i) ? this.interpolationPoints.y[i].map(function (n) {\n        return K * n;\n      }) : [].concat(this.interpolationPoints.y[i]));\n    }\n    return ps;\n  };\n\n  SheetBlock.prototype.set = function set(angle) {\n    var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.state;\n    var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.corner.height;\n    var first = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : this.p.first;\n    var last = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.p.last;\n\n    var PI = Math.PI;\n    this.state = state;\n    var closedAngle = void 0,\n        binderTurn = void 0;\n    if ((typeof angle === 'undefined' ? 'undefined' : _typeof(angle)) === 'object') {\n      this.angle = angle.openedAngle;\n      closedAngle = angle.closedAngle;\n      binderTurn = angle.binderTurn > PI / 2 ? PI - angle.binderTurn : angle.binderTurn;\n    } else {\n      this.angle = angle;\n    }\n    this.corner.height = height;\n    if (this.p.first !== first || this.p.last !== last) {\n      this.sideTexture.repeat.set(0, last - first);\n      this.sideTexture.needsUpdate = true;\n      if (this.p.first !== first) {\n        this.p.setTexture(this.materials[0], 2 * first);\n      }\n      if (this.p.last !== last) {\n        this.p.setTexture(this.materials[1], 2 * last - 1);\n      }\n    }\n    this.p.first = first;\n    this.p.last = last;\n    var points = void 0;\n    var props = this.getProps();\n    if (this.state === 'closed') {\n      points = this.getInterpolationPoints(this.closedInterpolationIndeces, this.closedInterpolationIndeces);\n    } else if (this.state === 'opened') {\n      if (closedAngle !== undefined && Math.abs(closedAngle - PI / 2) > 1e-2) {\n        points = this.getInterpolationPoints(this.flatInterpolationIndeces, []);\n        var ps = this.getPointsAtAngle(this.getInterpolationPoints(this.closedInterpolationIndeces, this.closedInterpolationIndeces), closedAngle > PI / 2 ? PI - closedAngle : closedAngle);\n        points.x = [ps.x].concat(points.x);\n        points.y = [ps.y].concat(points.y);\n        // console.log(ps);\n      } else {\n        points = this.getInterpolationPoints(this.openedInterpolationIndeces, this.closedInterpolationIndeces);\n      }\n    }\n    var hl = void 0,\n        hr = void 0,\n        offset = 0.5 * props.sheets * props.depth;\n    if (this.state === 'closed') {\n      offset -= 7e-6 * this.p.scale;\n    }\n    if (this.angle <= PI / 2) {\n      hl = (props.sheets - first) * props.depth;\n      hr = (props.sheets - last) * props.depth;\n    } else {\n      hl = first * props.depth;\n      hr = last * props.depth;\n    }\n\n    var inAngle = this.angle > PI / 2 ? PI - this.angle : this.angle,\n        hAngle = this.state === 'closed' ? inAngle : binderTurn === undefined ? PI / 2 : binderTurn;\n\n    var _getPointsAtAngleAndH = this.getPointsAtAngleAndHs(points, inAngle, hAngle, [hl / props.width, hr / props.width]),\n        left = _getPointsAtAngleAndH[0],\n        right = _getPointsAtAngleAndH[1];\n\n    if (this.angle > PI / 2) {\n      this.inverse(left);\n      this.inverse(right);\n      offset = -offset;\n    }\n    this.setPoints(left, right, offset);\n  };\n\n  SheetBlock.prototype.setPoints = function setPoints(left, right, offset) {\n    var _this2 = this;\n\n    var p = this.getProps();\n    var i = 0;\n\n    var ys = [right, left];\n    for (var y = 0; y < _sheetBlock2.default.resY; ++y) {\n      for (var z = 0; z < _sheetBlock2.default.resZ; ++z) {\n        for (var x = 0; x < _sheetBlock2.default.resX; ++x) {\n          this.geometry.vertices[i++].set(ys[y].x[x] * p.width + offset, ys[y].y[x] * p.width, z * p.height / (_sheetBlock2.default.resZ - 1) - 0.5 * p.height);\n        }\n      }\n    }\n    if (i !== this.geometry.vertices.length) {\n      console.warn('setPoints: bad mapping!');\n    }\n\n    if (this.corner.use && !this.corner.points.length) {\n      var plane = new _libs.THREE.Plane(),\n          normal = plane.normal,\n          planeOffset = (1 - this.getProps().flexibleCorner) * Math.min(p.width, p.height),\n          proj = new _libs.THREE.Vector3();\n      plane.setFromNormalAndCoplanarPoint(new _libs.THREE.Vector3(-1, 0, -1).normalize(), new _libs.THREE.Vector3(planeOffset + offset, 0, 0.5 * p.height));\n      for (var _i7 = 0, l = this.geometry.vertices.length; _i7 < l; ++_i7) {\n        plane.projectPoint(this.geometry.vertices[_i7], proj);\n        proj.sub(this.geometry.vertices[_i7]);\n        if (proj.x * normal.x + proj.y * normal.y + proj.z * normal.z > 0) {\n          var d = proj.length() / planeOffset;\n          this.corner.maxDistance = Math.max(this.corner.maxDistance, d);\n          this.corner.points.push({ vertex: _i7, distance: d });\n        }\n      }\n    }\n\n    if (this.corner.use && Math.abs(this.corner.height) > 1e-3) {\n      var d2Angle = function d2Angle(d) {\n        return p.cornerDeviation * _this2.corner.height / (1 + Math.exp(-p.bending * (d - 0.5 * _this2.corner.maxDistance)));\n      };\n      this.corner.axis.set(-1, 0, 1).normalize();\n      this.corner.axis.applyAxisAngle(this.corner.OZ, this.angle);\n      for (var _iterator5 = this.corner.points, _isArray5 = Array.isArray(_iterator5), _i8 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n        var _ref5;\n\n        if (_isArray5) {\n          if (_i8 >= _iterator5.length) break;\n          _ref5 = _iterator5[_i8++];\n        } else {\n          _i8 = _iterator5.next();\n          if (_i8.done) break;\n          _ref5 = _i8.value;\n        }\n\n        var point = _ref5;\n\n        this.geometry.vertices[point.vertex].applyAxisAngle(this.corner.axis, d2Angle(point.distance));\n      }\n    }\n\n    for (var _iterator6 = this.markers, _isArray6 = Array.isArray(_iterator6), _i9 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n      var _ref6;\n\n      if (_isArray6) {\n        if (_i9 >= _iterator6.length) break;\n        _ref6 = _iterator6[_i9++];\n      } else {\n        _i9 = _iterator6.next();\n        if (_i9.done) break;\n        _ref6 = _i9.value;\n      }\n\n      var m = _ref6;\n\n      m.marker.position.copy(this.geometry.vertices[m.vertex]);\n    }\n\n    this.geometry.computeVertexNormals();\n    //this.geometry.computeFaceNormals();\n    this.geometry.computeBoundingSphere();\n    //this.geometry.computeBoundingBox();\n    this.geometry.verticesNeedUpdate = true;\n\n    if (this.markup) {\n      this.markup.computeVertices();\n    }\n  };\n\n  SheetBlock.prototype.inverse = function inverse(ps) {\n    for (var i = 0; i < ps.x.length; ++i) {\n      ps.x[i] = -ps.x[i];\n    }\n    return ps;\n  };\n\n  SheetBlock.prototype.getPointsAtHs = function getPointsAtHs(ps, angle, hs) {\n    var _this3 = this;\n\n    var N = 1000;\n    _MathUtils2.default.setSplinePoints(this.pSpline, ps);\n    var bl = _MathUtils2.default.splitSpline(this.pSpline, N),\n        r = [];\n    {\n      var p1 = _extends({}, this.pSpline.getPoint((N - 1) / N)),\n          p2 = _extends({}, this.pSpline.getPoint(1)),\n          dp = { x: p2.x - p1.x, y: p2.y - p1.y },\n          ln = Math.sqrt(dp.x * dp.x + dp.y * dp.y),\n          sp = this.pSpline.points[this.pSpline.points.length - 1];\n      sp.set(sp.x + 0.1 * dp.x / ln, sp.y + 0.1 * dp.y / ln, 0);\n      bl = _MathUtils2.default.splitSpline(this.pSpline, N);\n    }\n    bl.ls.push(1e7);\n    _MathUtils2.default.mapl2L(bl.ls, bl.len, _sheetBlock2.default.resX, function (i) {\n      for (var j = 0; j < hs.length; ++j) {\n        if (!i) {\n          r[j] = { x: [-hs[j] * Math.sin(angle)], y: [hs[j] * Math.cos(angle)] };\n        } else {\n          var p0 = _extends({}, _this3.pSpline.getPoint((i - 1) / N)),\n              _p = _this3.pSpline.getPoint(i / N),\n              x = -(_p.y - p0.y),\n              y = _p.x - p0.x,\n              l = Math.sqrt(x * x + y * y);\n          r[j].x.push(_p.x + x / l * hs[j]);\n          r[j].y.push(_p.y + y / l * hs[j]);\n        }\n      }\n    });\n\n    var nps = [];\n\n    var _loop = function _loop(j) {\n      nps[j] = { x: [], y: [] };\n      _MathUtils2.default.setSplinePoints(_this3.iSpline, r[j]);\n      var l = _MathUtils2.default.splitSpline(_this3.iSpline, N);\n      l.ls.push(1e7);\n      _MathUtils2.default.mapl2L(l.ls, 1, _sheetBlock2.default.resX, function (i) {\n        var p = _this3.iSpline.getPoint(i / N);\n        nps[j].x.push(p.x);\n        nps[j].y.push(p.y);\n      });\n    };\n\n    for (var j = 0; j < hs.length; ++j) {\n      _loop(j);\n    }\n    return nps;\n  };\n\n  SheetBlock.prototype.getPointsAtAngleAndHs = function getPointsAtAngleAndHs(points, angle, hAngle, hs) {\n    var ps = this.getPointsAtAngle(points, angle);\n    return this.getPointsAtHs(ps, hAngle, hs);\n  };\n\n  SheetBlock.prototype.getPointsAtAngle = function getPointsAtAngle(points, angle) {\n    var ps = { x: [], y: [] },\n        angles = [];\n    angle /= Math.PI / 2;\n    for (var j = 0; j < points.x.length; ++j) {\n      angles.push(j / (points.x.length - 1));\n    }\n    for (var i = 0; i < points.x[0].length; ++i) {\n      var xps = [],\n          yps = [];\n      for (var _j = 0; _j < points.x.length; ++_j) {\n        xps.push(points.x[_j][i]);\n        yps.push(points.y[_j][i]);\n      }\n      ps.x.push(this.interpolate(angles, xps, angle));\n      ps.y.push(this.interpolate(angles, yps, angle));\n    }\n    return ps;\n  };\n\n  SheetBlock.prototype.interpolate = function interpolate(x, y, xi) {\n    if (!this.aSplines[x.length]) {\n      this.aSplines[x.length] = new _libs.THREE.Spline([]);\n      var ps = this.aSplines[x.length].points;\n      for (var i = 0; i < x.length; ++i) {\n        ps.push(new _libs.THREE.Vector3());\n      }\n    }\n    var spline = this.aSplines[x.length];\n    for (var _i10 = 0; _i10 < x.length; ++_i10) {\n      spline.points[_i10].set(x[_i10], y[_i10], 0);\n    }\n    return spline.getPoint(Math.min(1, Math.max(xi, 0))).y;\n  };\n\n  SheetBlock.prototype.loadPoints = function loadPoints() {\n    var x = [],\n        y = [];\n    var _arr = [0, 0.2877, 0.6347, 0.8174, 1.0000];\n    for (var _i11 = 0; _i11 < _arr.length; _i11++) {\n      var r = _arr[_i11];\n      x.push(r * Math.cos(0.9 * Math.PI / 4));\n      y.push(r * Math.sin(0.9 * Math.PI / 4));\n    }\n\n    var openedInterpolationIndeces = [[2, 3, 4], [2, 3, 4, 5, 6]],\n        closedInterpolationIndeces = [[0, 1, 2], [0, 1, 2]],\n        flatInterpolationIndeces = [[5, 4], [7, 6]],\n        interpolationPoints = [{\n      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0.000, 0.286, 0.632, 0.815, 0.997], [0.000, 0.279, 0.623, 0.806, 0.988], [0.000, 0.126, 0.411, 0.593, 0.774], [0, 0, 0, 0, 0], x],\n      y: [[0, 0, 0, 0, 0], [0.000, 0.030, 0.010, 0.002, 0.000], [0.000, 0.060, 0.017, 0.004, 0.000], [0.000, 0.259, 0.440, 0.446, 0.429], [0, 0.2877, 0.6347, 0.8174, 1.0000], y]\n    }, {\n      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0.000, 0.286, 0.632, 0.815, 0.997], [0.000, 0.279, 0.623, 0.806, 0.988], [0.000, 0.233, 0.563, 0.746, 0.927], [0.000, 0.144, 0.433, 0.613, 0.796], [0.000, 0.070, 0.288, 0.455, 0.626], [0, 0, 0, 0, 0], x],\n      y: [[0, 0, 0, 0, 0], [0.000, 0.030, 0.010, 0.002, 0.000], [0.000, 0.060, 0.017, 0.004, 0.000], [0.000, 0.168, 0.269, 0.270, 0.255], [0.000, 0.245, 0.435, 0.458, 0.460], [0.000, 0.278, 0.544, 0.614, 0.673], [0, 0.2877, 0.6347, 0.8174, 1.0000], y]\n    }];\n\n    return {\n      interpolationPoints: interpolationPoints,\n      openedInterpolationIndeces: openedInterpolationIndeces,\n      closedInterpolationIndeces: closedInterpolationIndeces,\n      flatInterpolationIndeces: flatInterpolationIndeces\n    };\n  };\n\n  return SheetBlock;\n}();\n\nexports.default = SheetBlock;\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\nexports.props = props;\nfunction props() {\n  // const props = {\n  //   height,\n  //   width,\n  //   gravity,\n  //   injector,\n  //   cachedPages,\n  //   renderInactivePages,\n  //   renderWhileFlipping,\n  //   pagesForPredicting,\n  //   preloadPages,\n  //   sheet: {\n  //     startVelocity,\n  //     cornerDeviation,\n  //     flexibility,\n  //     flexibleCorner,\n  //     bending,\n  //     wave,\n  //     shape,\n  //     widthTexels,\n  //     heightTexels,\n  //     color,\n  //     sideTexture\n  //   },\n  //   cover: {\n  //     ...sheet,\n  //     padding,\n  //     binderTexture,\n  //     depth,\n  //     mass\n  //   },\n  //   page: {\n  //     ...sheet,\n  //     depth,\n  //     mass\n  //   }\n  // };\n\n  return {\n    height: 0.297,\n    width: 0.21,\n    gravity: 1,\n    cachedPages: 50,\n    renderInactivePages: true,\n    renderInactivePagesOnMobile: false,\n    renderWhileFlipping: false,\n    pagesForPredicting: 5,\n    preloadPages: 5,\n    rtl: false,\n    sheet: {\n      startVelocity: 0.9,\n      cornerDeviation: 0.25,\n      flexibility: 10,\n      flexibleCorner: 0.5,\n      bending: 11,\n      wave: 0.5,\n      shape: 0,\n      widthTexels: 5 * 210,\n      heightTexels: 5 * 297,\n      color: 0xFFFFFF\n    },\n    cover: {\n      binderTexture: '',\n      depth: 0.0003,\n      padding: 0,\n      mass: 0.003\n    },\n    page: {\n      depth: 0.0001,\n      mass: 0.001\n    },\n    cssLayerProps: {\n      width: 1024\n    }\n  };\n};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\nexports.CSS3DSprite = exports.CSS3DObject = undefined;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n_libs.THREE.CSS3DObject = function (_THREE$Object3D) {\n  _inherits(CSS3DObject, _THREE$Object3D);\n\n  function CSS3DObject() {\n    var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n\n    _classCallCheck(this, CSS3DObject);\n\n    var _this = _possibleConstructorReturn(this, _THREE$Object3D.call(this));\n\n    if (element) {\n      _this.set(element);\n    }\n    return _this;\n  }\n\n  CSS3DObject.prototype.set = function set(element) {\n    this.element = element;\n    this.element.style.position = 'absolute';\n\n    this.addEventListener('removed', function () {\n      if (this.element.parentNode !== null) {\n        this.element.parentNode.removeChild(this.element);\n      }\n    });\n  };\n\n  return CSS3DObject;\n}(_libs.THREE.Object3D);\n\n_libs.THREE.CSS3DSprite = function (_THREE$CSS3DObject) {\n  _inherits(CSS3DSprite, _THREE$CSS3DObject);\n\n  function CSS3DSprite(element) {\n    _classCallCheck(this, CSS3DSprite);\n\n    return _possibleConstructorReturn(this, _THREE$CSS3DObject.call(this, element));\n  }\n\n  return CSS3DSprite;\n}(_libs.THREE.CSS3DObject);\n\n_libs.THREE.CSS3DRenderer = function CSS3DRenderer() {\n  _classCallCheck(this, CSS3DRenderer);\n\n  var _width, _height;\n  var _widthHalf, _heightHalf;\n\n  var matrix = new _libs.THREE.Matrix4();\n\n  var cache = {\n    camera: { fov: 0, style: '' },\n    objects: {}\n  };\n\n  var domElement = document.createElement('div');\n  domElement.style.overflow = 'hidden';\n\n  this.domElement = domElement;\n\n  var cameraElement = document.createElement('div');\n\n  cameraElement.style.WebkitTransformStyle = 'preserve-3d';\n  cameraElement.style.MozTransformStyle = 'preserve-3d';\n  cameraElement.style.transformStyle = 'preserve-3d';\n\n  domElement.appendChild(cameraElement);\n\n  var isIE = /Trident/i.test(navigator.userAgent);\n\n  this.setClearColor = function () {};\n\n  this.getSize = function () {\n\n    return {\n      width: _width,\n      height: _height\n    };\n  };\n\n  this.setSize = function (width, height) {\n\n    _width = width;\n    _height = height;\n    _widthHalf = _width / 2;\n    _heightHalf = _height / 2;\n\n    domElement.style.width = width + 'px';\n    domElement.style.height = height + 'px';\n\n    cameraElement.style.width = width + 'px';\n    cameraElement.style.height = height + 'px';\n  };\n\n  function epsilon(value) {\n\n    return Math.abs(value) < 1e-10 ? 0 : value;\n  }\n\n  function getCameraCSSMatrix(matrix) {\n\n    var elements = matrix.elements;\n\n    return 'matrix3d(' + epsilon(elements[0]) + ',' + epsilon(-elements[1]) + ',' + epsilon(elements[2]) + ',' + epsilon(elements[3]) + ',' + epsilon(elements[4]) + ',' + epsilon(-elements[5]) + ',' + epsilon(elements[6]) + ',' + epsilon(elements[7]) + ',' + epsilon(elements[8]) + ',' + epsilon(-elements[9]) + ',' + epsilon(elements[10]) + ',' + epsilon(elements[11]) + ',' + epsilon(elements[12]) + ',' + epsilon(-elements[13]) + ',' + epsilon(elements[14]) + ',' + epsilon(elements[15]) + ')';\n  }\n\n  function getObjectCSSMatrix(matrix, cameraCSSMatrix) {\n\n    var elements = matrix.elements;\n    var matrix3d = 'matrix3d(' + epsilon(elements[0]) + ',' + epsilon(elements[1]) + ',' + epsilon(elements[2]) + ',' + epsilon(elements[3]) + ',' + epsilon(-elements[4]) + ',' + epsilon(-elements[5]) + ',' + epsilon(-elements[6]) + ',' + epsilon(-elements[7]) + ',' + epsilon(elements[8]) + ',' + epsilon(elements[9]) + ',' + epsilon(elements[10]) + ',' + epsilon(elements[11]) + ',' + epsilon(elements[12]) + ',' + epsilon(elements[13]) + ',' + epsilon(elements[14]) + ',' + epsilon(elements[15]) + ')';\n\n    if (isIE) {\n\n      return 'translate(-50%,-50%)' + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)' + cameraCSSMatrix + matrix3d;\n    }\n\n    return 'translate(-50%,-50%)' + matrix3d;\n  }\n\n  function renderObject(object, camera, cameraCSSMatrix) {\n\n    if (object instanceof _libs.THREE.CSS3DObject) {\n\n      var style;\n\n      if (object instanceof _libs.THREE.CSS3DSprite) {\n        matrix.copy(camera.matrixWorldInverse);\n        matrix.transpose();\n        matrix.copyPosition(object.matrixWorld);\n        matrix.scale(object.scale);\n\n        matrix.elements[3] = 0;\n        matrix.elements[7] = 0;\n        matrix.elements[11] = 0;\n        matrix.elements[15] = 1;\n\n        style = getObjectCSSMatrix(matrix, cameraCSSMatrix);\n      } else {\n\n        style = getObjectCSSMatrix(object.matrixWorld, cameraCSSMatrix);\n      }\n\n      var element = object.element;\n      var cachedStyle = cache.objects[object.id] && cache.objects[object.id].style;\n\n      if (cachedStyle === undefined || cachedStyle !== style) {\n        element.style.WebkitTransform = style;\n        element.style.MozTransform = style;\n        element.style.transform = style;\n\n        cache.objects[object.id] = { style: style };\n        if (isIE) {\n          cache.objects[object.id].distanceToCameraSquared = getDistanceToSquared(camera, object);\n        }\n      }\n\n      if (element.parentNode !== cameraElement) {\n        cameraElement.appendChild(element);\n      }\n    }\n\n    for (var i = 0, l = object.children.length; i < l; i++) {\n\n      renderObject(object.children[i], camera, cameraCSSMatrix);\n    }\n  }\n\n  var getDistanceToSquared = function () {\n\n    var a = new _libs.THREE.Vector3();\n    var b = new _libs.THREE.Vector3();\n\n    return function (object1, object2) {\n\n      a.setFromMatrixPosition(object1.matrixWorld);\n      b.setFromMatrixPosition(object2.matrixWorld);\n\n      return a.distanceToSquared(b);\n    };\n  }();\n\n  function zOrder(scene) {\n\n    var order = Object.keys(cache.objects).sort(function (a, b) {\n\n      return cache.objects[a].distanceToCameraSquared - cache.objects[b].distanceToCameraSquared;\n    });\n    var zMax = order.length;\n\n    scene.traverse(function (object) {\n\n      var index = order.indexOf(object.id + '');\n\n      if (index !== -1) {\n\n        object.element.style.zIndex = zMax - index;\n      }\n    });\n  }\n\n  this.render = function (scene, camera) {\n\n    var fov = camera.projectionMatrix.elements[5] * _heightHalf;\n\n    if (cache.camera.fov !== fov) {\n\n      domElement.style.WebkitPerspective = fov + 'px';\n      domElement.style.MozPerspective = fov + 'px';\n      domElement.style.perspective = fov + 'px';\n\n      cache.camera.fov = fov;\n    }\n\n    scene.updateMatrixWorld();\n\n    if (camera.parent === null) camera.updateMatrixWorld();\n\n    var cameraCSSMatrix = 'translateZ(' + fov + 'px)' + getCameraCSSMatrix(camera.matrixWorldInverse);\n\n    var style = cameraCSSMatrix + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';\n\n    if (cache.camera.style !== style && !isIE) {\n\n      cameraElement.style.WebkitTransform = style;\n      cameraElement.style.MozTransform = style;\n      cameraElement.style.transform = style;\n\n      cache.camera.style = style;\n    }\n\n    renderObject(scene, camera, cameraCSSMatrix);\n\n    if (isIE) {\n\n      // IE10 and 11 does not support 'preserve-3d'.\n      // Thus, z-order in 3D will not work.\n      // We have to calc z-order manually and set CSS z-index for IE.\n      // FYI: z-index can't handle object intersection\n      zOrder(scene);\n    }\n  };\n};\n\nexports.default = _libs.THREE.CSS3DRenderer;\n\n\nvar _CSS3DObject = _libs.THREE.CSS3DObject,\n    _CSS3DSprite = _libs.THREE.CSS3DSprite;\nexports.CSS3DObject = _CSS3DObject;\nexports.CSS3DSprite = _CSS3DSprite;\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _CSS3DRenderer = __webpack_require__(12);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CSSLayer = function (_CSS3DObject) {\n  _inherits(CSSLayer, _CSS3DObject);\n\n  CSSLayer.init = function init(doc) {\n    var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 150;\n\n    CSSLayer.delay = delay;\n    CSSLayer.style = (0, _libs.$)('<style type=text/css>\\n      .css-layer {\\n    \\t\\topacity: 1;\\n    \\t\\ttransition: opacity ' + delay + 'ms ease-out;\\n        visibility: visible;\\n        overflow: hidden;\\n    \\t}\\n    \\t.css-layer.hidden {\\n    \\t\\ttransition: opacity ' + delay + 'ms ease-in, visibility ' + delay + 'ms step-end;\\n    \\t\\topacity: 0;\\n        visibility: hidden;\\n      }\\n    </style>').appendTo(doc.head);\n  };\n\n  CSSLayer.dispose = function dispose() {\n    CSSLayer.style.remove();\n  };\n\n  function CSSLayer(width, height, props) {\n    _classCallCheck(this, CSSLayer);\n\n    var _this = _possibleConstructorReturn(this, _CSS3DObject.call(this));\n\n    _this.props = props;\n    _this.jContainer = (0, _libs.$)('<div class=\"hidden css-layer\"></div>');\n    var widthPxs = props.width,\n        heightPxs = height / width * widthPxs;\n    _this.jContainer.width(widthPxs).height(heightPxs);\n    _this.scale.x /= widthPxs / width;\n    _this.scale.y /= widthPxs / width;\n\n    _this.setData();\n    _this.set(_this.jContainer[0]);\n    return _this;\n  }\n\n  CSSLayer.prototype.callInternal = function callInternal(name) {\n    if (this.object && this.object[name]) {\n      try {\n        this.object[name]();\n      } catch (e) {\n        console.error(e);\n      }\n    }\n  };\n\n  CSSLayer.prototype.dispose = function dispose() {\n    this.clearInternals();\n  };\n\n  CSSLayer.prototype.clearInternals = function clearInternals() {\n    this.callInternal('dispose');\n    !this.css || this.css.remove();\n    !this.html || this.html.remove();\n  };\n\n  CSSLayer.prototype.setData = function setData() {\n    var css = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var html = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var js = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n\n    this.clearInternals();\n\n    this.css = (0, _libs.$)('<style type=\"text/css\">' + css + '</style>').appendTo(this.jContainer);\n    this.html = (0, _libs.$)(html).appendTo(this.jContainer);\n    var init = eval(js);\n    if (init) {\n      this.object = init(this.jContainer, this.props) || {};\n    }\n  };\n\n  CSSLayer.prototype.pendedCall = function pendedCall(clb) {\n    var _this2 = this;\n\n    var timestamp = this.timestamp = Date.now();\n    setTimeout(function () {\n      if (timestamp === _this2.timestamp) {\n        clb();\n      }\n    }, CSSLayer.delay);\n  };\n\n  CSSLayer.prototype.isHidden = function isHidden() {\n    return this.jContainer.hasClass('hidden');\n  };\n\n  CSSLayer.prototype.hide = function hide() {\n    var _this3 = this;\n\n    var res = void 0;\n    if (!this.isHidden()) {\n      this.jContainer.addClass('hidden');\n      this.callInternal('hide');\n      res = new Promise(function (resolve) {\n        _this3.pendedCall(function () {\n          _this3.callInternal('hidden');\n          resolve();\n        });\n      });\n    } else {\n      res = Promise.resolve();\n    }\n    return res;\n  };\n\n  CSSLayer.prototype.show = function show() {\n    var _this4 = this;\n\n    var res = void 0;\n    if (this.isHidden()) {\n      this.jContainer.removeClass('hidden');\n      this.callInternal('show');\n      res = new Promise(function (resolve) {\n        _this4.pendedCall(function () {\n          _this4.callInternal('shown');\n          resolve();\n        });\n      });\n    } else {\n      res = Promise.resolve();\n    }\n    return res;\n  };\n\n  return CSSLayer;\n}(_CSS3DRenderer.CSS3DObject);\n\nexports.default = CSSLayer;\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\"use strict\";\n\"use strict\";\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Cache = function () {\n  function Cache() {\n    var maxSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Infinity;\n    var sizeof = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Cache.countSizeof;\n\n    _classCallCheck(this, Cache);\n\n    this.os = new Map();\n    this.sizeof = sizeof;\n    this.maxSize = maxSize;\n    this.size = 0;\n  }\n\n  Cache.prototype.forEach = function forEach(clb) {\n    this.os.forEach(function (v, k) {\n      return clb([k, v]);\n    });\n  };\n\n  Cache.countSizeof = function countSizeof(value) {\n    return 1;\n  };\n\n  Cache.prototype.remove = function remove(k) {\n    var res = false;\n    var v = this.os.get(k);\n    if (!v.locked || !v.locked(k)) {\n      this.size -= this.sizeof(v);\n      if (v.dispose) {\n        v.dispose();\n      }\n      this.os.delete(k);\n      res = true;\n    }\n    return res;\n  };\n\n  Cache.prototype.freeSpace = function freeSpace() {\n    var arr = [];\n    for (var _iterator = this.os, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var p = _ref;\n\n      arr.push({ timestamp: p[1].timestamp, key: p[0] });\n    }\n    arr.sort(function (a, b) {\n      return a.timestamp - b.timestamp;\n    });\n    for (var i = 0; i < arr.length && this.size > 3 * this.maxSize / 4; ++i) {\n      this.remove(arr[i].key);\n    }\n  };\n\n  Cache.prototype.dispose = function dispose() {\n    var arr = [];\n    for (var _iterator2 = this.os, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      if (_isArray2) {\n        if (_i2 >= _iterator2.length) break;\n        _ref2 = _iterator2[_i2++];\n      } else {\n        _i2 = _iterator2.next();\n        if (_i2.done) break;\n        _ref2 = _i2.value;\n      }\n\n      var p = _ref2;\n\n      arr.push({ v: p[1], k: p[0] });\n    }\n    for (var _iterator3 = arr, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n      var _ref3;\n\n      if (_isArray3) {\n        if (_i3 >= _iterator3.length) break;\n        _ref3 = _iterator3[_i3++];\n      } else {\n        _i3 = _iterator3.next();\n        if (_i3.done) break;\n        _ref3 = _i3.value;\n      }\n\n      var o = _ref3;\n\n      if (o.v.dispose) {\n        o.v.dispose();\n      }\n      this.os.delete(o.k);\n    }\n  };\n\n  Cache.recursionSizeof = function recursionSizeof(value) {\n    var size = 0;\n    if (value) {\n      ++size;\n      var len = value.length;\n      if (len === undefined) {\n        for (var p in value) {\n          if (value.hasOwnProperty(p)) {\n            size += Cache.recursionSizeof(value[p]);\n          }\n        }\n      } else {\n        size += len;\n      }\n    }\n    return size;\n  };\n\n  Cache.prototype.getTimestamp = function getTimestamp() {\n    return Date.now();\n  };\n\n  Cache.prototype.get = function get(key) {\n    var value = this.os.get(key);\n    if (value) {\n      value.timestamp = this.getTimestamp();\n    }\n    return value;\n  };\n\n  Cache.prototype.put = function put(key, value) {\n    value.timestamp = this.getTimestamp();\n    this.os.set(key, value);\n    this.size += this.sizeof(value);\n    if (this.size > this.maxSize) {\n      this.freeSpace();\n    }\n    return value;\n  };\n\n  return Cache;\n}();\n\nexports.default = Cache;\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Controller = function (_THREE$EventDispatche) {\n  _inherits(Controller, _THREE$EventDispatche);\n\n  function Controller() {\n    _classCallCheck(this, Controller);\n\n    return _possibleConstructorReturn(this, _THREE$EventDispatche.apply(this, arguments));\n  }\n\n  Controller.prototype.handleDefault = function handleDefault(id, e, data) {\n    //console.log(id+'-'+e.type+'-'+data);\n  };\n\n  Controller.prototype.dispatchAsync = function dispatchAsync(e) {\n    var _this2 = this;\n\n    Promise.resolve().then(function () {\n      return _this2.dispatchEvent(e);\n    });\n  };\n\n  Controller.prototype.dispose = function dispose() {};\n\n  return Controller;\n}(_libs.THREE.EventDispatcher);\n\nexports.default = Controller;\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _EventConverter2 = __webpack_require__(6);\n\nvar _EventConverter3 = _interopRequireDefault(_EventConverter2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CustomEventConverter = function (_EventConverter) {\n  _inherits(CustomEventConverter, _EventConverter);\n\n  // custom\n  // testIntersection(e, data);\n  // custom.object\n  // test(object);\n\n  function CustomEventConverter(wnd, doc) {\n    var customTest = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {\n      return false;\n    };\n    var eDoc = arguments[3];\n\n    _classCallCheck(this, CustomEventConverter);\n\n    var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));\n\n    _this.eDoc = eDoc;\n    _this.customTest = customTest;\n    _this.customs = [];\n    return _this;\n  }\n\n  CustomEventConverter.prototype.test = function test(object1, object2) {\n    return object1 && object2 ? this.customTest(object1, object2) : false;\n  };\n\n  CustomEventConverter.prototype.getCallback = function getCallback(object) {\n    return object.target.callback;\n  };\n\n  CustomEventConverter.prototype.addCustom = function addCustom(custom) {\n    this.customs.push(custom);\n  };\n\n  CustomEventConverter.prototype.getObject = function getObject(e, data) {\n    var object = void 0;\n    if (data.doc === this.eDoc) {\n      for (var _iterator = this.customs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var custom = _ref;\n\n        object = custom.testIntersection(e, data);\n        if (object) {\n          break;\n        }\n      }\n    }\n    return object;\n  };\n\n  return CustomEventConverter;\n}(_EventConverter3.default);\n\nexports.default = CustomEventConverter;\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _Utils = __webpack_require__(4);\n\nvar _Utils2 = _interopRequireDefault(_Utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Finder = function () {\n  Finder.isDelimetr = function isDelimetr(s) {\n    return s === Finder.DELIMITER;\n  };\n\n  Finder.prototype.merge = function merge() {\n    var as = [],\n        map = [],\n        strs = this.strs;\n    var p = 0;\n    for (var i = 0; i < strs.length; ++i) {\n      if (strs[i].length) {\n        map.push({\n          base: i,\n          offset: p\n        });\n        as.push(strs[i]);\n        p += strs[i].length;\n        if (i < strs.length - 1 && !Finder.isDelimetr(strs[i].charAt(strs[i].length - 1)) && !Finder.isDelimetr(strs[i + 1].charAt(0))) {\n          as.push(Finder.DELIMITER);\n          ++p;\n        }\n      }\n    }\n    this.map = map;\n    this.str = as.join('');\n  };\n\n  Finder.prototype.addHits = function addHits(p) {\n    var info = this.map[_Utils2.default.lowerBound(this.map, { offset: p }, function (a, b) {\n      return a.offset - b.offset;\n    })];\n    var chars = this.pattern.length,\n        i = info.base;\n    p -= info.offset;\n    while (chars) {\n      if (this.strs[i].length) {\n        var delimeter = i < this.strs.length - 1 && !Finder.isDelimetr(this.strs[i].charAt(this.strs[i].length - 1)) && !Finder.isDelimetr(this.strs[i + 1].charAt(0)),\n            length = Math.min(this.strs[i].length + (delimeter ? 1 : 0) - p, chars);\n        if (p < this.strs[i].length) {\n          this.hits.push({\n            index: i,\n            offset: p,\n            length: Math.min(length, this.strs[i].length - p)\n          });\n        }\n        chars -= length;\n        ++i;\n        p = 0;\n      }\n    }\n  };\n\n  Finder.prototype.addContext = function addContext(p) {\n    var f = p,\n        l = p + this.pattern.length - 1,\n        dels = this.props.contextLength,\n        prevDels = dels + 1;\n    while (dels && prevDels - dels) {\n      prevDels = dels;\n      if (dels % 2) {\n        for (var i = f - 2; i >= 0; --i) {\n          if (Finder.isDelimetr(this.str[i]) || i === 0) {\n            f = i === 0 ? 0 : i + 1;\n            --dels;\n            break;\n          }\n        }\n      } else {\n        for (var _i = l + 2; _i < this.str.length; ++_i) {\n          if (Finder.isDelimetr(this.str[_i]) || _i === this.str.length - 1) {\n            l = _i === this.str.length - 1 ? _i === this.str.length - 1 : _i - 1;\n            --dels;\n            break;\n          }\n        }\n      }\n    }\n    this.contexts.push(this.str.substr(f, l - f + 1));\n  };\n\n  Finder.prototype.getHits = function getHits() {\n    return this.hits;\n  };\n\n  Finder.prototype.getContexts = function getContexts() {\n    return this.contexts;\n  };\n\n  function Finder(strs, pattern, props) {\n    _classCallCheck(this, Finder);\n\n    this.props = _extends({}, Finder.defaults, props);\n    this.strs = strs;\n    var data = this.merge(strs);\n    this.hits = [];\n    this.contexts = [];\n    this.pattern = pattern.toLowerCase();\n    this.lstr = this.str.toLowerCase();\n    var p = 0;\n    while (true) {\n      p = this.lstr.indexOf(this.pattern, p);\n      if (p === -1) {\n        break;\n      } else {\n        this.addHits(p);\n        this.addContext(p);\n        p += this.pattern.length;\n      }\n    }\n  }\n\n  return Finder;\n}();\n\nFinder.DELIMITER = ' ';\nFinder.defaults = {\n  contextLength: 7,\n  hits: true,\n  contexts: true\n};\nexports.default = Finder;\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _Utils = __webpack_require__(4);\n\nvar _Utils2 = _interopRequireDefault(_Utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n_libs.PDFJS.workerSrc = (window.PDFJS_LOCALE ? PDFJS_LOCALE : {\"pdfJsWorker\":\"js/pdf.worker.js\",\"pdfJsCMapUrl\":\"cmaps/\"}).pdfJsWorker;\n_libs.PDFJS.cMapUrl = (window.PDFJS_LOCALE ? PDFJS_LOCALE : {\"pdfJsWorker\":\"js/pdf.worker.js\",\"pdfJsCMapUrl\":\"cmaps/\"}).pdfJsCMapUrl;\n_libs.PDFJS.cMapPacked = true;\n\nvar Pdf = function () {\n  function Pdf(src, loadingProgress) {\n    var _this = this;\n\n    _classCallCheck(this, Pdf);\n\n    this.src = _Utils2.default.normalizeUrl(src);\n    this.handlerQueue = [];\n    this.progresData = { loaded: -1, total: 1 };\n    this.loadingProgress = loadingProgress;\n\n    _libs.PDFJS.getDocument({\n      url: this.src,\n      rangeChunkSize: 512 * 1024\n    }, null, null, function (data) {\n      if (_this.loadingProgress) {\n        var cur = Math.floor(100 * data.loaded / data.total),\n            old = Math.floor(100 * _this.progresData.loaded / _this.progresData.total);\n        if (cur !== old) {\n          cur = isNaN(cur) ? 0 : cur;\n          cur = cur > 100 ? 100 : cur;\n          _this.loadingProgress(cur);\n        }\n      }\n      _this.progresData = data;\n    }).then(function (handler) {\n      if (handler.numPages > 1) {\n        Promise.all([handler.getPage(1), handler.getPage(2)]).then(function (pages) {\n          _this.init(handler, pages);\n        });\n      } else {\n        _this.init(handler);\n      }\n    });\n  }\n\n  Pdf.prototype.init = function init(handler, pages) {\n    this.handler = handler;\n    this.doubledPages = pages ? Math.abs(2 * Pdf.getPageSize(pages[0]).width - Pdf.getPageSize(pages[1]).width) / Pdf.getPageSize(pages[0]).width < 1e-4 : false;\n    var done = Promise.resolve(handler);\n\n    var _loop = function _loop() {\n      if (_isArray) {\n        if (_i >= _iterator.length) return 'break';\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) return 'break';\n        _ref = _i.value;\n      }\n\n      var clb = _ref;\n\n      done = done.then(function (handler) {\n        clb(handler);\n        return handler;\n      });\n    };\n\n    for (var _iterator = this.handlerQueue.reverse(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      var _ret = _loop();\n\n      if (_ret === 'break') break;\n    }\n  };\n\n  Pdf.prototype.getPageType = function getPageType(n) {\n    return !this.doubledPages || n === 0 || n === this.getPagesNum() - 1 ? 'full' : n & 1 ? 'left' : 'right';\n  };\n\n  Pdf.prototype.getPage = function getPage(n) {\n    return this.handler.getPage(this.doubledPages ? Math.ceil(n / 2) + 1 : n + 1);\n  };\n\n  Pdf.prototype.dispose = function dispose() {\n    this.handlerQueue.splice(0, this.handlerQueue.length);\n    delete this.handler;\n  };\n\n  Pdf.prototype.setLoadingProgressClb = function setLoadingProgressClb(clb) {\n    this.loadingProgress = clb;\n  };\n\n  Pdf.prototype.getPagesNum = function getPagesNum() {\n    return this.handler ? this.doubledPages ? 2 * (this.handler.numPages - 1) : this.handler.numPages : undefined;\n  };\n\n  Pdf.getPageSize = function getPageSize(page) {\n    return {\n      width: page.view[2] - page.view[0],\n      height: page.view[3] - page.view[1]\n    };\n  };\n\n  //   if(pages>1) {\n  //   handler.getPage(2).\n  //   then((page)=> {\n  //     const size1 = Pdf.getPageSize(page);\n  //     this.props.doubledPages = 2*size0.width===size1.width;\n  //     this.ready();\n  //   }).\n  //   catch(()=> this.ready());\n  // }\n  // else {\n\n  Pdf.prototype.getHandler = function getHandler(clb) {\n    if (this.handler) {\n      clb(this.handler);\n    } else {\n      this.handlerQueue.push(clb);\n    }\n  };\n\n  return Pdf;\n}();\n\nexports.default = Pdf;\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ThreeEventConverterFs = function () {\n  ThreeEventConverterFs.objectsTest = function objectsTest(object1, object2) {\n    return object1 && object2 ? object1.object === object2.object : false;\n  };\n\n  ThreeEventConverterFs.objectsAndFacesTest = function objectsAndFacesTest(object1, object2) {\n    return object1 && object2 ? object1.object === object2.object && object1.face.materialIndex === object2.face.materialIndex : false;\n  };\n\n  function ThreeEventConverterFs(visualWorld) {\n    var test = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ThreeEventConverterFs.objectsAndFacesTest;\n\n    _classCallCheck(this, ThreeEventConverterFs);\n\n    this.visual = visualWorld;\n    this.coords = new _libs.THREE.Vector2();\n    this.raycaster = this.visual.raycaster;\n    this.camera = this.visual.camera;\n    this.threes = [];\n    this.test = test;\n  }\n\n  ThreeEventConverterFs.prototype.addThree = function addThree(three) {\n    this.threes.push(three);\n  };\n\n  ThreeEventConverterFs.prototype.removeThree = function removeThree(three) {\n    var i = this.threes.indexOf(three);\n    if (~i) {\n      this.threes.splice(i, 1);\n    }\n  };\n\n  ThreeEventConverterFs.prototype.getObject = function getObject(e) {\n    this.setCoordsFromEvent(e);\n    this.raycaster.setFromCamera(this.coords, this.camera);\n    var intersects = this.raycaster.intersectObjects(this.threes);\n    return intersects[0];\n  };\n\n  return ThreeEventConverterFs;\n}();\n\nexports.default = ThreeEventConverterFs;\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _BaseMathUtils = __webpack_require__(2);\n\nvar _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ThreeUtils = function () {\n  function ThreeUtils() {\n    _classCallCheck(this, ThreeUtils);\n  }\n\n  ThreeUtils.vertices2UVs = function vertices2UVs(vertices, indeces, first, last, converClb) {\n    var r = [];\n    for (var i = first; i < last; ++i) {\n      var vis = [indeces[i].a, indeces[i].b, indeces[i].c];\n      for (var j = 0; j < vis.length; ++j) {\n        if (!r[vis[j]]) {\n          r[vis[j]] = converClb(vertices[vis[j]]);\n        }\n      }\n    }\n    return r;\n  };\n\n  ThreeUtils.computeFaceVertexUvs = function computeFaceVertexUvs(geometry, faces) {\n    var uvs = [ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, 0, faces[0], function (p) {\n      return new THREE.Vector2(p.x, 1 - p.z);\n    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[0], faces[1], function (p) {\n      return new THREE.Vector2(1 - p.x, 1 - p.z);\n    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[1], faces[2], function (p) {\n      return new THREE.Vector2(p.x, p.y);\n    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[2], faces[3], function (p) {\n      return new THREE.Vector2(1 - p.x, p.y);\n    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[3], faces[4], function (p) {\n      return new THREE.Vector2(p.z, p.y);\n    }), ThreeUtils.vertices2UVs(geometry.vertices, geometry.faces, faces[4], geometry.faces.length, function (p) {\n      return new THREE.Vector2(1 - p.z, p.y);\n    })];\n\n    var uvsi = 0;\n    for (var i = 0; i < geometry.faces.length; ++i) {\n      uvsi += faces[uvsi] === i;\n      var f = geometry.faces[i];\n      f.materialIndex = uvsi;\n      geometry.faceVertexUvs[0][i] = [uvs[uvsi][f.a], uvs[uvsi][f.b], uvs[uvsi][f.c]];\n    }\n  };\n\n  ThreeUtils.createMarker = function createMarker(p, c, size) {\n    var marker = new THREE.Mesh(new THREE.SphereGeometry(size), new THREE.MeshPhongMaterial({ color: c }));\n    marker.position.set(p.x, p.y, p.z);\n    return marker;\n  };\n\n  ThreeUtils.findUvTris = function findUvTris(geometry, ps, first, last) {\n    var res = [];\n    for (var _iterator = ps, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var p = _ref;\n\n      var found = false;\n      for (var i = first; i < last && !found; ++i) {\n        var tri = geometry.faceVertexUvs[0][i];\n        if (_BaseMathUtils2.default.isInsideConvPoly(tri, p)) {\n          res.push({\n            coefs: _BaseMathUtils2.default.computeInterpCoefs(tri, p),\n            i: i\n          });\n          found = true;\n        }\n      }\n      if (!found) {\n        console.error('Bad point');\n        res.push(undefined);\n      }\n    }\n    return res;\n  };\n\n  ThreeUtils.findInternalVertices = function findInternalVertices(geometry, ps, first, last) {\n    var res = {};\n    for (var i = first; i < last; ++i) {\n      var tri = geometry.faceVertexUvs[0][i],\n          f = geometry.faces[i],\n          vs = [f.a, f.b, f.c];\n      for (var j = 0; j < tri.length; ++j) {\n        if (res[vs[j]] === undefined && _BaseMathUtils2.default.isInsidePoly(ps, tri[j])) {\n          res[vs[j]] = {\n            p: tri[j],\n            i: vs[j],\n            n: f.vertexNormals[j]\n          };\n        }\n      }\n    }\n    return Object.values(res);\n  };\n\n  return ThreeUtils;\n}();\n\nexports.default = ThreeUtils;\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\"use strict\";\n\"use strict\";\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Target = function () {\n  function Target() {\n    _classCallCheck(this, Target);\n  }\n\n  Target.test = function test(object1, object2) {\n    return object1.target === object2.target;\n  };\n\n  return Target;\n}();\n\nexports.default = Target;\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(1);\n\nvar _Detector = __webpack_require__(45);\n\nvar _Detector2 = _interopRequireDefault(_Detector);\n\nvar _VisualWorld = __webpack_require__(66);\n\nvar _VisualWorld2 = _interopRequireDefault(_VisualWorld);\n\nvar _PdfLinksHandler = __webpack_require__(35);\n\nvar _PdfLinksHandler2 = _interopRequireDefault(_PdfLinksHandler);\n\nvar _Book = __webpack_require__(26);\n\nvar _Book2 = _interopRequireDefault(_Book);\n\nvar _BookView = __webpack_require__(29);\n\nvar _BookView2 = _interopRequireDefault(_BookView);\n\nvar _BookController = __webpack_require__(27);\n\nvar _BookController2 = _interopRequireDefault(_BookController);\n\nvar _PdfBookPropsBuilder = __webpack_require__(34);\n\nvar _PdfBookPropsBuilder2 = _interopRequireDefault(_PdfBookPropsBuilder);\n\nvar _ClbBookPropsBuilder = __webpack_require__(30);\n\nvar _ClbBookPropsBuilder2 = _interopRequireDefault(_ClbBookPropsBuilder);\n\nvar _LoadingController = __webpack_require__(53);\n\nvar _LoadingController2 = _interopRequireDefault(_LoadingController);\n\nvar _Search = __webpack_require__(58);\n\nvar _Search2 = _interopRequireDefault(_Search);\n\nvar _Bookmarks = __webpack_require__(44);\n\nvar _Bookmarks2 = _interopRequireDefault(_Bookmarks);\n\nvar _Thumbnails = __webpack_require__(63);\n\nvar _Thumbnails2 = _interopRequireDefault(_Thumbnails);\n\nvar _TocController = __webpack_require__(40);\n\nvar _TocController2 = _interopRequireDefault(_TocController);\n\nvar _BookPrinter = __webpack_require__(28);\n\nvar _BookPrinter2 = _interopRequireDefault(_BookPrinter);\n\nvar _AutoNavigator = __webpack_require__(24);\n\nvar _AutoNavigator2 = _interopRequireDefault(_AutoNavigator);\n\nvar _SoundsEnviroment = __webpack_require__(39);\n\nvar _SoundsEnviroment2 = _interopRequireDefault(_SoundsEnviroment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_libs.$.fn.FlipBook = function (options) {\n  var scene = {\n    dispose: function dispose() {\n      if (this.ready) {\n        !scene.pdfLinksHandler || scene.pdfLinksHandler.dispose();\n        delete scene.pdfLinksHandler;\n        scene.sounds.dispose();\n        delete scene.sounds;\n        scene.tocCtrl.dispose();\n        delete scene.tocCtrl;\n        scene.thumbnails.dispose();\n        delete scene.thumbnails;\n        !scene.bookmarks || scene.bookmarks.dispose();\n        delete scene.bookmarks;\n        scene.ctrl.dispose();\n        delete scene.ctrl;\n        scene.bookPrinter.dispose();\n        delete scene.bookPrinter;\n        scene.book.dispose();\n        delete scene.book;\n        scene.propsBuilder.dispose();\n        delete scene.propsBuilder;\n        delete scene.bookBuilder;\n        scene.visual.dispose();\n        delete scene.visual;\n        scene.view.dispose();\n        delete scene.view;\n        delete scene.dispose;\n      } else {\n        this.pendingDispose = true;\n      }\n    }\n  };\n  options = _extends({}, options);\n  scene.view = new _BookView2.default(this.length ? this[0] : (0, _libs.$)('<div>').appendTo('body'), function () {\n    if (!_Detector2.default.webgl) {\n      _Detector2.default.addGetWebGLMessage({ parent: scene.view.getView() });\n    } else {\n      scene.loadingCtrl = new _LoadingController2.default(scene.view, true, function (progress) {\n        return progress === 0 ? (0, _libs.tr)('Please wait... the Application is Loading') : (0, _libs.tr)('PDF is Loading:') + ' ' + progress + '%';\n      });\n      scene.visual = new _VisualWorld2.default(scene.view.getContainer().ownerDocument.defaultView, scene.view.getContainer().ownerDocument, scene.view.getView());\n      scene.bookBuilder = function (props, sheets, pageCallback) {\n        props.cssLayerProps = _extends({}, props.cssLayerProps, {\n          scene: scene\n        });\n        if (options.propertiesCallback) {\n          props = options.propertiesCallback(props);\n        }\n        scene.book = new _Book2.default(scene.visual, sheets, pageCallback, props);\n        scene.bookPrinter = new _BookPrinter2.default(scene.visual, scene.book, (options.template || {}).printStyle);\n        scene.loadingCtrl.dispose();\n        delete scene.loadingCtrl;\n        scene.ctrl = new _BookController2.default(scene.book, scene.view, options.controlsProps);\n        scene.book.setInjector(function (w) {\n          w.jQuery = w.$ = _libs.$;\n          w.book = scene.book;\n          w.bookCtrl = scene.ctrl;\n          if (props.injector) {\n            props.injector(w);\n          }\n        });\n        scene.view.addHandler(scene.ctrl);\n        scene.ctrl.setPrinter(scene.bookPrinter);\n        var test = pageCallback(0);\n\n        scene.search = new _Search2.default(scene.view.getSearchView(), scene.book.getPages());\n        scene.search.onQuery = scene.book.setQuery.bind(scene.book);\n        scene.book.addEventListener('searchResults', function (e) {\n          scene.search.setResults(e.results, e.lastPage);\n        });\n\n        scene.thumbnails = new _Thumbnails2.default(scene.visual, scene.view.getThumbnailsView(), pageCallback, 2 * (sheets + 2), { kWtoH: props.width / props.height });\n        scene.tocCtrl = new _TocController2.default(scene.view, scene.ctrl);\n        scene.tocCtrl.setThumbnails(scene.thumbnails);\n        scene.tocCtrl.setSearch(scene.search);\n        scene.ctrl.setTocCtrl(scene.tocCtrl);\n        scene.view.addHandler(scene.tocCtrl);\n\n        if (test.type === 'pdf') {\n          scene.pdfLinksHandler = new _PdfLinksHandler2.default(test.src, scene.ctrl, scene.visual.element);\n          scene.book.addEventListener('pdfAnnotation', scene.pdfLinksHandler.handleEvent.bind(scene.pdfLinksHandler));\n          test.src.getHandler(function (handler) {\n            handler.getOutline().then(function (outline) {\n              scene.bookmarks = new _Bookmarks2.default(scene.view.getBookmarksView(), outline);\n              scene.tocCtrl.setBookmarks(scene.bookmarks, test.src);\n            });\n          });\n          if (options.pdfLinks && options.pdfLinks.handler) {\n            scene.pdfLinksHandler.setHandler(options.pdfLinks.handler);\n          }\n        }\n\n        scene.sounds = new _SoundsEnviroment2.default(options.template);\n        scene.ctrl.setSounds(scene.sounds);\n        scene.sounds.subscribeFlips(scene.ctrl);\n\n        scene.ready = true;\n        new _AutoNavigator2.default(scene.visual, scene.ctrl, options.autoNavigation).dispose();\n        if (options.ready) {\n          options.ready(scene);\n        }\n        if (scene.pendingDispose) {\n          scene.dispose();\n        }\n      };\n      if (options.pdf) {\n        scene.propsBuilder = new _PdfBookPropsBuilder2.default(options.pdf, scene.bookBuilder);\n        scene.propsBuilder.pdf.setLoadingProgressClb(scene.loadingCtrl.setProgress.bind(scene.loadingCtrl));\n      } else if (options.pageCallback) {\n        scene.propsBuilder = new _ClbBookPropsBuilder2.default(scene.visual, options.pageCallback, options.pages, scene.bookBuilder);\n      } else {\n        scene.propsBuilder = new _ClbBookPropsBuilder2.default(scene.visual, _Book2.default.pageCallback, 6, scene.bookBuilder);\n      }\n    }\n  }, options.template);\n  return scene;\n};\n\n(0, _libs.$)(function () {\n  var containers = (0, _libs.$)('.flip-book-container');\n  for (var i = 0; i < containers.length; ++i) {\n    var jContainer = (0, _libs.$)(containers[i]),\n        src = jContainer.attr('src');\n    if (!!src) {\n      jContainer.FlipBook({ pdf: src });\n    }\n  }\n});\n\nwindow.jQuery = window.$ = _libs.$;\n\n/***/ },\n/* 23 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nif (!Array.prototype.fill) {\n  Array.prototype.fill = function (value) {\n\n    // Шаги 1-2.\n    if (this == null) {\n      throw new TypeError('this is null or not defined');\n    }\n\n    var O = Object(this);\n\n    // Шаги 3-5.\n    var len = O.length >>> 0;\n\n    // Шаги 6-7.\n    var start = arguments[1];\n    var relativeStart = start >> 0;\n\n    // Шаг 8.\n    var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len);\n\n    // Шаги 9-10.\n    var end = arguments[2];\n    var relativeEnd = end === undefined ? len : end >> 0;\n\n    // Шаг 11.\n    var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len);\n\n    // Шаг 12.\n    while (k < final) {\n      O[k] = value;\n      k++;\n    }\n\n    // Шаг 13.\n    return O;\n  };\n}\n\nif (!Array.prototype.find) {\n  Object.defineProperty(Array.prototype, 'find', {\n    value: function value(predicate) {\n      'use strict';\n\n      if (this == null) {\n        throw new TypeError('Array.prototype.find called on null or undefined');\n      }\n      if (typeof predicate !== 'function') {\n        throw new TypeError('predicate must be a function');\n      }\n      var list = Object(this);\n      var length = list.length >>> 0;\n      var thisArg = arguments[1];\n      var value;\n\n      for (var i = 0; i < length; i++) {\n        value = list[i];\n        if (predicate.call(thisArg, value, i, list)) {\n          return value;\n        }\n      }\n      return undefined;\n    }\n  });\n}\n\nif (!Array.prototype.findIndex) {\n  Array.prototype.findIndex = function (predicate) {\n    if (this == null) {\n      throw new TypeError('Array.prototype.findIndex called on null or undefined');\n    }\n    if (typeof predicate !== 'function') {\n      throw new TypeError('predicate must be a function');\n    }\n    var list = Object(this);\n    var length = list.length >>> 0;\n    var thisArg = arguments[1];\n    var value;\n\n    for (var i = 0; i < length; i++) {\n      value = list[i];\n      if (predicate.call(thisArg, value, i, list)) {\n        return i;\n      }\n    }\n    return -1;\n  };\n}\n\nif (!Object.values) {\n  Object.values = function values(O) {\n    return Object.keys(O).map(function (name) {\n      return O[name];\n    }) || [];\n  };\n}\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar AutoNavigator = function () {\n  function AutoNavigator(context, bookCtrl) {\n    var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    _classCallCheck(this, AutoNavigator);\n\n    props = _extends({}, props, {\n      urlParam: props.urlParam || 'fb3d-page',\n      navigates: props.navigates === undefined ? 1 : props.navigates\n    });\n    this.props = props;\n    this.context = context;\n    this.bookCtrl = bookCtrl;\n    this.urlParam = props.urlParam;\n    this.wnd = context.wnd;\n\n    this.wnd.fb3d = _extends({}, this.wnd.fb3d);\n    this.wnd.fb3d.navigator = _extends({}, this.wnd.fb3d.navigator);\n    this.navigator = this.wnd.fb3d.navigator[this.urlParam] = _extends({}, this.wnd.fb3d.navigator[this.urlParam]);\n    this.navigator.instances = (this.navigator.instances || 0) + 1;\n\n    if (this.navigator.instances <= this.props.navigates) {\n      this.bookCtrl.goToPage(this.getPageNumber());\n    }\n  }\n\n  AutoNavigator.prototype.dispose = function dispose() {};\n\n  AutoNavigator.prototype.getParameterByName = function getParameterByName(name, url) {\n    if (!url) {\n      url = window.location.href;\n    }\n    name = name.replace(/[\\[\\]]/g, '\\\\$&');\n    var regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'),\n        results = regex.exec(url);\n    if (!results) return null;\n    if (!results[2]) return '';\n    return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n  };\n\n  AutoNavigator.prototype.getPageNumber = function getPageNumber() {\n    var number = this.getParameterByName(this.urlParam);\n    number = parseInt(number);\n    if (isNaN(number)) {\n      number = 1;\n    }\n    return number - 1;\n  };\n\n  return AutoNavigator;\n}();\n\nexports.default = AutoNavigator;\n\n/***/ },\n/* 25 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(1);\n\nvar _MathUtils = __webpack_require__(3);\n\nvar _MathUtils2 = _interopRequireDefault(_MathUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Binder = function () {\n  function Binder(visual, p) {\n    var _this = this;\n\n    _classCallCheck(this, Binder);\n\n    this.visual = visual;\n    this.p = _extends({}, p, {\n      backSize: 2 * p.cover.depth + p.sheets * p.page.depth\n    });\n    this.OZ = new _libs.THREE.Vector3(0, 0, 1);\n\n    this.backG = new _libs.THREE.BoxGeometry(p.cover.depth, this.p.backSize, p.cover.height);\n\n    this.materials = [new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color }), new _libs.THREE.MeshPhongMaterial({ color: p.cover.color })];\n\n    var backM = new _libs.THREE.Mesh(this.backG, new _libs.THREE.MeshFaceMaterial(this.materials));\n\n    if (p.cover.binderTexture !== '') {\n      this.visual.textureLoader.load(p.cover.binderTexture, function (texture) {\n        _this.materials[1].color.setHex(0xFFFFFF);\n        _this.materials[1].map = texture;\n        texture.minFilter = _libs.THREE.LinearFilter;\n        texture.needsUpdate = true;\n        _this.materials[1].needsUpdate = true;\n      });\n    }\n\n    this.three = new _libs.THREE.Object3D();\n    this.back = new _libs.THREE.Object3D();\n    this.backRT = new _libs.THREE.Object3D();\n    this.backRR = new _libs.THREE.Object3D();\n    this.backLT = new _libs.THREE.Object3D();\n    this.backLR = new _libs.THREE.Object3D();\n    this.leftPivot = new _libs.THREE.Object3D();\n    this.rightPivot = new _libs.THREE.Object3D();\n\n    this.back.add(backM);\n    this.back.add(this.leftPivot);\n    this.back.add(this.rightPivot);\n    this.backRT.add(this.back);\n    this.backRR.add(this.backRT);\n    this.backLT.add(this.backRR);\n    this.backLR.add(this.backLT);\n    this.three.add(this.backLR);\n  }\n\n  Binder.prototype.dispose = function dispose() {\n    for (var _iterator = this.materials, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var m = _ref;\n\n      if (m.map) {\n        m.map = null;\n        m.needsUpdate = true;\n      }\n      m.dispose();\n    }\n    delete this.materials;\n    this.backG.dispose();\n  };\n\n  Binder.prototype.set = function set(angle) {\n    var right = void 0,\n        left = void 0;\n    if (angle > Math.PI / 2) {\n      right = Math.PI / 2;\n      left = angle - Math.PI / 2;\n    } else {\n      right = angle;\n      left = 0;\n    }\n    var p = this.p,\n        tr1 = { x: -0.5 * p.cover.depth, y: 0.5 * p.backSize - p.cover.depth };\n    this.backRT.position.set(tr1.x, tr1.y, 0);\n    this.backRR.position.set(-tr1.x, -tr1.y, 0);\n    this.backRR.quaternion.setFromAxisAngle(this.OZ, right);\n\n    var tr2 = { x: p.backSize - 2 * p.cover.depth - 0.5 * p.cover.depth, y: 0.5 * p.backSize - p.cover.depth };\n    this.backLT.position.set(tr2.x, tr2.y, 0);\n    this.backLR.position.set(-tr2.x, -tr2.y, 0);\n    this.backLR.quaternion.setFromAxisAngle(this.OZ, left);\n  };\n\n  Binder.prototype.setLeft = function setLeft(angle) {\n    var PI = Math.PI;\n    this.leftPivot.position.set(_MathUtils2.default.interpolateLinear([-PI, -PI / 2], [0, this.p.cover.depth], angle), 0.5 * this.p.backSize - 0.5 * this.p.cover.depth, 0);\n    this.leftPivot.quaternion.setFromAxisAngle(this.OZ, angle);\n  };\n\n  Binder.prototype.setRight = function setRight(angle) {\n    var PI = Math.PI;\n    this.rightPivot.position.set(_MathUtils2.default.interpolateLinear([-PI / 2, 0], [this.p.cover.depth, 0], angle), -0.5 * this.p.backSize + 0.5 * this.p.cover.depth, 0);\n    this.rightPivot.quaternion.setFromAxisAngle(this.OZ, angle);\n  };\n\n  Binder.prototype.joinLeftCover = function joinLeftCover(cover) {\n    cover.three.position.set(0, -0.5 * this.p.cover.depth, 0);\n    this.leftPivot.add(cover.three);\n  };\n\n  Binder.prototype.disconnectLeftCover = function disconnectLeftCover(cover) {\n    this.leftPivot.remove(cover.three);\n  };\n\n  Binder.prototype.joinRightCover = function joinRightCover(cover) {\n    cover.three.position.set(0, -0.5 * this.p.cover.depth, 0);\n    this.rightPivot.add(cover.three);\n  };\n\n  Binder.prototype.disconnectRightCover = function disconnectRightCover(cover) {\n    this.rightPivot.remove(cover.three);\n  };\n\n  return Binder;\n}();\n\nexports.default = Binder;\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(1);\n\nvar _book = __webpack_require__(11);\n\nvar _GraphUtils = __webpack_require__(7);\n\nvar _GraphUtils2 = _interopRequireDefault(_GraphUtils);\n\nvar _Binder = __webpack_require__(25);\n\nvar _Binder2 = _interopRequireDefault(_Binder);\n\nvar _Cover = __webpack_require__(31);\n\nvar _Cover2 = _interopRequireDefault(_Cover);\n\nvar _SheetBlock = __webpack_require__(10);\n\nvar _SheetBlock2 = _interopRequireDefault(_SheetBlock);\n\nvar _SheetPhysics = __webpack_require__(38);\n\nvar _SheetPhysics2 = _interopRequireDefault(_SheetPhysics);\n\nvar _PageManager = __webpack_require__(33);\n\nvar _PageManager2 = _interopRequireDefault(_PageManager);\n\nvar _CSSLayer = __webpack_require__(13);\n\nvar _CSSLayer2 = _interopRequireDefault(_CSSLayer);\n\nvar _CssLayersManager = __webpack_require__(32);\n\nvar _CssLayersManager2 = _interopRequireDefault(_CssLayersManager);\n\nvar _SearchEngine = __webpack_require__(36);\n\nvar _SearchEngine2 = _interopRequireDefault(_SearchEngine);\n\nvar _CustomEventConverter = __webpack_require__(16);\n\nvar _CustomEventConverter2 = _interopRequireDefault(_CustomEventConverter);\n\nvar _CircleTarget = __webpack_require__(68);\n\nvar _CircleTarget2 = _interopRequireDefault(_CircleTarget);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Book = function (_THREE$EventDispatche) {\n  _inherits(Book, _THREE$EventDispatche);\n\n  // pageCallback samples\n\n  // (n)=> ({\n  //   type: 'image',\n  //   src: 'sample.png',\n  //   interactive: false\n  // });\n  //\n  // (n)=> ({\n  //   type: 'html',\n  //   src: 'sample.html',\n  //   interactive: true\n  // });\n  //\n  // const pdf = new Pdf('sample.pdf');\n  // (n)=> ({\n  //   type: 'pdf',\n  //   src: pdf,\n  //   interactive: false\n  // });\n\n  function Book(visual, sheets, pageCallback, props) {\n    _classCallCheck(this, Book);\n\n    var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));\n\n    sheets = Math.min(3, sheets);\n    visual.jContainer.append('\\n      <style type=\"text/css\">\\n        .demo-msg {\\n          position: absolute;\\n          top: 10px;\\n          right: 10px;\\n          padding: 10px;\\n          background-color: #ffe4e1;\\n          border-radius: 3px;\\n        }\\n      </style>\\n      <div class=\"demo-msg\">\\n        This is the demo version, only 10 pages are available. Use the <a href=\"http://3dflipbook.net/download-jq\" target=\"_blank\">full version</a>.\\n      </div>\\n    ');\n    _this.visual = visual;\n    _this.mouseController = true;\n    _this.p = _extends({}, Book.prepareProps(props), {\n      sheets: sheets,\n      pageCallback: pageCallback,\n      zoom: 1,\n      singlePage: false,\n      autoResolution: {\n        enable: false,\n        k: 1.5\n      }\n    });\n    _this.pageManager = new _PageManager2.default(visual, _this, _this.p);\n    _CSSLayer2.default.init(visual.doc);\n    _this.layerManager = new _CssLayersManager2.default(_this);\n    _this.searchEngine = new _SearchEngine2.default(pageCallback, 2 * (sheets + 2));\n    _this.searchEngine.onPageHitsChanged = function (page, query) {\n      _this.pageManager.refreshPageQuery(page, query);\n      _this.dispatchEvent({\n        type: 'searchResults',\n        results: _this.searchEngine.results,\n        lastPage: page,\n        query: query\n      });\n    };\n\n    _this.three = new _libs.THREE.Object3D();\n\n    _this.binder = new _Binder2.default(visual, _this.p);\n    _this.three.add(_this.binder.three);\n\n    _this.leftCover = new _Cover2.default(visual, _extends({}, _this.p, { setTexture: _this.setLeftCoverTexture.bind(_this) }), Math.PI / 2, 'opened');\n    _this.binder.joinLeftCover(_this.leftCover);\n    _this.subscribeSheetBlock(_this.leftCover, 0);\n    _this.rightCover = new _Cover2.default(visual, _extends({}, _this.p, { setTexture: _this.setRightCoverTexture.bind(_this) }), 0, 'closed');\n    _this.binder.joinRightCover(_this.rightCover);\n    _this.subscribeSheetBlock(_this.rightCover, 2 * (_this.p.sheets + 1));\n\n    _this.threeSheetBlocks = new _libs.THREE.Object3D();\n    _this.three.add(_this.threeSheetBlocks);\n    _this.threeSheetBlocks.position.set(0.5 * _this.p.cover.depth - 0.5 * sheets * _this.p.page.depth, -0.5 * sheets * _this.p.page.depth, 0);\n\n    _this.sheetBlocks = [];\n    if (sheets > 0) {\n      _this.addSheetBlock(0, new _SheetBlock2.default(visual, _extends({}, _this.p, { setTexture: _this.setPageTexture.bind(_this) }), 0, sheets, 0, 'closed'));\n    }\n\n    _this.angle = _this.p.rtl ? Math.PI : 0;\n    _this.closedAngle = 0;\n    _this.set(_this.angle, 0);\n    _this.lastMousePos = {\n      t: 0\n    };\n\n    _this.three.position.set(-0.5 * _this.p.cover.depth + 0.5 * sheets * _this.p.page.depth, 0, 0);\n    _this.sheetPhysics = new _SheetPhysics2.default(_this.p.page.width / _this.p.scale, _this.p.gravity, _this.p.page.cornerDeviation);\n\n    _this.binds = {\n      update: _this.update.bind(_this),\n      lastMousePos: function lastMousePos(e) {\n        _this.lastMousePos = _extends({}, _this.lastMousePos, {\n          pageX: e.pageX,\n          pageY: e.pageY\n        });\n      }\n    };\n    _this.visual.addRenderCallback(_this.binds.update);\n    (0, _libs.$)(_this.visual.element).on('mousemove', _this.binds.lastMousePos);\n\n    _this.binds.onPickCallback = _this.onPickCallback.bind(_this);\n    _this.visual.drag.onPickCallback = _this.binds.onPickCallback;\n    _this.binds.onDragCallback = _this.onDragCallback.bind(_this);\n    _this.visual.drag.onDragCallback = _this.binds.onDragCallback;\n    _this.binds.onReleaseCallback = _this.onReleaseCallback.bind(_this);\n    _this.visual.drag.onReleaseCallback = _this.binds.onReleaseCallback;\n\n    _this.dragAngle = 0.05;\n    _this.tmp = {\n      boxs: [new _libs.THREE.Box3(), new _libs.THREE.Box3()]\n    };\n\n    _this.visual.addObject(_this.three);\n    _this.visual.addEventListener('resize', _this.pageManager.refreshZoom.bind(_this.pageManager));\n\n    setTimeout(function () {\n      _this.notifyBeforeAnimation();\n      _this.notifyAfterAnimation();\n    }, 100);\n    return _this;\n  }\n\n  Book.prototype.dispose = function dispose() {\n    this.visual.removeObject(this.three);\n    this.sheetPhysics.dispose();\n    delete this.visual.drag.onPickCallback;\n    delete this.visual.drag.onDragCallback;\n    delete this.visual.drag.onReleaseCallback;\n    (0, _libs.$)(this.visual.element).off('mousemove', this.binds.lastMousePos);\n    this.visual.removeRenderCallback(this.binds.update);\n    this.removeSheetBlocks(0, this.sheetBlocks.length);\n    this.binder.disconnectLeftCover(this.leftCover);\n    this.removeSheetBlock(this.leftCover);\n    this.binder.disconnectRightCover(this.rightCover);\n    this.removeSheetBlock(this.rightCover);\n    this.binder.dispose();\n    this.layerManager.dispose();\n    _CSSLayer2.default.dispose();\n    this.pageManager.dispose();\n  };\n\n  // publics {\n\n  Book.prototype.setAutoResolution = function setAutoResolution(enable) {\n    var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.5;\n\n    this.p.autoResolution = _extends({}, this.p.autoResolution, {\n      enable: enable,\n      k: k\n    });\n  };\n\n  Book.prototype.setZoom = function setZoom(zoom, singlePage) {\n    if (Math.abs(this.p.zoom - zoom) > 1e-3 || singlePage !== this.p.singlePage) {\n      this.p.zoom = zoom;\n      this.p.singlePage = singlePage;\n      this.pageManager.refreshZoom();\n    }\n  };\n\n  Book.prototype.getPageCallback = function getPageCallback() {\n    return this.p.pageCallback;\n  };\n\n  Book.prototype.setQuery = function setQuery(query) {\n    this.searchEngine.setQuery(query);\n  };\n\n  Book.prototype.isProcessing = function isProcessing() {\n    return this.sheetPhysics.getSize() !== 0;\n  };\n\n  Book.prototype.getPages = function getPages() {\n    return 4 + 2 * this.p.sheets;\n  };\n\n  Book.prototype.setFlipProgressClb = function setFlipProgressClb(clb) {\n    this.p.flipProgressClb = clb;\n  };\n\n  Book.prototype.setInjector = function setInjector(injector) {\n    this.p.injector = injector;\n  };\n\n  Book.prototype.isActivePage = function isActivePage(n) {\n    var res = true;\n    if (n > 1 && n < this.getPages() - 2) {\n      for (var _iterator = this.sheetBlocks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var b = _ref;\n\n        if (n - 2 > 2 * b.p.first && n - 2 < 2 * b.p.last - 1) {\n          res = false;\n          break;\n        }\n      }\n    }\n    return res;\n  };\n\n  Book.prototype.getBlockByPage = function getBlockByPage(n) {\n    var block = void 0;\n    if (n < 2) {\n      block = this.leftCover;\n    } else if (n < 2 * (this.p.sheets + 1)) {\n      for (var _iterator2 = this.sheetBlocks, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var b = _ref2;\n\n        if (n - 2 >= 2 * b.p.first && n - 2 < 2 * b.p.last) {\n          block = b;\n          break;\n        }\n      }\n    } else {\n      block = this.rightCover;\n    }\n    return block;\n  };\n\n  Book.prototype.getBlockPages = function getBlockPages(block) {\n    var range = void 0;\n    switch (block) {\n      case this.leftCover:\n        {\n          range = [0, 1];\n          break;\n        }\n      case this.rightCover:\n        {\n          range = [2 * (this.p.sheets + 1), 2 * (this.p.sheets + 1) + 1];\n          break;\n        }\n      default:\n        {\n          range = block ? [2 * (block.p.first + 1), 2 * (block.p.last + 1) - 1] : undefined;\n        }\n    }\n    return range;\n  };\n\n  Book.prototype.getPage = function getPage() {\n    var PI = Math.PI;\n    var p = void 0;\n    if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {\n      for (var _iterator3 = this.sheetBlocks, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) break;\n          _ref3 = _i3.value;\n        }\n\n        var block = _ref3;\n\n        if (block.angle <= PI / 2) {\n          p = this.getBlockPages(block)[0] - 1;\n          break;\n        }\n      }\n      if (!p) {\n        p = this.getPages() - 3;\n      }\n    } else if (this.angle < PI / 2) {\n      p = 0;\n    } else if (this.angle > 3 * PI / 2) {\n      p = 1;\n    } else if (this.angle < PI) {\n      p = this.getPages() - 3;\n    } else if (this.angle >= PI) {\n      p = this.getPages() - 1;\n    }\n    return p;\n  };\n\n  Book.prototype.getTopPages = function getTopPages() {\n    var p = this.getPage();\n    return p === 0 || p === this.getPages() - 1 ? [p] : [p, p + 1];\n  };\n\n  Book.prototype.getPageState = function getPageState(n) {\n    return this.pageManager.getPageState(n);\n  };\n\n  Book.prototype.enableLoadingAnimation = function enableLoadingAnimation(enable) {\n    this.pageManager.enableLoadingAnimation(enable);\n  };\n\n  Book.prototype.getLeftFlipping = function getLeftFlipping() {\n    var block = void 0;\n    var left = this.sheetBlocks[0],\n        PI = Math.PI;\n    if (this.angle === PI) {\n      block = this.rightCover;\n    } else {\n      if (left && left.state === 'closed' && left.angle > PI / 2) {\n        block = left;\n      } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {\n        block = this.leftCover;\n      }\n    }\n    return block;\n  };\n\n  Book.prototype.getRightFlipping = function getRightFlipping() {\n    var block = void 0;\n    var right = this.sheetBlocks[this.sheetBlocks.length - 1],\n        PI = Math.PI;\n    if (this.angle === 0) {\n      block = this.leftCover;\n    } else {\n      if (right && right.state === 'closed' && right.angle <= PI / 2) {\n        block = right;\n      } else if (this.angle === PI / 2 || this.angle === 3 * PI / 2) {\n        block = this.rightCover;\n      }\n    }\n    return block;\n  };\n\n  Book.prototype.getClosedBlockAngle = function getClosedBlockAngle(angle) {\n    var closedAngle = void 0,\n        PI = Math.PI;\n\n    if (this.leftCover.physicId) {\n      var test = void 0;\n      try {\n        test = Math.abs(this.sheetPhysics.getParametr(this.leftCover.physicId, 'angle') - angle);\n      } catch (e) {\n        test = 0;\n      }\n      closedAngle = angle > PI / 2 || test > PI / 6 ? PI / 2 : this.closedAngle;\n    } else if (this.rightCover.physicId) {\n      var _test = void 0;\n      try {\n        _test = Math.abs(this.sheetPhysics.getParametr(this.rightCover.physicId, 'angle') - angle);\n      } catch (e) {\n        _test = 0;\n      }\n      closedAngle = angle < PI / 2 || _test > PI / 6 ? PI / 2 + 1e-7 : this.closedAngle;\n    } else {\n      closedAngle = PI / 2 + (angle !== 0) * 1e-7;\n    }\n\n    return {\n      openedAngle: angle,\n      closedAngle: closedAngle,\n      binderTurn: this.closedAngle\n    };\n  };\n\n  Book.prototype.flipLeft = function flipLeft() {\n    var _this2 = this;\n\n    var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    var progressClb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.p.flipProgressClb;\n\n    var block = void 0,\n        res = void 0;\n    if (this.sheetPhysics.getSize() < 25) {\n      (function () {\n        var left = _this2.sheetBlocks[0],\n            PI = Math.PI;\n        if (_this2.angle === PI) {\n          res = _this2.connectPhysics(block = _this2.rightCover, _this2.p.cover.mass, PI, -_this2.p.cover.startVelocity, _this2.p.cover.flexibility, 0, function (angle, height) {\n            return _this2.set(3 * PI / 2 - angle / 2, height);\n          }, function (angle, height) {\n            _this2.set(3 * PI / 2 - angle / 2, 0);\n            _this2.setSheetBlocks(angle ? PI : PI / 2 + 1e-7, 'closed');\n          }, progressClb);\n        } else {\n          if (left && left.state === 'closed' && left.angle > PI / 2) {\n            block = size < left.getSize() ? _this2.splitSheetBlock(0, left.getSize() - size)[1] : left;\n            res = _this2.connectPhysics(block, _this2.p.page.mass * block.getSize(), PI, -_this2.p.page.startVelocity, _this2.p.page.flexibility, 0, function (angle, height) {\n              return block.set(_this2.getClosedBlockAngle(angle), 'opened', height);\n            }, Book.finishAnimationClb.bind({ book: _this2, block: block }), progressClb);\n          } else if (_this2.angle === PI / 2 || _this2.angle === 3 * PI / 2) {\n            res = _this2.connectPhysics(block = _this2.leftCover, _this2.p.cover.mass, PI, -_this2.p.cover.startVelocity, _this2.p.cover.flexibility, 0, function (angle, height) {\n              _this2.set(2 * PI - angle / 2, height);\n              if (angle > PI / 2) {\n                _this2.setSheetBlocks(angle ? PI / 2 : 0, 'closed');\n              }\n            }, function (angle, height) {\n              return _this2.set(angle === 0 ? 0 : 2 * PI - angle / 2, 0);\n            }, progressClb);\n          }\n        }\n      })();\n    }\n    return res;\n  };\n\n  Book.prototype.flipRight = function flipRight() {\n    var _this3 = this;\n\n    var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    var progressClb = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.p.flipProgressClb;\n\n    var block = void 0,\n        res = void 0;\n    if (this.sheetPhysics.getSize() < 25) {\n      (function () {\n        var right = _this3.sheetBlocks[_this3.sheetBlocks.length - 1],\n            PI = Math.PI;\n        if (_this3.angle === 0) {\n          res = _this3.connectPhysics(block = _this3.leftCover, _this3.p.cover.mass, 0, _this3.p.cover.startVelocity, _this3.p.cover.flexibility, 0, function (angle, height) {\n            return _this3.set(angle / 2, height);\n          }, function (angle, height) {\n            _this3.set(angle / 2, 0);\n            _this3.setSheetBlocks(angle ? PI / 2 : 0, 'closed');\n          }, progressClb);\n        } else {\n          if (right && right.state === 'closed' && right.angle <= PI / 2) {\n            block = size < right.getSize() ? _this3.splitSheetBlock(_this3.sheetBlocks.length - 1, size)[0] : right;\n            res = _this3.connectPhysics(block, _this3.p.page.mass * block.getSize(), 0, _this3.p.page.startVelocity, _this3.p.page.flexibility, 0, function (angle, height) {\n              return block.set(_this3.getClosedBlockAngle(angle), 'opened', height);\n            }, Book.finishAnimationClb.bind({ book: _this3, block: block }), progressClb);\n          } else if (_this3.angle === PI / 2 || _this3.angle === 3 * PI / 2) {\n            res = _this3.connectPhysics(block = _this3.rightCover, _this3.p.cover.mass, 0, _this3.p.cover.startVelocity, _this3.p.cover.flexibility, 0, function (angle, height) {\n              _this3.set(PI / 2 + angle / 2, height);\n              if (angle < PI / 2) {\n                _this3.setSheetBlocks(PI / 2 + 1e-7, 'closed');\n              }\n            }, function (angle, height) {\n              return _this3.set(PI / 2 + angle / 2, 0);\n            }, progressClb);\n          }\n        }\n      })();\n    }\n    return res;\n  };\n\n  // }\n\n  Book.prototype.clearHoverInfo = function clearHoverInfo() {\n    this.pageManager.turnOnEvents();\n    delete this.hoverInfo.block.force;\n    delete this.hoverInfo.block.cornerForce;\n    delete this.hoverInfo;\n  };\n\n  Book.prototype.xSegment = function xSegment() {\n    var boxs = this.tmp.boxs,\n        res = {};\n    if (this.leftCover.physicId) {\n      boxs[0].setFromObject(this.rightCover.three);\n      res.min = -(res.max = boxs[0].max.x);\n    } else if (this.rightCover.physicId) {\n      boxs[0].setFromObject(this.leftCover.three);\n      res.max = -(res.min = boxs[0].min.x);\n    } else {\n      boxs[0].setFromObject(this.leftCover.three);\n      boxs[1].setFromObject(this.rightCover.three);\n      boxs[0].union(boxs[1]);\n      res.min = boxs[0].min.x;\n      res.max = boxs[0].max.x;\n    }\n    return res;\n  };\n\n  Book.prototype.computeTarget = function computeTarget(point) {\n    var x = point.x,\n        y = point.y,\n        seg = this.xSegment(),\n        angle = void 0;\n\n    angle = (seg.max - x) / (seg.max - seg.min) * Math.PI;\n    // angle = Math.acos(x/Math.sqrt(x*x+y*y));\n    return Math.max(this.dragAngle, Math.min(Math.PI - this.dragAngle, angle));\n  };\n\n  Book.prototype.onPickCallback = function onPickCallback(object) {\n    var res = false;\n    var block = object.object.userData.self,\n        p = _extends({}, object.uv),\n        i = object.face.materialIndex;\n    if (i < 2) {\n      p.x = i === 0 ? p.x : 1 - p.x;\n      if (block.cornerTarget.testIntersection(null, p) && block.physicId) {\n        if (this.hoverInfo) {\n          this.clearHoverInfo();\n        }\n        block.force = _SheetPhysics2.default.dragForceClb;\n        block.cornerForce = _SheetPhysics2.default.getDragCornerForceClb(this.computeTarget(object.point));\n        this.dragInfo = {\n          object: object,\n          block: block\n        };\n        res = true;\n        this.pageManager.turnOffEvents();\n      }\n    }\n    return res;\n  };\n\n  Book.prototype.onDragCallback = function onDragCallback(point) {\n    var block = this.dragInfo.block,\n        p = block.getProps();\n    block.force = _SheetPhysics2.default.dragForceClb;\n    block.cornerForce = _SheetPhysics2.default.getDragCornerForceClb(this.computeTarget(point));\n    return true;\n  };\n\n  Book.prototype.onReleaseCallback = function onReleaseCallback() {\n    delete this.dragInfo.block.force;\n    delete this.dragInfo.block.cornerForce;\n    delete this.dragInfo;\n    this.pageManager.turnOnEvents();\n  };\n\n  Book.prototype.getFlipping = function getFlipping(i) {\n    return i ? this.getLeftFlipping() : this.getRightFlipping();\n  };\n\n  Book.prototype.flip = function flip(i) {\n    var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n    return i ? this.flipLeft(size) : this.flipRight(size);\n  };\n\n  Book.prototype.enableMouse = function enableMouse(enable) {\n    this.mouseController = enable;\n  };\n\n  Book.prototype.cornerCallback = function cornerCallback(e, data) {\n    var _this4 = this;\n\n    if (this.mouseController) {\n      (function () {\n        var _data$data = data.data,\n            i = _data$data.i,\n            n = _data$data.n;\n\n        if (e.type === 'mouseover') {\n          if (_this4.hoverInfo && _this4.hoverInfo.pendings !== undefined) {\n            ++_this4.hoverInfo.pendings;\n          } else {\n            if (_this4.hoverInfo) {\n              console.warn('Wrong state: element is already hover');\n              if (_this4.hoverInfo.n !== n) {\n                _this4.clearHoverInfo();\n              }\n            }\n            if (!_this4.hoverInfo && !_this4.dragInfo) {\n              (function () {\n                var res = Promise.resolve(undefined);\n                var hoverAngle = 0.02,\n                    hover = _this4.getBlockByPage(n),\n                    possible = _this4.getFlipping(i);\n                if (n > 1 && n < 2 * (_this4.p.sheets + 1) && hover.physicId && (hover.angle < hoverAngle || hover.angle > Math.PI - hoverAngle)) {\n                  res = Promise.resolve(hover);\n                } else if (hover === possible) {\n                  var sheetBlocks = [_this4.leftCover].concat(_this4.sheetBlocks, [_this4.rightCover]);\n                  var j = sheetBlocks.indexOf(hover),\n                      nextBlock = ~j ? sheetBlocks[j + 2 * i - 1] : undefined;\n                  if (!nextBlock || !nextBlock.physicId || nextBlock.angle > hoverAngle && nextBlock.angle < Math.PI - hoverAngle) {\n                    res = _this4.flip(i, 1).then(function (block) {\n                      if (!block) {\n                        delete _this4.hoverInfo;\n                      } else {\n                        _this4.sheetPhysics.setParametr(block.physicId, 'velocity', 0);\n                      }\n                      return block;\n                    });\n                    _this4.hoverInfo = {\n                      pendings: 1\n                    };\n                  }\n                }\n                res.then(function (block) {\n                  if (_this4.hoverInfo && _this4.hoverInfo.pendings < 1) {\n                    block = undefined;\n                    delete _this4.hoverInfo;\n                  }\n                  if (block) {\n                    _this4.pageManager.turnOffEvents();\n                    var p = block.getProps();\n                    block.force = _this4.sheetPhysics.getTargetForceClb(p.mass * block.getSize(), i ? Math.PI - hoverAngle : hoverAngle);\n                    block.cornerForce = function () {\n                      return (i ? -1 : 1) * _SheetPhysics2.default.hoverCornerForceClb();\n                    };\n                    _this4.sheetPhysics.setParametr(block.physicId, 'angle', i ? Math.PI - 0.5 * hoverAngle : 0.5 * hoverAngle);\n                    _this4.hoverInfo = {\n                      n: n,\n                      block: block\n                    };\n                    _this4.update(1 / 30);\n                  }\n                });\n              })();\n            }\n          }\n        } else if (_this4.hoverInfo && e.type === 'mouseout') {\n          if (_this4.hoverInfo.pendings !== undefined) {\n            --_this4.hoverInfo.pendings;\n          } else if (n === _this4.hoverInfo.n) {\n            _this4.clearHoverInfo();\n          }\n        } else if (e.type === 'mousedown') {\n          _this4.cornerClickData = {\n            x: e.pageX,\n            y: e.pageY\n          };\n        } else if (e.type === 'click') {\n          if (Math.sqrt(Math.pow(_this4.cornerClickData.x - e.pageX, 2) + Math.pow(_this4.cornerClickData.y - e.pageY, 2)) < 5) {\n            var hover = _this4.getBlockByPage(n);\n            if (hover.physicId) {\n              var id = hover.physicId,\n                  props = hover.getProps();\n              _this4.sheetPhysics.setParametr(id, 'velocity', (i ? -1 : 1) * props.startVelocity);\n            }\n          }\n          delete _this4.cornerClickData;\n        }\n      })();\n    }\n  };\n\n  Book.prototype.addSheetBlock = function addSheetBlock(p, block) {\n    this.sheetBlocks.splice(p, 0, block);\n    this.subscribeSheetBlock(block, 2);\n    this.threeSheetBlocks.add(block.three);\n  };\n\n  Book.prototype.subscribeSheetBlock = function subscribeSheetBlock(block, offset) {\n    var _this5 = this;\n\n    var eventConverter = new _CustomEventConverter2.default(this.visual.wnd, this.visual.doc, _CircleTarget2.default.test),\n        r = 0.15,\n        target = new _CircleTarget2.default(1 - 0.5 * r, 0.5 * r, r);\n    target.block = block;\n    target.callback = this.cornerCallback.bind(this);\n    eventConverter.addCustom(target);\n    block.cornerTarget = target;\n    block.three.userData.mouseCallback = function (e, data) {\n      var i = data.face.materialIndex;\n      if (i < 2) {\n        var n = i === 0 ? offset + 2 * block.p.first : offset + 2 * block.p.last - 1;\n        eventConverter.convert(e, { x: i === 0 ? data.uv.x : 1 - data.uv.x, y: data.uv.y, i: i, n: n });\n        _this5.pageManager.transferEventToTexture(n, e, data);\n      }\n    };\n    block.three.userData.touchCallback = function (e, data) {\n      var i = data.face.materialIndex;\n      if (i < 2) {\n        var n = i === 0 ? offset + 2 * block.p.first : offset + 2 * block.p.last - 1;\n        _this5.pageManager.transferEventToTexture(n, e, data);\n      }\n    };\n    this.visual.drag.addThree(block.three);\n    this.visual.mouseEvents.addThree(block.three);\n    this.visual.touchEvents.addThree(block.three);\n  };\n\n  Book.prototype.removeSheetBlock = function removeSheetBlock(block) {\n    this.visual.mouseEvents.removeThree(block.three);\n    this.visual.touchEvents.removeThree(block.three);\n    this.visual.drag.removeThree(block.three);\n    this.threeSheetBlocks.remove(block.three);\n    block.dispose();\n  };\n\n  Book.prototype.removeSheetBlocks = function removeSheetBlocks(first, size) {\n    var blocks = this.sheetBlocks.splice(first, size);\n    for (var _iterator4 = blocks, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n      var _ref4;\n\n      if (_isArray4) {\n        if (_i4 >= _iterator4.length) break;\n        _ref4 = _iterator4[_i4++];\n      } else {\n        _i4 = _iterator4.next();\n        if (_i4.done) break;\n        _ref4 = _i4.value;\n      }\n\n      var block = _ref4;\n\n      this.removeSheetBlock(block);\n    }\n  };\n\n  Book.prototype.setTexture = function setTexture(material, n) {\n    this.pageManager.setTexture(material, n);\n  };\n\n  Book.prototype.setPageTexture = function setPageTexture(material, n) {\n    this.setTexture(material, n + 2);\n  };\n\n  Book.prototype.setLeftCoverTexture = function setLeftCoverTexture(material, n) {\n    this.setTexture(material, n);\n  };\n\n  Book.prototype.setRightCoverTexture = function setRightCoverTexture(material, n) {\n    this.setTexture(material, n + 2 * (this.p.sheets + 1));\n  };\n\n  Book.finishAnimationClb = function finishAnimationClb(angle) {\n    this.block.set(this.book.getClosedBlockAngle(angle).closedAngle, 'closed', 0);\n    var i = this.book.sheetBlocks.indexOf(this.block);\n    if (~i) {\n      if (angle === 0) {\n        this.book.mergeSheetBlocks(i, this.book.sheetBlocks.length - i);\n      } else {\n        this.book.mergeSheetBlocks(0, i + 1);\n      }\n    }\n  };\n\n  Book.prototype.calcBlockForce = function calcBlockForce(block, object, angle, velocity, cornerHeight) {\n    return block.force ? block.force(object, angle, velocity, cornerHeight) : 0;\n  };\n\n  Book.prototype.calcBlockCornerForce = function calcBlockCornerForce(block, object, angle, velocity, cornerHeight) {\n    return block.cornerForce ? block.cornerForce(object, angle, velocity, cornerHeight) : 0;\n  };\n\n  Book.prototype.notifyBeforeAnimation = function notifyBeforeAnimation() {\n    var res = void 0;\n    if (this.animationNotification) {\n      res = Promise.reject();\n    } else {\n      this.animationNotification = true;\n      this.dispatchEvent({\n        type: 'beforeAnimation'\n      });\n      res = this.layerManager.hide();\n    }\n    return res;\n  };\n\n  Book.prototype.notifyAfterAnimation = function notifyAfterAnimation() {\n    if (this.animationNotification) {\n      delete this.animationNotification;\n      this.layerManager.show();\n      this.dispatchEvent({\n        type: 'afterAnimation'\n      });\n    }\n  };\n\n  Book.prototype.connectPhysics = function connectPhysics(block, mass, angle, velocity, flexibility, coverHeight, simulateClb, removeClb, progressClb) {\n    var _this6 = this;\n\n    var type = function type() {\n      return _this6.hoverInfo ? 'hover' : _this6.dragInfo ? 'drag' : 'free';\n    },\n        res = this.sheetPhysics.getSize() ? Promise.resolve() : this.notifyBeforeAnimation();\n    return res.then(function () {\n      block.physicId = _this6.sheetPhysics.addObject(mass, angle, velocity, flexibility, coverHeight, function (angl, ch) {\n        simulateClb(angl, ch);\n        progressClb(block, Math.abs(angle - angl) / Math.PI, 'process', type());\n      }, function (angl, ch) {\n        removeClb(angl, ch);\n        delete block.physicId;\n        progressClb(block, Math.abs(angle - angl) / Math.PI, 'finish', type());\n        Promise.resolve().then(function () {\n          if (!_this6.sheetPhysics.getSize()) {\n            _this6.notifyAfterAnimation();\n          }\n        });\n      }, function (object, angle, velocity, cornerHeight) {\n        return _this6.calcBlockForce(block, object, angle, velocity, cornerHeight);\n      }, function (object, angle, velocity, cornerHeight) {\n        return _this6.calcBlockCornerForce(block, object, angle, velocity, cornerHeight);\n      });\n      progressClb(block, 0, 'init', type());\n      return block;\n    }).catch(function () {\n      return undefined;\n    });\n  };\n\n  Book.prototype.update = function update(dt) {\n    var _this7 = this;\n\n    this.lastMousePos.t += dt;\n    if (this.isProcessing() && this.lastMousePos.pageX !== undefined && this.lastMousePos.t - (this.lastMousePos.lastT || 0) > 0.25 && !this.hoverInfo && !this.dragInfo) {\n      this.lastMousePos.lastT = this.lastMousePos.t;\n      Promise.resolve().then(function () {\n        (0, _libs.$)(_this7.visual.element).trigger(_libs.$.Event('mousemove', _this7.lastMousePos));\n      });\n    }\n    this.sheetPhysics.simulate(dt);\n  };\n\n  Book.prototype.splitSheetBlock = function splitSheetBlock(i, leftSize) {\n    var block = this.sheetBlocks[i];\n    if (block && leftSize < block.getSize()) {\n      var newBlock = new _SheetBlock2.default(this.visual, _extends({}, this.p, { setTexture: this.setPageTexture.bind(this) }), block.p.first, block.p.first + leftSize, block.angle, block.state);\n      block.set(block.angle, block.state, block.corner.height, block.p.first + leftSize, block.p.last);\n      this.addSheetBlock(i, newBlock);\n      return [newBlock, block];\n    }\n  };\n\n  Book.prototype.mergeSheetBlocks = function mergeSheetBlocks(first, size) {\n    if (first < this.sheetBlocks.length) {\n      size = Math.min(this.sheetBlocks.length - first, size);\n      var firstBlock = this.sheetBlocks[first],\n          lastBlock = this.sheetBlocks[first + size - 1];\n      firstBlock.set(firstBlock.angle, firstBlock.state, firstBlock.corner.height, firstBlock.p.first, lastBlock.p.last);\n      this.removeSheetBlocks(first + 1, size - 1);\n    }\n  };\n\n  Book.prototype.setSheetBlocks = function setSheetBlocks(angle, state) {\n    if (state === 'closed') {\n      this.closedAngle = angle;\n    }\n    this.sheetBlocks.forEach(function (s) {\n      if (!s.physicId) {\n        s.set(angle, state);\n      }\n    });\n  };\n\n  Book.prototype.set = function set(angle) {\n    var height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n    this.angle = angle;\n    var PI = Math.PI;\n    if (angle < PI / 4) {\n      this.binder.set(0);\n\n      this.binder.setLeft(-PI / 2 + 2 * angle);\n      this.leftCover.set(PI / 2, 'opened', height);\n\n      this.setSheetBlocks(0, 'closed');\n\n      this.binder.setRight(0);\n      this.rightCover.set(0, 'closed', 0);\n    } else if (angle < 2 * PI / 4) {\n      var a = 2 * (angle - PI / 4);\n      this.binder.set(a);\n\n      this.binder.setLeft(-a);\n      this.leftCover.set(PI / 2 + a, 'opened', height);\n\n      this.setSheetBlocks(a, 'closed');\n\n      this.binder.setRight(-a);\n      this.rightCover.set(a, 'closed', 0);\n    } else if (angle < 3 * PI / 4) {\n      var _a = 2 * (angle - PI / 2);\n      this.binder.set(PI / 2);\n\n      this.binder.setLeft(-PI / 2);\n      this.leftCover.set(PI, 'opened', 0);\n\n      this.binder.setRight(-PI / 2);\n      this.rightCover.set(_a, 'opened', height);\n    } else if (angle < 4 * PI / 4) {\n      var _a2 = 2 * (angle - 3 * PI / 4) + PI / 2;\n      this.binder.set(_a2);\n\n      this.binder.setLeft(-_a2);\n      this.leftCover.set(_a2, 'closed', 0);\n\n      this.setSheetBlocks(_a2, 'closed');\n\n      this.binder.setRight(-PI / 2);\n      this.rightCover.set(PI / 2, 'opened', height);\n    } else if (angle < 5 * PI / 4) {\n      this.binder.set(PI);\n\n      this.binder.setLeft(-PI);\n      this.leftCover.set(PI, 'closed', 0);\n\n      this.setSheetBlocks(PI, 'closed');\n\n      this.binder.setRight(-PI / 2 - 2 * (angle - PI));\n      this.rightCover.set(PI / 2, 'opened', height);\n    } else if (angle < 6 * PI / 4) {\n      var _a3 = 2 * (angle - 5 * PI / 4);\n      this.binder.set(PI - _a3);\n\n      this.binder.setLeft(-PI + _a3);\n      this.leftCover.set(PI - _a3, 'closed', 0);\n\n      this.setSheetBlocks(PI - _a3, 'closed');\n\n      this.binder.setRight(-PI + _a3);\n      this.rightCover.set(PI / 2 - _a3, 'opened', height);\n    } else if (angle < 7 * PI / 4) {\n      var _a4 = 2 * (angle - 6 * PI / 4);\n      this.binder.set(PI / 2);\n\n      this.binder.setLeft(-PI / 2);\n      this.leftCover.set(PI - _a4, 'opened', height);\n\n      this.binder.setRight(-PI / 2);\n      this.rightCover.set(0, 'opened', 0);\n    } else if (angle < 8 * PI / 4) {\n      var _a5 = 2 * (angle - 7 * PI / 4);\n      this.binder.set(PI / 2 - _a5);\n\n      this.binder.setLeft(-PI / 2);\n      this.leftCover.set(PI / 2, 'opened', height);\n\n      this.setSheetBlocks(PI / 2 - _a5, 'closed');\n\n      this.binder.setRight(-PI / 2 + _a5);\n      this.rightCover.set(PI / 2 - _a5, 'closed', 0);\n    }\n  };\n\n  Book.createSideTexture = function createSideTexture(color) {\n    var jC = (0, _libs.$)('<canvas width=\"8\" height=\"8\"></canvas>');\n    var ctx = jC[0].getContext('2d');\n    ctx.beginPath();\n    ctx.fillStyle = _GraphUtils2.default.color2Rgba(color, 1);\n    ctx.rect(0, 0, 8, 7);\n    ctx.fill();\n    ctx.beginPath();\n    ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(color, 0.5), 1);\n    ctx.rect(0, 7, 8, 1);\n    ctx.fill();\n    return jC[0];\n  };\n\n  Book.prepareProps = function prepareProps(props) {\n    return Book.calcProps(Book.mergeProps((0, _book.props)(), props));\n  };\n\n  Book.mergeProps = function mergeProps(first, second) {\n    second = second || {};\n    return _extends({}, first, second, {\n      sheet: _extends({}, first.sheet, second.sheet),\n      cover: _extends({}, first.cover, second.cover),\n      page: _extends({}, first.page, second.page),\n      cssLayerProps: _extends({}, first.cssLayerProps, second.cssLayerProps)\n    });\n  };\n\n  Book.calcProps = function calcProps(props) {\n    var p = _extends({}, props, {\n      sheet: _extends({}, props.sheet),\n      cover: _extends({}, props.sheet, props.cover),\n      page: _extends({}, props.sheet, props.page),\n      cssLayerProps: _extends({}, props.cssLayerProps, {\n        $: _libs.$\n      })\n    }),\n        scale = 10,\n        height = scale * p.height,\n        width = scale * p.width,\n        flipProgressClb = function flipProgressClb() {\n      return undefined;\n    },\n        sheet = {\n      sideTexture: p.sheet.sideTexture || Book.createSideTexture(p.sheet.color)\n    },\n        cover = _extends({}, sheet, p.cover, {\n      depth: scale * p.cover.depth,\n      width: width,\n      height: height,\n      padding: scale * p.cover.padding\n    }),\n        page = _extends({}, sheet, p.page, {\n      depth: scale * p.page.depth,\n      width: cover.width - cover.padding,\n      height: cover.height - 2 * cover.padding\n    }),\n        marker = {\n      use: false,\n      color: 0XFF0000,\n      size: scale * 0.001\n    };\n    if (cover.color !== sheet.color && !p.cover.sideTexture) {\n      cover.sideTexture = Book.createSideTexture(cover.color);\n    }\n    if (page.color !== sheet.color && !p.page.sideTexture) {\n      page.sideTexture = Book.createSideTexture(page.color);\n    }\n    return _extends({}, p, { scale: scale, height: height, width: width, flipProgressClb: flipProgressClb, cover: cover, page: page, marker: marker });\n  };\n\n  return Book;\n}(_libs.THREE.EventDispatcher);\n\nexports.default = Book;\n\n/***/ },\n/* 27 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(1);\n\nvar _Controller2 = __webpack_require__(15);\n\nvar _Controller3 = _interopRequireDefault(_Controller2);\n\nvar _bookController = __webpack_require__(42);\n\nvar _EventsToActions = __webpack_require__(49);\n\nvar _EventsToActions2 = _interopRequireDefault(_EventsToActions);\n\nvar _stats = __webpack_require__(70);\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nvar _Object3DWatcher = __webpack_require__(55);\n\nvar _Object3DWatcher2 = _interopRequireDefault(_Object3DWatcher);\n\nvar _FullScreen = __webpack_require__(50);\n\nvar _FullScreen2 = _interopRequireDefault(_FullScreen);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BookController = function (_Controller) {\n  _inherits(BookController, _Controller);\n\n  function BookController(book, view, props) {\n    _classCallCheck(this, BookController);\n\n    var _this = _possibleConstructorReturn(this, _Controller.call(this));\n\n    _this.navigationControls = true;\n    _this.book = book;\n    _this.visual = book.visual;\n    _this.p = BookController.prepareProps(props);\n    _this.p.rtl = book.p.rtl;\n    _this.devicePixelRatio = _this.visual.wnd.devicePixelRatio || 1;\n\n    _this.orbit = book.visual.getOrbit();\n    book.setFlipProgressClb(_this.updateViewIfState.bind(_this));\n    _this.view = view;\n    _this.bindActions();\n\n    _this.state = {\n      smartPan: !_this.actions['cmdSmartPan'].active,\n      singlePage: _this.actions['cmdSinglePage'].active || _this.actions['cmdSinglePage'].activeForMobile && _this.devicePixelRatio > 1,\n      stats: _this.actions['cmdStats'].active,\n      lighting: _this.p.lighting.default,\n      activeSide: 1\n    };\n\n    _this.boxs = [new _libs.THREE.Box3(), new _libs.THREE.Box3()];\n    _this.bookWatcher = new _Object3DWatcher2.default(_this.visual, function () {\n      if (_this.state.singlePage) {\n        if (_this.state.activeSide) {\n          _this.boxs[0].setFromObject(book.rightCover.three);\n        } else {\n          _this.boxs[0].setFromObject(book.leftCover.three);\n        }\n      } else {\n        _this.boxs[0].setFromObject(book.leftCover.three);\n        _this.boxs[1].setFromObject(book.rightCover.three);\n        _this.boxs[0].union(_this.boxs[1]);\n      }\n      return _this.boxs[0];\n    });\n    _this.bookWatcher.scale = _this.p.scale.default;\n    _this.book.setZoom(_this.bookWatcher.scale, _this.state.singlePage);\n\n    _this.Stats = new _stats2.default();\n    _this.Stats.domElement.style.position = 'absolute';\n    _this.Stats.domElement.style.top = '0px';\n\n    _this.visual.setExtraLighting(_this.state.lighting);\n    _this.binds = {\n      onScreenModeChanged: _this.onScreenModeChanged.bind(_this),\n      stats: _this.Stats.update.bind(_this.Stats),\n      onUpdateView: _this.updateView.bind(_this)\n    };\n    _FullScreen2.default.addEventListener(_this.view.getParentContainer().ownerDocument, _this.binds.onScreenModeChanged);\n\n    _this.cmdSmartPan();\n\n    if (_this.view.templateObject.appLoaded) {\n      Promise.resolve().then(_this.view.templateObject.appLoaded);\n    }\n\n    _this.book.enableLoadingAnimation(_this.p.loadingAnimation.book);\n    if (_this.p.loadingAnimation.skin) {\n      _this.initLoadingAnimation();\n    }\n\n    _this.book.enableLoadingAnimation(_this.p.loadingAnimation.book);\n    _this.book.setAutoResolution(_this.p.autoResolution.enabled, _this.p.autoResolution.coefficient);\n    return _this;\n  }\n\n  BookController.prototype.dispose = function dispose() {\n    _FullScreen2.default.removeEventListener(this.view.getParentContainer().ownerDocument, this.binds.onScreenModeChanged);\n    delete this.book;\n    delete this.view;\n    delete this.visual;\n  };\n\n  BookController.prototype.initLoadingAnimation = function initLoadingAnimation() {\n    var _this2 = this;\n\n    var handler = function handler() {\n      var pages = _this2.book.getTopPages();\n      var visible = false;\n      for (var _iterator = pages, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var n = _ref;\n\n        var state = _this2.book.getPageState(n);\n        visible = state === undefined || state === 'loading';\n        if (visible) {\n          break;\n        }\n      }\n      _this2.view.setState('widLoading', {\n        visible: visible\n      });\n    };\n    this.book.addEventListener('beforeAnimation', handler);\n    this.book.addEventListener('afterAnimation', handler);\n    this.book.addEventListener('loadPage', handler);\n    this.book.addEventListener('loadedPage', handler);\n  };\n\n  BookController.prototype.enableNavigation = function enableNavigation(enable) {\n    this.navigationControls = enable;\n  };\n\n  BookController.prototype.setTocCtrl = function setTocCtrl(tocCtrl) {\n    this.tocCtrl = tocCtrl;\n    this.tocCtrl.onChange = this.updateView.bind(this);\n    this.updateView();\n  };\n\n  BookController.prototype.setPrinter = function setPrinter(printer) {\n    this.printer = printer;\n    this.updateView();\n  };\n\n  BookController.prototype.setSounds = function setSounds(sounds) {\n    this.sounds = sounds;\n    sounds.setEnabled(this.actions['cmdSounds'].active);\n    this.updateView();\n  };\n\n  BookController.prototype.onScreenModeChanged = function onScreenModeChanged(e) {\n    this.updateView();\n  };\n\n  BookController.prototype.canZoomIn = function canZoomIn() {\n    return !this.state.smartPan || Math.abs(this.bookWatcher.scale - this.p.scale.max) > this.p.eps;\n  };\n\n  BookController.prototype.canZoomOut = function canZoomOut() {\n    return !this.state.smartPan || Math.abs(this.bookWatcher.scale - this.p.scale.min) > this.p.eps;\n  };\n\n  BookController.prototype.canDefaultZoom = function canDefaultZoom() {\n    return this.state.smartPan;\n  };\n\n  BookController.prototype.setBookZoom = function setBookZoom(scale) {\n    var _this3 = this;\n\n    setTimeout(function () {\n      if (_this3.bookWatcher.scale === scale) {\n        _this3.book.setZoom(scale, _this3.state.singlePage);\n      }\n    }, 1000);\n  };\n\n  BookController.prototype.cmdZoomIn = function cmdZoomIn() {\n    if (this.state.smartPan) {\n      this.bookWatcher.scale = Math.min(this.p.scale.max, this.bookWatcher.scale + this.p.scale.delta);\n      this.setBookZoom(this.bookWatcher.scale);\n    } else {\n      this.orbit.zoomIn(6.6 * this.p.scale.delta / 0.32);\n    }\n    this.updateView();\n  };\n\n  BookController.prototype.cmdZoomOut = function cmdZoomOut() {\n    if (this.state.smartPan) {\n      this.bookWatcher.scale = Math.max(this.p.scale.min, this.bookWatcher.scale - this.p.scale.delta);\n      this.setBookZoom(this.bookWatcher.scale);\n    } else {\n      this.orbit.zoomOut(6.6 * this.p.scale.delta / 0.32);\n    }\n    this.updateView();\n  };\n\n  BookController.prototype.cmdDefaultZoom = function cmdDefaultZoom() {\n    if (this.state.smartPan) {\n      this.bookWatcher.scale = this.p.scale.default;\n      this.setBookZoom(this.bookWatcher.scale);\n      this.updateView();\n    }\n  };\n\n  BookController.prototype.cmdToc = function cmdToc() {\n    if (this.tocCtrl) {\n      this.tocCtrl.togle();\n    }\n  };\n\n  BookController.prototype.cmdFastBackward = function cmdFastBackward() {\n    this.startFlip(this.book.flipLeft(5));\n  };\n\n  BookController.prototype.cmdBackward = function cmdBackward() {\n    var _this4 = this;\n\n    if (this.state.singlePage) {\n      this.state.activeSide = (this.getPage() + 1) % 2;\n      if (this.state.activeSide) {\n        this.state.activeSide = 0;\n        this.updateView();\n      } else {\n        this.startFlip(this.book.flipLeft(1)).then(function (block) {\n          if (block) {\n            _this4.state.activeSide = 1;\n          }\n        });\n      }\n    } else {\n      this.startFlip(this.book.flipLeft(1));\n    }\n  };\n\n  BookController.prototype.cmdForward = function cmdForward() {\n    var _this5 = this;\n\n    if (this.state.singlePage) {\n      this.state.activeSide = (this.getPage() + 1) % 2;\n      if (!this.state.activeSide) {\n        this.state.activeSide = 1;\n        this.updateView();\n      } else {\n        this.startFlip(this.book.flipRight(1)).then(function (block) {\n          if (block) {\n            _this5.state.activeSide = 0;\n          }\n        });\n      }\n    } else {\n      this.startFlip(this.book.flipRight(1));\n    }\n  };\n\n  BookController.prototype.cmdFastForward = function cmdFastForward() {\n    this.startFlip(this.book.flipRight(5));\n  };\n\n  BookController.prototype.cmdSave = function cmdSave() {\n    window.open(this.p.downloadURL, '_blank');\n  };\n\n  BookController.prototype.cmdPrint = function cmdPrint() {\n    this.printer.print();\n  };\n\n  BookController.prototype.cmdFullScreen = function cmdFullScreen() {\n    if (!_FullScreen2.default.activated()) {\n      _FullScreen2.default.request(this.view.getParentContainer());\n    } else {\n      _FullScreen2.default.cancel();\n    }\n  };\n\n  BookController.prototype.cmdSmartPan = function cmdSmartPan() {\n    this.state.smartPan = !this.state.smartPan;\n    if (this.state.smartPan) {\n      this.orbit.minAzimuthAngle = 0;\n      this.orbit.maxAzimuthAngle = 0;\n      this.orbit.minPolarAngle = 0;\n      this.orbit.maxPolarAngle = Math.PI / 4;\n      this.bookWatcher.enabled = true;\n    } else {\n      this.orbit.minAzimuthAngle = -Infinity;\n      this.orbit.maxAzimuthAngle = Infinity;\n      this.orbit.minPolarAngle = 0;\n      this.orbit.maxPolarAngle = Math.PI;\n      this.bookWatcher.enabled = false;\n    }\n    this.updateView();\n  };\n\n  BookController.prototype.cmdSinglePage = function cmdSinglePage() {\n    this.state.singlePage = !this.state.singlePage;\n    this.setBookZoom(this.bookWatcher.scale);\n    this.updateView();\n  };\n\n  BookController.prototype.cmdSounds = function cmdSounds() {\n    if (this.sounds) {\n      this.sounds.togle();\n    }\n    this.updateView();\n  };\n\n  BookController.prototype.cmdStats = function cmdStats() {\n    this.state.stats = !this.state.stats;\n    if (this.state.stats) {\n      (0, _libs.$)(this.view.getContainer()).append(this.Stats.domElement);\n      this.visual.addRenderCallback(this.binds.stats);\n    } else {\n      (0, _libs.$)(this.view.getContainer()).find(this.Stats.domElement).remove();\n      this.visual.removeRenderCallback(this.binds.stats);\n    }\n    this.updateView();\n  };\n\n  BookController.prototype.cmdLightingUp = function cmdLightingUp() {\n    this.state.lighting = Math.min(this.state.lighting + this.p.lighting.delta, this.p.lighting.max);\n    this.visual.setExtraLighting(this.state.lighting);\n    this.updateView();\n  };\n\n  BookController.prototype.cmdLightingDown = function cmdLightingDown() {\n    this.state.lighting = Math.max(this.state.lighting - this.p.lighting.delta, this.p.lighting.min);\n    this.visual.setExtraLighting(this.state.lighting);\n    this.updateView();\n  };\n\n  BookController.prototype.goToPage = function goToPage(page) {\n    var _this6 = this;\n\n    if (this.p.rtl) {\n      page = this.book.getPages() - 1 - page;\n    }\n    var pageNum = Math.max(Math.min(page, this.book.getPages() - 1), 0);\n    this.state.activeSide = (pageNum + 1) % 2;\n    var target = Math.max(Math.min(page - 1 + page % 2, this.book.getPages() - 1), 0),\n        current = this.book.getPage(),\n        flips = [],\n        covs = 0;;\n    if (target != current) {\n      if (current === 0) {\n        flips.push(1);\n        current += 1;\n        ++covs;\n      } else if (current === this.book.getPages() - 1) {\n        flips.push(-1);\n        current -= 2;\n        ++covs;\n      }\n      var cv = 0;\n      if (target === 0) {\n        cv = -1;\n        target += 1;\n        ++covs;\n      } else if (target === this.book.getPages() - 1) {\n        cv = 1;\n        target -= 2;\n        ++covs;\n      }\n      if (target - current) {\n        flips.push(Math.ceil((target - current) / 2));\n      }\n      if (cv) {\n        flips.push(cv);\n      }\n    }\n\n    var setClb = function setClb(fl, time, clb) {\n      setTimeout(function () {\n        if (fl < 0) {\n          _this6.startFlip(_this6.book.flipLeft(-fl, clb));\n        } else {\n          _this6.startFlip(_this6.book.flipRight(fl, clb));\n        }\n      }, time);\n    };\n\n    if (covs === 2) {\n      setClb(flips[0], 0, function (block, progress, state) {\n        if (state == 'finish' && progress == 1) {\n          setClb(flips[flips.length - 1], 0);\n        }\n      });\n      setClb(flips[1], 500);\n    } else {\n      var time = 0;\n      for (var _iterator2 = flips, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var fl = _ref2;\n\n        setClb(fl, time);\n        time += 250;\n      }\n    }\n  };\n\n  BookController.prototype.startFlip = function startFlip(flipRes) {\n    var _this7 = this;\n\n    return flipRes ? flipRes.then(function (block) {\n      if (block) {\n        _this7.dispatchAsync({\n          type: 'startFlip'\n        });\n      }\n      return block;\n    }) : Promise.resolve(undefined);\n  };\n\n  BookController.prototype.endFlip = function endFlip(block) {\n    this.dispatchAsync({\n      type: 'endFlip'\n    });\n    return block;\n  };\n\n  BookController.prototype.getPage = function getPage() {\n    var page = this.book.getPage();\n    return page ? Math.min(this.book.getPage() + this.state.activeSide, this.book.getPages() - 1) : 0;\n  };\n\n  BookController.prototype.getPageForGUI = function getPageForGUI() {\n    var n = (this.state.singlePage ? this.getPage() : this.book.getPage()) + 1;\n    if (this.p.rtl) {\n      n = this.book.getPages() - n + 1;\n    }\n    return n;\n  };\n\n  BookController.prototype.inpPage = function inpPage(e, data) {\n    this.goToPage(data - 1);\n  };\n\n  BookController.prototype.updateViewIfState = function updateViewIfState(block, progress, state, type) {\n    if (state === 'init' || state === 'finish') {\n      setTimeout(this.updateView.bind(this), 100);\n    }\n    if (state === 'finish') {\n      this.endFlip(block);\n    }\n  };\n\n  BookController.prototype.updateViewState = function updateViewState() {\n    this.viewState = {\n      'cmdZoomIn': {\n        enable: this.canZoomIn(),\n        visible: this.actions['cmdZoomIn'].enabled,\n        active: false\n      },\n      'cmdZoomOut': {\n        enable: this.canZoomOut(),\n        visible: this.actions['cmdZoomOut'].enabled,\n        active: false\n      },\n      'cmdDefaultZoom': {\n        enable: this.canDefaultZoom(),\n        visible: this.actions['cmdDefaultZoom'].enabled,\n        active: this.canDefaultZoom() && Math.abs(this.bookWatcher.scale - this.p.scale.default) < this.p.eps\n      },\n      'cmdToc': {\n        enable: !!this.tocCtrl,\n        visible: this.actions['cmdToc'].enabled && this.tocCtrl,\n        active: this.tocCtrl && this.tocCtrl.visible\n      },\n      'inpPages': {\n        visible: true,\n        value: this.book.getPages()\n      },\n      'inpPage': {\n        visible: true,\n        enable: !this.book.isProcessing() && this.navigationControls,\n        value: this.getPageForGUI()\n      },\n      'cmdSave': {\n        enable: true,\n        visible: this.actions['cmdSave'].enabled && !!this.p.downloadURL,\n        active: false\n      },\n      'cmdPrint': {\n        enable: true,\n        visible: this.actions['cmdPrint'].enabled && !!this.printer,\n        active: false\n      },\n      'cmdFullScreen': {\n        enable: _FullScreen2.default.available(),\n        visible: this.actions['cmdFullScreen'].enabled,\n        active: _FullScreen2.default.available() && _FullScreen2.default.activated()\n      },\n      'widSettings': {\n        enable: true,\n        visible: this.actions['widSettings'].enabled,\n        active: false\n      },\n      'cmdSmartPan': {\n        enable: true,\n        visible: this.actions['cmdSmartPan'].enabled,\n        active: this.state.smartPan\n      },\n      'cmdSinglePage': {\n        enable: true,\n        visible: this.actions['cmdSinglePage'].enabled,\n        active: this.state.singlePage\n      },\n      'cmdSounds': {\n        enable: true,\n        visible: this.actions['cmdSounds'].enabled && !!this.sounds,\n        active: !!this.sounds && this.sounds.enabled\n      },\n      'cmdStats': {\n        enable: true,\n        visible: this.actions['cmdStats'].enabled,\n        active: this.state.stats\n      },\n      'cmdLightingUp': {\n        enable: Math.abs(this.state.lighting - this.p.lighting.max) > this.p.eps,\n        visible: this.actions['cmdLightingUp'].enabled,\n        active: false\n      },\n      'cmdLightingDown': {\n        enable: Math.abs(this.state.lighting - this.p.lighting.min) > this.p.eps,\n        visible: this.actions['cmdLightingDown'].enabled,\n        active: false\n      }\n    };\n\n    var left = this.book.getLeftFlipping(),\n        right = this.book.getRightFlipping();\n    var flippersEnable = {\n      cmdFastBackward: !!left && this.navigationControls,\n      cmdBackward: !!left && this.navigationControls,\n      cmdForward: !!right && this.navigationControls,\n      cmdFastForward: !!right && this.navigationControls\n    };\n    for (var _iterator3 = Object.keys(flippersEnable), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n      var _ref3;\n\n      if (_isArray3) {\n        if (_i3 >= _iterator3.length) break;\n        _ref3 = _iterator3[_i3++];\n      } else {\n        _i3 = _iterator3.next();\n        if (_i3.done) break;\n        _ref3 = _i3.value;\n      }\n\n      var name = _ref3;\n\n      this.viewState[name] = {\n        enable: flippersEnable[name],\n        visible: this.actions[name].enabled,\n        active: false\n      };\n    };\n  };\n\n  BookController.prototype.updateView = function updateView() {\n    if (this.view) {\n      this.updateViewState();\n      for (var _iterator4 = Object.keys(this.viewState), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i4 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i4++];\n        } else {\n          _i4 = _iterator4.next();\n          if (_i4.done) break;\n          _ref4 = _i4.value;\n        }\n\n        var name = _ref4;\n\n        this.view.setState(name, this.viewState[name]);\n      }\n    }\n  };\n\n  BookController.prototype.getActions = function getActions() {\n    var _this8 = this;\n\n    var isSwipping = function isSwipping(name) {\n      return _this8.actions.touchCmdSwipe.enabled && _this8.actions.touchCmdSwipe.code === _this8.actions[name].code && _this8.state.smartPan && _this8.bookWatcher.scale <= 1;\n    },\n        cmds = {};\n\n    var _loop = function _loop(name) {\n      if (name.indexOf('cmd') === 0) {\n        cmds[name] = {\n          activate: function activate() {\n            if (_this8.viewState && _this8.viewState[name].enable) {\n              _this8[name].apply(_this8, arguments);\n            }\n          }\n        };\n      }\n    };\n\n    for (var name in this) {\n      _loop(name);\n    }\n\n    return _extends({}, cmds, {\n      cmdPanLeft: {\n        activate: function activate(e) {\n          return _this8.orbit.actions.pan(e, {\n            state: 'move',\n            dx: -_this8.p.pan.speed,\n            dy: 0\n          });\n        }\n      },\n      cmdPanRight: {\n        activate: function activate(e) {\n          return _this8.orbit.actions.pan(e, {\n            state: 'move',\n            dx: _this8.p.pan.speed,\n            dy: 0\n          });\n        }\n      },\n      cmdPanUp: {\n        activate: function activate(e) {\n          return _this8.orbit.actions.pan(e, {\n            state: 'move',\n            dx: 0,\n            dy: -_this8.p.pan.speed\n          });\n        }\n      },\n      cmdPanDown: {\n        activate: function activate(e) {\n          return _this8.orbit.actions.pan(e, {\n            state: 'move',\n            dx: 0,\n            dy: _this8.p.pan.speed\n          });\n        }\n      },\n      mouseCmdRotate: {\n        activate: this.orbit.actions.rotate\n      },\n      mouseCmdDragZoom: {\n        activate: function activate(e, data) {\n          if (data.dy > 0) {\n            _this8.cmdZoomOut();\n          } else if (data.dy < 0) {\n            _this8.cmdZoomIn();\n          }\n        }\n      },\n      mouseCmdPan: {\n        activate: this.orbit.actions.pan\n      },\n      mouseCmdWheelZoom: {\n        activate: function activate(e) {\n          e.preventDefault();\n          if (e.deltaY < 0) {\n            _this8.cmdZoomOut();\n          } else if (e.deltaY > 0) {\n            _this8.cmdZoomIn();\n          }\n        }\n      },\n      touchCmdRotate: {\n        activate: function activate(e, data) {\n          if (!isSwipping('touchCmdRotate')) {\n            e.preventDefault();\n            _this8.orbit.actions.rotate(e, data);\n          }\n        }\n      },\n      touchCmdZoom: {\n        activate: function activate(e, data) {\n          if (!isSwipping('touchCmdZoom')) {\n            e.preventDefault();\n            if (data.dy > 0) {\n              _this8.cmdZoomOut();\n            } else if (data.dy < 0) {\n              _this8.cmdZoomIn();\n            }\n          }\n        }\n      },\n      touchCmdPan: {\n        activate: function activate(e, data) {\n          if (!isSwipping('touchCmdPan')) {\n            e.preventDefault();\n            _this8.orbit.actions.pan(e, data);\n          }\n        }\n      },\n      touchCmdSwipe: {\n        activate: function activate(e, data) {\n          if (isSwipping('touchCmdSwipe')) {\n            e.preventDefault();\n            if (data.state === 'start') {\n              var touch = (e.touches || e.originalEvent.touches)[_this8.actions.touchCmdSwipe.code - 1];\n              _this8.swipeData = {\n                handled: false,\n                x0: touch.pageX,\n                y0: touch.pageY,\n                x: touch.pageX,\n                y: touch.pageY\n              };\n            } else if (data.state === 'move') {\n              if (!_this8.swipeData.handled) {\n                _this8.swipeData = _extends({}, _this8.swipeData, {\n                  x: _this8.swipeData.x + data.dx,\n                  y: _this8.swipeData.y + data.dy\n                });\n                if (Math.abs(_this8.swipeData.x0 - _this8.swipeData.x) > 100) {\n                  _this8.swipeData.x0 > _this8.swipeData.x ? _this8.cmdForward() : _this8.cmdBackward();\n                  _this8.swipeData.handled = true;\n                }\n              }\n            } else {\n              delete _this8.swipeData;\n            }\n          }\n        }\n      },\n      widSettings: {\n        activate: function activate() {\n          return undefined;\n        }\n      }\n    });\n  };\n\n  BookController.prototype.bindActions = function bindActions() {\n    this.eToA = new _EventsToActions2.default((0, _libs.$)(this.visual.element));\n    this.eToA.addAction(function (e) {\n      return e.preventDefault();\n    }, 'contextmenu', _EventsToActions2.default.mouseButtons.Right, 0);\n\n    this.actions = this.getActions();\n    for (var _iterator5 = Object.keys(this.actions), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n      var _ref5;\n\n      if (_isArray5) {\n        if (_i5 >= _iterator5.length) break;\n        _ref5 = _iterator5[_i5++];\n      } else {\n        _i5 = _iterator5.next();\n        if (_i5.done) break;\n        _ref5 = _i5.value;\n      }\n\n      var name = _ref5;\n\n      var action = _extends({}, this.actions[name], this.p.actions[name]);\n      this.actions[name] = action;\n      if (action.enabled) {\n        var flags = action.flags || 0;\n        if (action.type) {\n          this.eToA.addAction(action.activate, action.type, action.code, flags);\n        } else if (action.code !== undefined) {\n          this.eToA.addAction(action.activate, 'keydown', action.code, flags);\n        }\n      }\n    }\n  };\n\n  BookController.prepareProps = function prepareProps(props) {\n    return BookController.calcProps(BookController.mergeProps((0, _bookController.props)(), props));\n  };\n\n  BookController.setActions = function setActions(props, actions) {\n    for (var _iterator6 = Object.keys(actions || {}), _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n      var _ref6;\n\n      if (_isArray6) {\n        if (_i6 >= _iterator6.length) break;\n        _ref6 = _iterator6[_i6++];\n      } else {\n        _i6 = _iterator6.next();\n        if (_i6.done) break;\n        _ref6 = _i6.value;\n      }\n\n      var name = _ref6;\n\n      props.actions[name] = _extends({}, props.actions[name], actions[name]);\n    }\n  };\n\n  BookController.mergeProps = function mergeProps(first, second) {\n    second = second || {};\n    function merge(first, second) {\n      second = second || {};\n      var props = _extends({}, first, second);\n      for (var _iterator7 = Object.keys(first), _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n        var _ref7;\n\n        if (_isArray7) {\n          if (_i7 >= _iterator7.length) break;\n          _ref7 = _iterator7[_i7++];\n        } else {\n          _i7 = _iterator7.next();\n          if (_i7.done) break;\n          _ref7 = _i7.value;\n        }\n\n        var name = _ref7;\n\n        if (_typeof(first[name]) === 'object') {\n          props[name] = merge(first[name], second[name]);\n        }\n      }\n      return props;\n    }\n    var props = merge(first, second);\n    BookController.setActions(props, first.actions);\n    BookController.setActions(props, second.actions);\n    return props;\n  };\n\n  BookController.calcProps = function calcProps(props) {\n    props.scale.delta = (props.scale.max - props.scale.min) / props.scale.levels;\n    props.lighting.delta = (props.lighting.max - props.lighting.min) / props.lighting.levels;\n    return props;\n  };\n\n  return BookController;\n}(_Controller3.default);\n\nexports.default = BookController;\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(1);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BookPrinter = function () {\n  function BookPrinter(context, book, styleSheet) {\n    _classCallCheck(this, BookPrinter);\n\n    this.book = book;\n    this.styleSheet = styleSheet;\n    this.wnd = context.wnd;\n    this.doc = context.doc;\n    this.pageCallback = book.getPageCallback();\n    var test = this.pageCallback(0);\n    this.type = test.type;\n    if (this.type === 'pdf') {\n      this.pdfSrc = test.src.src;\n    }\n  }\n\n  BookPrinter.prototype.cancel = function cancel() {\n    this.canceled = true;\n  };\n\n  BookPrinter.prototype.dispose = function dispose() {\n    if (this.frame) {\n      this.frame.remove();\n      delete this.frame;\n    }\n  };\n\n  BookPrinter.prototype.print = function print() {\n    var _this = this;\n\n    delete this.canceled;\n    if (this.type === 'pdf') {\n      (function () {\n        var printWnd = void 0,\n            callManually = false;\n        if (_this.useIFrame()) {\n          callManually = !!_this.frame;\n          if (!_this.frame) {\n            _this.frame = (0, _libs.$)('<iframe src=\"' + _this.pdfSrc + '\" style=\"display: none;\"></iframe>').appendTo(_this.doc.body);\n          }\n          printWnd = _this.frame[0].contentWindow;\n        } else {\n          printWnd = _this.wnd.open(_this.pdfSrc);\n        }\n        if (callManually) {\n          printWnd.print();\n        } else {\n          (0, _libs.$)(printWnd).on('load', function () {\n            try {\n              printWnd.print();\n            } catch (e) {\n              console.error(e);\n            }\n          });\n        }\n      })();\n    } else {\n      this.renderContent().then(function (content) {\n        var printWnd = _this.wnd.open(),\n            printDoc = printWnd.document,\n            html = '\\n            <!DOCTYPE html>\\n            <html>\\n              <head>\\n                <meta charset=\"utf-8\">\\n                <title>3D FlipBook - Printing</title>\\n                ' + content.head + '\\n                <script type=\"text/javascript\">\\n                  function printDocument() {\\n                    window.print();\\n                    window.close();\\n                  }\\n                  function init() {\\n                    setTimeout(printDocument, 100);\\n                  }\\n                </script>\\n              </head>\\n              <body onload=\"init()\">\\n                ' + content.body + '\\n              </body>\\n            </html>\\n          ';\n        printDoc.open();\n        printDoc.write(html);\n        printDoc.close();\n      }).catch(function (e) {\n        return console.warn('3D FlipBook - Printing was canceled');\n      });\n    }\n  };\n\n  BookPrinter.prototype.progress = function progress(v) {\n    if (this.canceled) {\n      throw 'Cancel Printing';\n    }\n    if (this.onProgress) {\n      this.onProgress(Math.floor(v * 100));\n    }\n  };\n\n  BookPrinter.prototype.renderContent = function renderContent() {\n    var _this2 = this;\n\n    var pages = this.book.getPages(),\n        head = new Set(),\n        body = [];\n    var done = Promise.resolve();\n\n    var _loop = function _loop(page) {\n      var info = _this2.pageCallback(page);\n      if (info.type === 'image') {\n        done = done.then(function () {\n          _this2.progress(page / pages);\n          return _this2.renderImage(head, body, info.src);\n        });\n      } else if (info.type === 'html') {\n        done = done.then(function () {\n          _this2.progress(page / pages);\n          return _this2.renderHtml(head, body, info.src);\n        });\n      }\n    };\n\n    for (var page = 0; page < pages; ++page) {\n      _loop(page);\n    }\n    return done.then(function () {\n      _this2.progress(1);\n      return { head: _this2.renderHead(head), body: body.join('\\n') };\n    });\n  };\n\n  BookPrinter.wrap = function wrap(content) {\n    return '<div class=\"fb3d-printer-page\">' + content + '</div>';\n  };\n\n  BookPrinter.prototype.renderImage = function renderImage(head, body, src) {\n    body.push(BookPrinter.wrap('<img src=\"' + src + '\" />'));\n  };\n\n  BookPrinter.prototype.renderHtml = function renderHtml(head, body, src) {\n    return new Promise(function (resolve, reject) {\n      _libs.$.get(src, function (html) {\n        var links = html.match(/<link.*?>/ig) || [];\n        for (var _iterator = links, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var link = _ref;\n\n          if (link.match(/stylesheet/i)) {\n            var href = link.match(/href\\s*=\\s*['\"](.*)['\"]/i);\n            if (href) {\n              head.add(href[1]);\n            }\n          }\n        }\n        var content = html.match(/<body.*?>([\\S\\s]*)<\\/body>/i);\n        if (content) {\n          body.push(BookPrinter.wrap(content[1]));\n        }\n        resolve();\n      }).fail(function (e) {\n        console.error(e.responseText);\n        reject();\n      });\n    });\n  };\n\n  BookPrinter.prototype.renderHead = function renderHead(head) {\n    var content = [];\n    head.forEach(function (k) {\n      return content.push('<link rel=\"stylesheet\" href=\"' + k + '\">');\n    });\n    content.push(this.styleSheet ? '<link rel=\"stylesheet\" href=\"' + this.styleSheet + '\">' : BookPrinter.defaultStyleSheet());\n    return content.join('\\n');\n  };\n\n  BookPrinter.prototype.useIFrame = function useIFrame() {\n    var isChromium = this.wnd.chrome,\n        winNav = this.wnd.navigator,\n        vendorName = winNav.vendor,\n        isIEedge = winNav.userAgent.indexOf(\"Edge\") > -1,\n        isIOSChrome = winNav.userAgent.match(\"CriOS\");\n    var use = void 0;\n    if (isIOSChrome) {\n      use = true;\n    } else if (isChromium && vendorName === 'Google Inc.' && !isIEedge) {\n      use = true;\n    } else {\n      use = false;\n    }\n    return use;\n  };\n\n  BookPrinter.defaultStyleSheet = function defaultStyleSheet() {\n    return '\\n      <style type=\"text/css\">\\n        body {\\n          margin: 0;\\n          padding: 0;\\n        }\\n        .fb3d-printer-page {\\n          page-break-after: always;\\n        }\\n      </style>\\n    ';\n  };\n\n  return BookPrinter;\n}();\n\nexports.default = BookPrinter;\n\n/***/ },\n/* 29 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(1);\n\nvar _View2 = __webpack_require__(65);\n\nvar _View3 = _interopRequireDefault(_View2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BookView = function (_View) {\n  _inherits(BookView, _View);\n\n  function BookView(container, onLoad, template, handler) {\n    _classCallCheck(this, BookView);\n\n    return _possibleConstructorReturn(this, _View.call(this, container, onLoad, template, handler));\n  }\n\n  BookView.prototype.initView = function initView() {\n    this.view = this.container.find('.view');\n    this.bookmarksView = this.container.find('.widBookmarks');\n    this.thumbnailsView = this.container.find('.widThumbnails');\n    this.searchView = this.container.find('.widSearch');\n  };\n\n  BookView.prototype.getHandlers = function getHandlers(id) {\n    var _this2 = this;\n\n    var handlers = void 0;\n    if (id === 'inpPage') {\n      handlers = [{\n        inpPage: function inpPage(e, data) {\n          return _this2.callLater(_View.prototype.getHandlers.call(_this2, id), id, e, data, BookView.PAGE_HANDLER_DELAY);\n        }\n      }];\n    } else {\n      handlers = _View.prototype.getHandlers.call(this, id);\n    }\n    return handlers;\n  };\n\n  BookView.prototype.onItemStateChanged = function onItemStateChanged(id, state) {\n    if (id === 'cmdFullScreen') {\n      if (state.active) {\n        this.parentContainer.addClass('fullscreen');\n      } else {\n        this.parentContainer.removeClass('fullscreen');\n      }\n    }\n  };\n\n  BookView.prototype.getView = function getView() {\n    return this.view;\n  };\n\n  BookView.prototype.getBookmarksView = function getBookmarksView() {\n    return this.bookmarksView;\n  };\n\n  BookView.prototype.getThumbnailsView = function getThumbnailsView() {\n    return this.thumbnailsView;\n  };\n\n  BookView.prototype.getSearchView = function getSearchView() {\n    return this.searchView;\n  };\n\n  BookView.prototype.getForms = function getForms() {\n    return [];\n  };\n\n  BookView.prototype.getLinks = function getLinks() {\n    return ['cmdZoomIn', 'cmdZoomOut', 'cmdDefaultZoom', 'cmdToc', 'cmdFastBackward', 'cmdBackward', 'cmdForward', 'cmdFastForward', 'cmdSave', 'cmdPrint', 'cmdFullScreen', 'cmdSmartPan', 'cmdSinglePage', 'cmdSounds', 'cmdStats', 'cmdLightingUp', 'cmdLightingDown', 'cmdCloseToc', 'cmdBookmarks', 'cmdSearch', 'cmdThumbnails'];\n  };\n\n  BookView.prototype.getWidgets = function getWidgets() {\n    return ['widLoadingProgress', 'widFloatWnd', 'widTocMenu', 'widBookmarks', 'widThumbnails', 'widSearch', 'widSettings', 'widLoading'];\n  };\n\n  BookView.prototype.getInputs = function getInputs() {\n    return ['inpPage', 'inpPages'];\n  };\n\n  BookView.prototype.getTexts = function getTexts() {\n    return ['txtLoadingProgress'];\n  };\n\n  BookView.prototype.getTemplate = function getTemplate() {\n    return {\n      html: 'templates/default-book-view.html',\n      styles: ['css/black-book-view.css'],\n      links: [{\n        rel: 'stylesheet',\n        href: 'css/font-awesome.min.css'\n      }],\n      script: 'js/default-book-view.js'\n    };\n  };\n\n  return BookView;\n}(_View3.default);\n\nBookView.PAGE_HANDLER_DELAY = 1000;\nexports.default = BookView;\n\n/***/ },\n/* 30 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _BookPropsBuilder2 = __webpack_require__(9);\n\nvar _BookPropsBuilder3 = _interopRequireDefault(_BookPropsBuilder2);\n\nvar _ImageFactory = __webpack_require__(8);\n\nvar _ImageFactory2 = _interopRequireDefault(_ImageFactory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ClbBookPropsBuilder = function (_BookPropsBuilder) {\n  _inherits(ClbBookPropsBuilder, _BookPropsBuilder);\n\n  function ClbBookPropsBuilder(context, pageCallback, pages, onReady) {\n    _classCallCheck(this, ClbBookPropsBuilder);\n\n    var _this = _possibleConstructorReturn(this, _BookPropsBuilder.call(this, onReady));\n\n    _this.calcSheets(pages);\n    _this.pageCallback = pageCallback;\n    _this.binds = {\n      pageCallback: pageCallback.bind(_this)\n    };\n    _this.imageFactory = new _ImageFactory2.default(context);\n\n    if (pages > 0) {\n      (function () {\n        var test = _this.imageFactory.build(pageCallback(0), 0, _this.defaults.sheet.widthTexels, _this.defaults.sheet.heightTexels, _this.defaults.sheet.color);\n        test.onLoad = function () {\n          _this.calcProps(test.width, test.height);\n          test.dispose();\n          _this.ready();\n        };\n      })();\n    } else {\n      _this.props = _this.defaults;\n      _this.ready();\n    }\n    return _this;\n  }\n\n  return ClbBookPropsBuilder;\n}(_BookPropsBuilder3.default);\n\nexports.default = ClbBookPropsBuilder;\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _SheetBlock2 = __webpack_require__(10);\n\nvar _SheetBlock3 = _interopRequireDefault(_SheetBlock2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Cover = function (_SheetBlock) {\n  _inherits(Cover, _SheetBlock);\n\n  function Cover(visual, p, angle, state) {\n    _classCallCheck(this, Cover);\n\n    return _possibleConstructorReturn(this, _SheetBlock.call(this, visual, p, 0, 1, angle, state));\n  }\n\n  Cover.prototype.getProps = function getProps() {\n    return _extends({}, this.p.cover, {\n      sheets: 1\n    });\n  };\n\n  Cover.prototype.loadPoints = function loadPoints() {\n    var openedInterpolationIndeces = [[2, 3, 4], [2, 3, 4, 5, 6]],\n        closedInterpolationIndeces = [[0, 1, 2], [0, 1, 2]],\n        interpolationPoints = [{\n      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0, 0.2831, 0.6256, 0.8082, 0.9909], [0, 0.2603, 0.5936, 0.7763, 0.9589], [0, 0.1370, 0.3881, 0.5342, 0.6758], [0, 0, 0, 0, 0]],\n      y: [[0, 0, 0, 0, 0], [0, 0.02, 0.005, -0.001, -0.0025], [0, 0.04, 0.01, -0.002, -0.005], [0, 0.2466, 0.4795, 0.5708, 0.6758], [0, 0.2877, 0.6347, 0.8174, 1.0000]]\n    }, {\n      x: [[0, 0.2877, 0.6347, 0.8174, 1.0000], [0, 0.2831, 0.6256, 0.8082, 0.9909], [0, 0.2603, 0.5936, 0.7763, 0.9589], [0.000, 0.233, 0.563, 0.746, 0.927], [0.000, 0.144, 0.433, 0.613, 0.796], [0.000, 0.070, 0.288, 0.455, 0.626], [0, 0, 0, 0, 0]],\n      y: [[0, 0, 0, 0, 0], [0, 0.02, 0.005, -0.001, -0.0025], [0, 0.04, 0.01, -0.002, -0.005], [0.000, 0.168, 0.269, 0.270, 0.255], [0.000, 0.245, 0.435, 0.458, 0.460], [0.000, 0.278, 0.544, 0.614, 0.673], [0, 0.2877, 0.6347, 0.8174, 1.0000]]\n    }];\n    return {\n      interpolationPoints: interpolationPoints,\n      openedInterpolationIndeces: openedInterpolationIndeces,\n      closedInterpolationIndeces: closedInterpolationIndeces\n    };\n  };\n\n  return Cover;\n}(_SheetBlock3.default);\n\nexports.default = Cover;\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _SheetCssLayer = __webpack_require__(37);\n\nvar _SheetCssLayer2 = _interopRequireDefault(_SheetCssLayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CssLayersManager = function () {\n  function CssLayersManager(book) {\n    _classCallCheck(this, CssLayersManager);\n\n    this.book = book;\n    this.props = book.p.cssLayerProps;\n    this.visual = book.visual;\n    this.pageManager = book.pageManager;\n    this.wrappers = {};\n  }\n\n  CssLayersManager.prototype.getActives = function getActives() {\n    var page = this.book.getPage(),\n        pages = this.book.getPages();\n    return page === 0 || page === pages - 1 ? [page] : [page, page + 1];\n  };\n\n  CssLayersManager.prototype.dispose = function dispose() {\n    for (var _iterator = Object.values(this.wrappers), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var w = _ref;\n\n      w.layers.forEach(function (l) {\n        return l.dispose();\n      });\n    }\n    delete this.wrappers;\n  };\n\n  CssLayersManager.prototype.show = function show() {\n    var _this = this;\n\n    this.hidden = false;\n\n    var _loop = function _loop() {\n      if (_isArray2) {\n        if (_i2 >= _iterator2.length) return 'break';\n        _ref2 = _iterator2[_i2++];\n      } else {\n        _i2 = _iterator2.next();\n        if (_i2.done) return 'break';\n        _ref2 = _i2.value;\n      }\n\n      var n = _ref2;\n\n      var w = _this.wrappers[n];\n      if (w) {\n        if (w.state === 'ready' && w.layers.length) {\n          (function () {\n            var block = _this.book.getBlockByPage(n);\n            w.layers.forEach(function (l) {\n              if (l.isHidden()) {\n                l.update(block);\n                l.show();\n              }\n            });\n          })();\n        }\n      } else {\n        (function () {\n          var w = _this.wrappers[n] = {\n            state: 'loading',\n            layers: []\n          };\n          Promise.resolve().then(function () {\n            _this.pageManager.getLayers(n, function (layers) {\n              if (layers.length && _this.wrappers) {\n                var block = _this.book.getBlockByPage(n);\n                for (var _iterator3 = layers, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n                  var _ref3;\n\n                  if (_isArray3) {\n                    if (_i3 >= _iterator3.length) break;\n                    _ref3 = _iterator3[_i3++];\n                  } else {\n                    _i3 = _iterator3.next();\n                    if (_i3.done) break;\n                    _ref3 = _i3.value;\n                  }\n\n                  var l = _ref3;\n\n                  var sl = new _SheetCssLayer2.default(_this.visual, block, _this.props);\n                  w.layers.push(sl);\n                  sl.set(l.css, l.html, l.js);\n                }\n                setTimeout(function () {\n                  if (!_this.hidden && ~_this.getActives().indexOf(n)) {\n                    w.layers.forEach(function (l) {\n                      return l.show();\n                    });\n                  }\n                }, 10);\n              }\n              w.state = 'ready';\n            });\n          });\n        })();\n      }\n    };\n\n    for (var _iterator2 = this.getActives(), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      var _ret = _loop();\n\n      if (_ret === 'break') break;\n    }\n  };\n\n  CssLayersManager.prototype.hide = function hide() {\n    this.hidden = true;\n    var wait = [];\n    for (var _iterator4 = Object.values(this.wrappers), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n      var _ref4;\n\n      if (_isArray4) {\n        if (_i4 >= _iterator4.length) break;\n        _ref4 = _iterator4[_i4++];\n      } else {\n        _i4 = _iterator4.next();\n        if (_i4.done) break;\n        _ref4 = _i4.value;\n      }\n\n      var _w = _ref4;\n\n      _w.layers.forEach(function (l) {\n        return wait.push(l.hide());\n      });\n    }\n    return Promise.all(wait);\n  };\n\n  return CssLayersManager;\n}();\n\nexports.default = CssLayersManager;\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(1);\n\nvar _Cache = __webpack_require__(14);\n\nvar _Cache2 = _interopRequireDefault(_Cache);\n\nvar _LoadingAnimation = __webpack_require__(52);\n\nvar _LoadingAnimation2 = _interopRequireDefault(_LoadingAnimation);\n\nvar _ImageFactory = __webpack_require__(8);\n\nvar _ImageFactory2 = _interopRequireDefault(_ImageFactory);\n\nvar _BaseMathUtils = __webpack_require__(2);\n\nvar _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\nvar _TextureAnimator = __webpack_require__(60);\n\nvar _TextureAnimator2 = _interopRequireDefault(_TextureAnimator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PageManager = function () {\n  function PageManager(visual, book, p) {\n    _classCallCheck(this, PageManager);\n\n    this.visual = visual;\n    this.book = book;\n    this.pageQuery = '';\n    this.p = p;\n    this.pageCache = new _Cache2.default(p.cachedPages);\n    this.resourcesCache = new _Cache2.default();\n    this.canvas = (0, _libs.$)('<canvas>')[0];\n    this.imageFactory = new _ImageFactory2.default(_extends({}, visual, { dispatchEvent: book.dispatchEvent.bind(book), renderCanvas: this.canvas, renderCanvasCtx: this.canvas.getContext('2d') }), this.resourcesCache);\n\n    this.loadings = [];\n    this.renderQueue = [];\n    this.pageRequests = [];\n    this.predictedRequests = [];\n\n    this.tmpMaterial = new _libs.THREE.MeshBasicMaterial();\n    visual.addObject(new _libs.THREE.Mesh(new _libs.THREE.PlaneGeometry(0, 0), this.tmpMaterial));\n\n    this.loadingAnimation = true;\n    this.loading = {};\n    this.loading[p.cover.color] = this.createLoadingTexture(p.cover);\n    if (p.page.color !== p.cover.color) {\n      this.loading[p.page.color] = this.createLoadingTexture(p.page);\n    }\n\n    this.turnOnEvents();\n\n    visual.addRenderCallback(this.update.bind(this));\n\n    setTimeout(this.updateRenderQueue.bind(this), 250);\n  }\n\n  PageManager.prototype.createLoadingTexture = function createLoadingTexture(p) {\n    var spriteTiles = 6,\n        scale = Math.sqrt(4.5 * 210 * 4.5 * 297 / (p.widthTexels * p.heightTexels)),\n        animation = new _LoadingAnimation2.default(scale * p.widthTexels, scale * p.heightTexels, p.color),\n        animator = new _TextureAnimator2.default(animation.createSprite(spriteTiles), spriteTiles, 1, spriteTiles, 0.2);\n    animation.dispose();\n    return animator;\n  };\n\n  PageManager.prototype.dispose = function dispose() {\n    this.turnOffEvents();\n    for (var _iterator = Object.keys(this.loading), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var color = _ref;\n\n      this.loading[color].dispose();\n    }\n    delete this.loading;\n    this.resourcesCache.dispose();\n    this.pageCache.dispose();\n    this.canvas.height = this.canvas.width = 0;\n    delete this.canvas;\n  };\n\n  PageManager.prototype.isCover = function isCover(n) {\n    return n < 2 || n >= 2 * (this.p.sheets + 1);\n  };\n\n  PageManager.prototype.isMobile = function isMobile() {\n    return (this.visual.wnd.devicePixelRatio || 1) > 1;\n  };\n\n  PageManager.prototype.getPageState = function getPageState(n) {\n    var object = this.pageCache.get(n);\n    return object ? object.state : undefined;\n  };\n\n  PageManager.prototype.enableLoadingAnimation = function enableLoadingAnimation(enable) {\n    this.loadingAnimation = enable;\n    for (var _iterator2 = this.loadings, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      if (_isArray2) {\n        if (_i2 >= _iterator2.length) break;\n        _ref2 = _iterator2[_i2++];\n      } else {\n        _i2 = _iterator2.next();\n        if (_i2.done) break;\n        _ref2 = _i2.value;\n      }\n\n      var o = _ref2;\n\n      this.setupMaterial(o);\n    }\n  };\n\n  PageManager.prototype.update = function update(dt) {\n    if (this.loadingAnimation) {\n      var loading = {};\n      for (var _iterator3 = this.loadings, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) break;\n          _ref3 = _i3.value;\n        }\n\n        var o = _ref3;\n\n        if (o.isActive()) {\n          loading[o.color] = true;;\n        }\n      }\n      for (var _iterator4 = Object.keys(loading), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i4 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i4++];\n        } else {\n          _i4 = _iterator4.next();\n          if (_i4.done) break;\n          _ref4 = _i4.value;\n        }\n\n        var color = _ref4;\n\n        this.loading[color].update(dt);\n      }\n    }\n  };\n\n  PageManager.prototype.removeFromLoadings = function removeFromLoadings(o) {\n    var i = this.loadings.indexOf(o);\n    if (~i) {\n      this.loadings.splice(i, 1);\n    }\n  };\n\n  PageManager.prototype.removeFromRenderQueue = function removeFromRenderQueue(o) {\n    var i = this.renderQueue.indexOf(o);\n    if (~i) {\n      this.renderQueue.splice(i, 1);\n    }\n  };\n\n  PageManager.prototype.refreshPageQuery = function refreshPageQuery(n) {\n    var query = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n    this.pageQuery = query;\n    var object = this.pageCache.get(n);\n    if (object && object.wrapper && object.wrapper.setQuery) {\n      if (!this.pageCache.remove(n)) {\n        object.wrapper.setQuery(query);\n        this.pushInRenderQueue(object);\n      }\n    }\n  };\n\n  PageManager.prototype.refreshZoom = function refreshZoom() {\n    var _this = this;\n\n    if (this.p.autoResolution.enable) {\n      (function () {\n        var es = [];\n        _this.pageCache.forEach(function (e) {\n          es.push(e);\n        });\n        es.forEach(function (e) {\n          var object = e[1];\n          if (object && object.wrapper) {\n            if (!_this.pageCache.remove(e[0])) {\n              _this.pushInRenderQueue(object);\n            }\n          }\n        });\n      })();\n    }\n  };\n\n  PageManager.prototype.getLayers = function getLayers(n, clb) {\n    var _this2 = this;\n\n    if (this.p.cssLayersLoader) {\n      this.p.cssLayersLoader(n, function () {\n        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n\n        var object = _this2.pageCache.get(n);\n        if (object) {\n          if (object.state !== 'active') {\n            object.pendings.push({ clb: clb, args: args });\n          } else {\n            clb.apply(undefined, args);\n          }\n        }\n      });\n    } else {\n      clb([]);\n    }\n  };\n\n  PageManager.prototype.resolvePendings = function resolvePendings(pendings) {\n    for (var _iterator5 = pendings, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n      var _ref5;\n\n      if (_isArray5) {\n        if (_i5 >= _iterator5.length) break;\n        _ref5 = _iterator5[_i5++];\n      } else {\n        _i5 = _iterator5.next();\n        if (_i5.done) break;\n        _ref5 = _i5.value;\n      }\n\n      var p = _ref5;\n\n      try {\n        p.clb.apply(p, p.args);\n      } catch (e) {\n        console.error(e);\n      }\n    }\n    pendings.splice(0, pendings.length);\n  };\n\n  PageManager.prototype.rtlPageN = function rtlPageN(n) {\n    return this.p.rtl ? 2 * (this.p.sheets + 2) - 1 - n : n;\n  };\n\n  PageManager.prototype.load = function load(material, n) {\n    var _this3 = this;\n\n    var pi = this.p.pageCallback(this.rtlPageN(n)),\n        p = this.isCover(n) ? this.p.cover : this.p.page;\n    var o = {\n      n: n,\n      texture: new _libs.THREE.Texture(),\n      wrapper: null,\n      state: 'loading',\n      locked: function locked(n) {\n        return o.state === 'loading' || o.state === 'rendering' || _this3.book.isActivePage(n);\n      },\n      color: p.color,\n      isActive: function isActive() {\n        return _this3.book.isActivePage(n);\n      },\n      isTop: function isTop() {\n        return ~_this3.book.getTopPages().indexOf(n);\n      },\n      dispose: function dispose() {\n        _this3.removeFromLoadings(o);\n        _this3.removeFromRenderQueue(o);\n        if (o.wrapper && o.wrapper.dispose) {\n          o.wrapper.dispose();\n        }\n        o.texture.dispose();\n        delete o.texture;\n        delete o.wrapper;\n      },\n      pendings: []\n    };\n    o.texture.minFilter = _libs.THREE.LinearFilter;\n    this.loadings.push(o);\n    this.setMaterial(o, material);\n\n    Promise.resolve().then(function () {\n      if (o.texture) {\n        o.widthTexels = pi.widthTexels || p.widthTexels;\n        o.heightTexels = pi.heightTexels || p.heightTexels;\n        var res = _this3.calcResolution(o);\n        o.wrapper = _this3.imageFactory.build(pi, pi.number === undefined ? n : pi.number, res.width, res.height, p.color, _this3.p.injector);\n        if (o.wrapper.setQuery) {\n          o.wrapper.setQuery(_this3.pageQuery);\n        }\n        o.simulate = pi.interactive ? (o.wrapper.simulate || function () {\n          return undefined;\n        }).bind(o.wrapper) : undefined;\n        o.wrapper.onLoad = function () {\n          _this3.pushInRenderQueue(o);\n          _this3.book.dispatchEvent({\n            type: 'loadedPage',\n            page: n\n          });\n        };\n        o.wrapper.onChange = function (image) {\n          if (o.texture) {\n            _this3.removeFromLoadings(o);\n            if (o.material) {\n              o.material.map = o.texture;\n              o.material.color = new _libs.THREE.Color(0xFFFFFF);\n              o.material.needsUpdate = true;\n            }\n            o.texture.image = image;\n            o.texture.needsUpdate = true;\n            o.texture.onUpdate = function () {\n              if (o.state !== 'queuedForRender') {\n                o.state = 'active';\n                _this3.resolvePendings(o.pendings);\n              }\n              delete _this3.rendering;\n              //this.updateRenderQueue();\n            };\n            _this3.tmpMaterial.map = o.texture;\n            _this3.tmpMaterial.needsUpdate = true;\n          }\n        };\n      }\n    });\n    this.book.dispatchEvent({\n      type: 'loadPage',\n      page: n\n    });\n    return this.pageCache.put(n, o);\n  };\n\n  PageManager.prototype.isSinglePage = function isSinglePage(o) {\n    return this.p.singlePage || !o.n || o.n === this.book.getPages() - 1;\n  };\n\n  PageManager.prototype.calcResolution = function calcResolution(o) {\n    var res = void 0;\n    if (this.p.autoResolution.enable) {\n      var k = Math.min((this.isSinglePage(o) ? 1 : 0.5) * this.visual.width() / o.widthTexels, this.visual.height() / o.heightTexels);\n      res = {\n        width: this.p.autoResolution.k * this.p.zoom * k * o.widthTexels,\n        height: this.p.autoResolution.k * this.p.zoom * k * o.heightTexels\n      };\n    } else {\n      res = {\n        width: o.widthTexels,\n        height: o.heightTexels\n      };\n    }\n    return res;\n  };\n\n  PageManager.prototype.pushInRenderQueue = function pushInRenderQueue(o) {\n    if (o.state !== 'queuedForRender') {\n      o.state = 'queuedForRender';\n      this.renderQueue.push(o);\n      // this.updateRenderQueue();\n    }\n  };\n\n  PageManager.prototype.updateRenderQueue = function updateRenderQueue() {\n    if (this.canvas) {\n      var p = this.p;\n      if (!this.rendering && (p.renderWhileFlipping || !this.book.isProcessing())) {\n        var active = void 0,\n            top = void 0;\n        for (var _iterator6 = this.renderQueue, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n          var _ref6;\n\n          if (_isArray6) {\n            if (_i6 >= _iterator6.length) break;\n            _ref6 = _iterator6[_i6++];\n          } else {\n            _i6 = _iterator6.next();\n            if (_i6.done) break;\n            _ref6 = _i6.value;\n          }\n\n          var o = _ref6;\n\n          if (!active && o.isActive()) {\n            active = o;\n          }\n          if (o.isTop()) {\n            top = o;\n            break;\n          }\n        }\n        this.rendering = top || active;\n        if (this.isMobile() && p.renderInactivePagesOnMobile || !this.isMobile() && p.renderInactivePages) {\n          this.rendering = this.rendering || this.renderQueue[0];\n        }\n        if (this.rendering) {\n          if (this.rendering.wrapper.startRender) {\n            this.removeFromRenderQueue(this.rendering);\n            this.rendering.state = 'rendering';\n            this.rendering.wrapper.setResolution(this.calcResolution(this.rendering));\n            this.rendering.wrapper.startRender();\n          } else {\n            delete this.rendering;\n          }\n        }\n      }\n      setTimeout(this.updateRenderQueue.bind(this), 250);\n    }\n  };\n\n  PageManager.prototype.turnOnEvents = function turnOnEvents() {\n    this.transferEvents = true;\n  };\n\n  PageManager.prototype.turnOffEvents = function turnOffEvents() {\n    var mouseup = _libs.$.Event('mouseup'),\n        mouseout = _libs.$.Event('mouseout');\n    this.pageCache.forEach(function (ent) {\n      var object = ent[1];\n      if (object.simulate) {\n        object.simulate(mouseup, undefined, 0, 0);\n        object.simulate(mouseout, undefined, 0, 0);\n      }\n    });\n    this.transferEvents = false;\n  };\n\n  PageManager.prototype.transferEventToTexture = function transferEventToTexture(n, e, data) {\n    var _this4 = this;\n\n    if (this.transferEvents) {\n      var toObject = this.getOrLoadTextureObject(undefined, n);\n      if (toObject.wrapper) {\n        (function () {\n          var uv = data.uv,\n              toDoc = toObject.wrapper.getSimulatedDoc();\n          _this4.pageCache.forEach(function (ent) {\n            var object = ent[1];\n            if (object.simulate) {\n              object.simulate(e, toDoc, uv.x, uv.y);\n            }\n          });\n        })();\n      }\n    }\n  };\n\n  PageManager.prototype.loadPredictedPages = function loadPredictedPages() {\n    this.predictedRequests = _BaseMathUtils2.default.predict(this.pageRequests, this.p.preloadPages);\n    for (var _iterator7 = this.predictedRequests, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n      var _ref7;\n\n      if (_isArray7) {\n        if (_i7 >= _iterator7.length) break;\n        _ref7 = _iterator7[_i7++];\n      } else {\n        _i7 = _iterator7.next();\n        if (_i7.done) break;\n        _ref7 = _i7.value;\n      }\n\n      var p = _ref7;\n\n      if (p < this.book.getPages() && !this.pageCache.get(p)) {\n        this.load(undefined, p);\n      }\n    }\n  };\n\n  PageManager.prototype.addPageRequest = function addPageRequest(n) {\n    this.pageRequests.push(n);\n    if (this.pageRequests.length > this.p.pagesForPredicting) {\n      this.pageRequests.shift();\n    }\n    Promise.resolve().then(this.loadPredictedPages.bind(this));\n  };\n\n  PageManager.prototype.setMaterial = function setMaterial(o, material) {\n    this.pageCache.forEach(function (e) {\n      var ob = e[1];\n      if (o !== ob && ob.material === material) {\n        delete ob.material;\n      }\n    });\n    if (material && material !== o.material) {\n      o.material = material;\n      this.setupMaterial(o);\n    }\n  };\n\n  PageManager.prototype.setupMaterial = function setupMaterial(o) {\n    o.material.map = o.texture.image ? o.texture : this.loadingAnimation ? this.loading[o.color].texture : null;\n    if (!o.material.map) {\n      o.material.color = new _libs.THREE.Color(o.color);\n    }\n    o.material.needsUpdate = true;\n  };\n\n  PageManager.prototype.getOrLoadTextureObject = function getOrLoadTextureObject(material, n) {\n    var object = this.pageCache.get(n);\n    if (!object) {\n      object = this.load(material, n);\n      this.addPageRequest(n);\n    } else {\n      this.setMaterial(object, material);\n    }\n\n    return object;\n  };\n\n  PageManager.prototype.setTexture = function setTexture(material, n) {\n    if (~this.predictedRequests.indexOf(n)) {\n      this.addPageRequest(n);\n    }\n    this.getOrLoadTextureObject(material, n);\n  };\n\n  return PageManager;\n}();\n\nexports.default = PageManager;\n\n/***/ },\n/* 34 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _BookPropsBuilder2 = __webpack_require__(9);\n\nvar _BookPropsBuilder3 = _interopRequireDefault(_BookPropsBuilder2);\n\nvar _Pdf = __webpack_require__(18);\n\nvar _Pdf2 = _interopRequireDefault(_Pdf);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PdfBookPropsBuilder = function (_BookPropsBuilder) {\n  _inherits(PdfBookPropsBuilder, _BookPropsBuilder);\n\n  function PdfBookPropsBuilder(src, onReady) {\n    _classCallCheck(this, PdfBookPropsBuilder);\n\n    var _this = _possibleConstructorReturn(this, _BookPropsBuilder.call(this, onReady));\n\n    _this.pdf = new _Pdf2.default(src);\n    _this.pageDescription = {\n      type: 'pdf',\n      src: _this.pdf,\n      interactive: true\n    };\n    _this.binds = {\n      pageCallback: _this.pageCallback.bind(_this)\n    };\n    _this.pdf.getHandler(_this.init.bind(_this));\n    return _this;\n  }\n\n  PdfBookPropsBuilder.prototype.dispose = function dispose() {\n    this.pdf.dispose();\n    _BookPropsBuilder.prototype.dispose.call(this);\n  };\n\n  PdfBookPropsBuilder.prototype.init = function init(handler) {\n    var _this2 = this;\n\n    var pages = this.pdf.getPagesNum();\n    this.calcSheets(pages);\n    if (pages > 0) {\n      handler.getPage(1).then(function (page) {\n        var size = _Pdf2.default.getPageSize(page);\n        _this2.calcProps(size.width, size.height);\n        _this2.ready();\n      }).catch(function (e) {\n        console.error(e);\n      });\n    } else {\n      this.props = this.defaults;\n      this.ready();\n    }\n  };\n\n  PdfBookPropsBuilder.prototype.pageCallback = function pageCallback(n) {\n    return this.pageDescription;\n  };\n\n  return PdfBookPropsBuilder;\n}(_BookPropsBuilder3.default);\n\nexports.default = PdfBookPropsBuilder;\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(1);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PdfLinksHandler = function () {\n  function PdfLinksHandler(pdf, ctrl, element) {\n    _classCallCheck(this, PdfLinksHandler);\n\n    this.pdf = pdf;\n    this.ctrl = ctrl;\n    this.element = (0, _libs.$)(element);\n    this.cursors = [];\n  }\n\n  PdfLinksHandler.prototype.dispose = function dispose() {};\n\n  PdfLinksHandler.prototype.setHandler = function setHandler(handler) {\n    this.handler = handler;\n  };\n\n  PdfLinksHandler.prototype.defaultHandler = function defaultHandler(type, destination) {\n    if (type === 'internal') {\n      this.ctrl.goToPage(destination);\n    } else if (type === 'external') {\n      window.open(destination, '_blank');\n    }\n  };\n\n  PdfLinksHandler.prototype.callHandlers = function callHandlers(type, destination) {\n    if (!this.handler || !this.handler(type, destination)) {\n      this.defaultHandler(type, destination);\n    }\n  };\n\n  PdfLinksHandler.prototype.handleEvent = function handleEvent(data) {\n    var _this = this;\n\n    var e = data.event,\n        anno = data.annotation;\n    switch (e.type) {\n      case 'mouseover':\n        {\n          this.cursors.push(this.element.css('cursor'));\n          this.element.css('cursor', 'pointer');\n          break;\n        }\n      case 'mouseout':\n        {\n          this.element.css('cursor', this.cursors.pop() || '');\n          break;\n        }\n      case 'touchtap':\n      case 'click':\n        {\n          if (anno.url) {\n            this.callHandlers('external', anno.url);\n          } else if (anno.dest) {\n            var destPromise = void 0;\n            if (typeof anno.dest === 'string') {\n              destPromise = this.pdf.handler.getDestination(anno.dest);\n            } else {\n              destPromise = Promise.resolve(anno.dest);\n            }\n            destPromise.then(function (dest) {\n              return typeof dest[0] === 'number' ? dest[0] : _this.pdf.handler.getPageIndex(dest[0]);\n            }).then(function (number) {\n              return _this.callHandlers('internal', number);\n            }).catch(function () {\n              return console.error('Bad link');\n            });\n          }\n          break;\n        }\n    }\n  };\n\n  return PdfLinksHandler;\n}();\n\nexports.default = PdfLinksHandler;\n\n/***/ },\n/* 36 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _Finder = __webpack_require__(17);\n\nvar _Finder2 = _interopRequireDefault(_Finder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SearchEngine = function () {\n  function SearchEngine(pageCallback, pages) {\n    _classCallCheck(this, SearchEngine);\n\n    this.pageCallback = pageCallback;\n    this.pages = pages;\n    this.results = [];\n  }\n\n  SearchEngine.prototype.setQuery = function setQuery(query) {\n    this.query = query;\n    this.update = true;\n    this.process();\n  };\n\n  SearchEngine.prototype.process = function process() {\n    var _this = this;\n\n    if (this.update) {\n      var results = this.results;\n      this.results = [];\n      if (this.onPageHitsChanged) {\n        for (var _iterator = results, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var res = _ref;\n\n          this.onPageHitsChanged(undefined, '');\n        }\n      }\n      this.update = false;\n      this.page = 0;\n      this.stamp = Date.now();\n      if (this.query.length > 1) {\n        this.process();\n      }\n    } else {\n      if (this.page < this.pages) {\n        (function () {\n          var stamp = _this.stamp;\n          _this.find(_this.pageCallback(_this.page)).then(function (contexts) {\n            if (stamp === _this.stamp) {\n              if (contexts.length) {\n                _this.results.push({\n                  page: _this.page,\n                  contexts: contexts\n                });\n              }\n              ++_this.page;\n              if (_this.onPageHitsChanged) {\n                _this.onPageHitsChanged(_this.page, _this.query);\n              }\n              _this.process();\n            }\n          });\n        })();\n      }\n    }\n  };\n\n  SearchEngine.prototype.find = function find(pi) {\n    var _this2 = this;\n\n    var next = void 0;\n    if (pi.type === 'pdf') {\n      next = new Promise(function (resolve) {\n        pi.src.getHandler(function () {\n          var n = pi.number === undefined ? _this2.page : pi.number;\n          if (pi.src.getPageType(n) === 'right') {\n            resolve([]);\n          } else {\n            pi.src.getPage(n).then(function (page) {\n              page.getTextContent().then(function (textContent) {\n                resolve(new _Finder2.default(textContent.items.map(function (item) {\n                  return item.str;\n                }), _this2.query, { hits: false }).getContexts());\n              });\n            }).catch(function () {\n              return resolve([]);\n            });\n          }\n        });\n      });\n    } else {\n      next = Promise.resolve([]);\n    }\n    return next;\n  };\n\n  return SearchEngine;\n}();\n\nexports.default = SearchEngine;\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _CSSLayer = __webpack_require__(13);\n\nvar _CSSLayer2 = _interopRequireDefault(_CSSLayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SheetCssLayer = function () {\n  function SheetCssLayer(visual, block, props) {\n    _classCallCheck(this, SheetCssLayer);\n\n    this.visual = visual;\n    var size = block.getTopSize();\n    this.layer = new _CSSLayer2.default(size.width, size.height, props);\n\n    this.update(block);\n    this.visual.addCssObject(this.layer);\n  }\n\n  SheetCssLayer.prototype.dispose = function dispose() {\n    this.layer.dispose();\n    this.visual.removeCssObject(this.layer);\n  };\n\n  SheetCssLayer.prototype.isHidden = function isHidden() {\n    return this.layer.isHidden();\n  };\n\n  SheetCssLayer.prototype.hide = function hide() {\n    return this.layer.hide();\n  };\n\n  SheetCssLayer.prototype.show = function show() {\n    return this.layer.show();\n  };\n\n  SheetCssLayer.prototype.set = function set(css, html, js) {\n    this.layer.setData(css, html, js);\n  };\n\n  SheetCssLayer.prototype.update = function update(block) {\n    this.block = block;\n    this.block.getTopWorldRotation(this.layer.rotation);\n    this.block.getTopWorldPosition(this.layer.position);\n  };\n\n  return SheetCssLayer;\n}();\n\nexports.default = SheetCssLayer;\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _MathUtils = __webpack_require__(3);\n\nvar _MathUtils2 = _interopRequireDefault(_MathUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SheetPhysics = function () {\n  SheetPhysics.targetForceClb = function targetForceClb(o, a, v, ch) {\n    var l = a * this.r;\n    return 100 * this.m * this.g * (2 / (1 + Math.exp(10 * (l - this.tl))) - 1) - this.m * 40 * v;\n  };\n\n  SheetPhysics.hoverCornerForceClb = function hoverCornerForceClb(o, v, l, ch) {\n    return 5;\n  };\n\n  SheetPhysics.prototype.getTargetForceClb = function getTargetForceClb(mass, targetAngle) {\n    return SheetPhysics.targetForceClb.bind({\n      g: this.p.gravity,\n      m: mass,\n      tl: targetAngle * this.p.r,\n      r: this.p.r\n    });\n  };\n\n  SheetPhysics.dragForceClb = function dragForceClb(o, a, v, ch) {\n    return o.flbt * o.m * (10 * o.g * ch - 50 * v / (1 + Math.exp(3.5 * Math.abs(ch))));\n  };\n\n  SheetPhysics.dragCornerForceClb = function dragCornerForceClb(o, a, v, ch) {\n    return 15 * (2 / (1 + Math.exp(10 * (a - this.ta) * o.r)) - 1);\n  };\n\n  SheetPhysics.getDragCornerForceClb = function getDragCornerForceClb(targetAngle) {\n    return SheetPhysics.dragCornerForceClb.bind({\n      ta: targetAngle\n    });\n  };\n\n  function SheetPhysics() {\n    var r = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n    var gravity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n    var cornerDeviation = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.15;\n    var fps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 240;\n\n    _classCallCheck(this, SheetPhysics);\n\n    this.p = {\n      r: r,\n      cornerDeviation: cornerDeviation,\n      l: Math.PI * r,\n      startDt: 1 / fps,\n      gravity: gravity,\n      margin: 0.002 * r,\n      infM: 1e4,\n      attempts: 16,\n      maxIterations: 100\n    };\n    this.os = [];\n  }\n\n  SheetPhysics.prototype.dispose = function dispose() {\n    this.os = [];\n  };\n\n  SheetPhysics.prototype.getSize = function getSize() {\n    return this.os.length;\n  };\n\n  SheetPhysics.prototype.addObject = function addObject(mass, angle, velocity, flexibility, cornerHeight, simulateClb, removeClb) {\n    var forceClb = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : function () {\n      return 0;\n    };\n    var cornerForceClb = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : function () {\n      return 0;\n    };\n\n    var no = {\n      id: _MathUtils2.default.getUnique(),\n      m: mass,\n      v: velocity,\n      l: angle * this.p.r,\n      f: forceClb,\n      cf: cornerForceClb,\n      ch: cornerHeight,\n      flbt: flexibility,\n      simulateClb: simulateClb,\n      removeClb: removeClb\n    };\n    var i = this.os.findIndex(function (o) {\n      return no.l <= o.l;\n    });\n    i = ~i ? i : this.os.length;\n    this.os.splice(i, 0, no);\n    return no.id;\n  };\n\n  SheetPhysics.prototype.getParametrMap = function getParametrMap(name) {\n    var map = {\n      mass: 'm',\n      velocity: 'v',\n      flexibility: 'flbt',\n      cornerHeight: 'ch',\n      simulateClb: 'simulateClb',\n      removeClb: 'removeClb',\n      forceClb: 'f',\n      cornerForceClb: 'cf'\n    };\n    return map[name];\n  };\n\n  SheetPhysics.prototype.setParametr = function setParametr(id, name, value) {\n    var o = this.os.find(function (o) {\n      return o.id === id;\n    });\n    if (name === 'angle') {\n      o.l = value * this.p.r;\n    } else {\n      o[this.getParametrMap(name)] = value;\n    }\n  };\n\n  SheetPhysics.prototype.getParametr = function getParametr(id, name) {\n    var o = this.os.find(function (o) {\n      return o.id === id;\n    });\n    var value = void 0;\n    if (name === 'angle') {\n      value = o.l / this.p.r;\n    } else {\n      value = o[this.getParametrMap(name)];\n    }\n    return value;\n  };\n\n  SheetPhysics.prototype.simulate = function simulate(T) {\n    var t = 0,\n        dt = this.p.startDt,\n        attempt = 0,\n        it = 0;\n\n    while (t < T && it < this.p.maxIterations) {\n      if (dt > T - t) {\n        dt = T - t;\n      }\n      var nos = this.integrate(this.os, dt),\n          ci = this.findCollisions(nos);\n      if (ci.num > 1 && attempt < this.p.attempts) {\n        dt /= 2;\n        ++attempt;\n      } else {\n        if (ci.num === 1) {\n          var scos = this.solveCollision(nos[ci.last - 1], nos[ci.last]);\n          nos[ci.last - 1] = scos[0];\n          nos[ci.last] = scos[1];\n        } else if (ci.num > 1) {\n          var gs = [];\n          var last = -2;\n          for (var _iterator = ci.all, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n            var _ref;\n\n            if (_isArray) {\n              if (_i >= _iterator.length) break;\n              _ref = _iterator[_i++];\n            } else {\n              _i = _iterator.next();\n              if (_i.done) break;\n              _ref = _i.value;\n            }\n\n            var i = _ref;\n\n            if (i - last > 1) {\n              gs.push([]);\n            }\n            gs[gs.length - 1].push(i);\n            last = i;\n          }\n          for (var _iterator2 = gs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n            var _ref2;\n\n            if (_isArray2) {\n              if (_i2 >= _iterator2.length) break;\n              _ref2 = _iterator2[_i2++];\n            } else {\n              _i2 = _iterator2.next();\n              if (_i2.done) break;\n              _ref2 = _i2.value;\n            }\n\n            var g = _ref2;\n\n            var sg = void 0,\n                i0 = void 0;\n            if (nos[g[0]].l > Math.PI / 2 * this.p.r) {\n              sg = -1;\n              i0 = g[g.length - 1];\n            } else {\n              sg = 1;\n              i0 = g[0];\n            }\n            for (var _i3 = i0; _i3 < nos.length && _i3 > -1; _i3 += sg) {\n              var o = nos[_i3 + sg];\n              if (o && sg * (o.l - nos[_i3].l) <= this.p.margin) {\n                o.l = nos[_i3].l + sg * 2 * this.p.margin;\n                if (o.l > this.p.l || o.l < 0) {\n                  o.l = o.l > this.p.l ? this.p.l : 0;\n                  o.ch = 0;\n                  o.v = 0;\n                  console.error('Bad collision');\n                }\n              } else {\n                break;\n              }\n            }\n          }\n        }\n        this.os = nos;\n        this.findAndSolveCornerCollisions();\n        t += dt;\n        dt = this.p.startDt;\n        attempt = 0;\n      }\n      ++it;\n    }\n\n    this.removeStatics();\n  };\n\n  SheetPhysics.prototype.removeStatics = function removeStatics() {\n    var nos = [],\n        notify = [[], []];\n    for (var _iterator3 = this.os, _isArray3 = Array.isArray(_iterator3), _i4 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n      var _ref3;\n\n      if (_isArray3) {\n        if (_i4 >= _iterator3.length) break;\n        _ref3 = _iterator3[_i4++];\n      } else {\n        _i4 = _iterator3.next();\n        if (_i4.done) break;\n        _ref3 = _i4.value;\n      }\n\n      var o = _ref3;\n\n      if (o.simulateClb) {\n        o.simulateClb(o.l / this.p.r, o.ch);\n      }\n      if ((o.l === this.p.l || o.l === 0) && o.v === 0) {\n        if (o.removeClb !== undefined) {\n          notify[(o.l !== this.p.l) + 0].push(o);\n        }\n      } else {\n        nos.push(o);\n      }\n    }\n    this.os = nos;\n    for (var _iterator4 = notify[0].reverse(), _isArray4 = Array.isArray(_iterator4), _i5 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n      var _ref4;\n\n      if (_isArray4) {\n        if (_i5 >= _iterator4.length) break;\n        _ref4 = _iterator4[_i5++];\n      } else {\n        _i5 = _iterator4.next();\n        if (_i5.done) break;\n        _ref4 = _i5.value;\n      }\n\n      var _o = _ref4;\n\n      _o.removeClb(Math.PI, _o.ch);\n    }\n    for (var _iterator5 = notify[1], _isArray5 = Array.isArray(_iterator5), _i6 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n      var _ref5;\n\n      if (_isArray5) {\n        if (_i6 >= _iterator5.length) break;\n        _ref5 = _iterator5[_i6++];\n      } else {\n        _i6 = _iterator5.next();\n        if (_i6.done) break;\n        _ref5 = _i6.value;\n      }\n\n      var _o2 = _ref5;\n\n      _o2.removeClb(0, _o2.ch);\n    }\n  };\n\n  SheetPhysics.prototype.findAndSolveCornerCollisions = function findAndSolveCornerCollisions() {\n    if (this.os.length) {\n      var os = [_extends({}, this.os[0], {\n        l: 0,\n        m: this.p.infM,\n        ch: 0\n      })].concat(this.os, [_extends({}, this.os[0], {\n        l: 1.05 * this.p.l,\n        m: this.p.infM,\n        ch: 0\n      })]);\n\n      for (var i = 1; i < os.length; ++i) {\n        var a = os[i - 1],\n            b = os[i],\n            al = a.l + this.p.cornerDeviation * a.ch * this.p.r,\n            bl = b.l + this.p.cornerDeviation * b.ch * this.p.r;\n        if (1.05 * al > bl && a.ch > b.ch) {\n          var dCh = a.ch - b.ch,\n              dv = a.m / a.flbt + b.m / b.flbt,\n              ka = a.m / a.flbt / dv,\n              kb = b.m / b.flbt / dv;\n          a.ch = a.ch - kb * dCh;\n          b.ch = b.ch + ka * dCh;\n        }\n      }\n    }\n  };\n\n  SheetPhysics.prototype.solveCollision = function solveCollision(a, b) {\n    var mm = b.m + a.m,\n        av = (-a.v * b.m + a.m * a.v + 2 * b.m * b.v) / mm,\n        bv = (b.m * b.v - b.v * a.m + 2 * a.m * a.v) / mm;\n    return [_extends({}, a, { v: av }), _extends({}, b, { v: bv })];\n  };\n\n  SheetPhysics.prototype.findCollisions = function findCollisions(os) {\n    var ci = {\n      num: 0,\n      last: 0,\n      all: []\n    };\n    for (var i = 1; i < os.length && ci.num < 2; ++i) {\n      if (os[i - 1].l > os[i].l || this.isCollision(os[i - 1], os[i])) {\n        if (os[i - 1].l > os[i].l) {\n          ++ci.num;\n        }\n        ++ci.num;\n        ci.last = i;\n        if (ci.all.indexOf(i - 1) === -1) {\n          ci.all.push(i - 1);\n        }\n        if (ci.all.indexOf(i) === -1) {\n          ci.all.push(i);\n        }\n      }\n    }\n    return ci;\n  };\n\n  SheetPhysics.prototype.isCollision = function isCollision(a, b) {\n    return Math.abs(a.l - b.l) < this.p.margin && a.v > b.v;\n  };\n\n  SheetPhysics.prototype.integrate = function integrate(os, dt) {\n    var nos = [];\n    for (var _iterator6 = os, _isArray6 = Array.isArray(_iterator6), _i7 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n      var _ref6;\n\n      if (_isArray6) {\n        if (_i7 >= _iterator6.length) break;\n        _ref6 = _iterator6[_i7++];\n      } else {\n        _i7 = _iterator6.next();\n        if (_i7.done) break;\n        _ref6 = _i7.value;\n      }\n\n      var o = _ref6;\n\n      var vl = _MathUtils2.default.rk4(this.dy.bind({\n        g: this.p.gravity,\n        r: this.p.r,\n        m: o.m,\n        f: o.f,\n        cf: o.cf,\n        ch: o.ch,\n        flbt: o.flbt\n      }), 0, dt, [o.v, o.l, o.ch]);\n      var no = _extends({}, o, {\n        v: vl[0],\n        l: vl[1],\n        ch: vl[2]\n      });\n      if (no.l <= 0 || no.l >= this.p.l) {\n        no.l = no.l <= 0 ? 0 : this.p.l;\n        no.v = 0;\n        no.ch = 0;\n      }\n      nos.push(no);\n    }\n    return nos;\n  };\n\n  SheetPhysics.prototype.dy = function dy(t, y) {\n    var v = y[0],\n        l = y[1],\n        ch = y[2],\n        f = this.f(this, l / this.r, v, ch),\n        cf = this.cf(this, l / this.r, v, ch);\n    return [(-this.g * Math.cos(l / this.r) * this.m + f) / this.m, v + 0.01 * (Math.random() - 0.5), this.flbt * ((2 / (1 + Math.exp(-0.2 * cf)) - 1) * (1 - 2 / (1 + Math.exp(-5 * (Math.abs(ch) - 2)))) - ch)];\n  };\n\n  return SheetPhysics;\n}();\n\nexports.default = SheetPhysics;\n\n/***/ },\n/* 39 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SoundsEnviroment = function () {\n  function SoundsEnviroment() {\n    var template = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    _classCallCheck(this, SoundsEnviroment);\n\n    this.sounds = template.sounds || {};\n    this.audio = {};\n    if (this.sounds.startFlip) {\n      this.audio.startFlip = new Audio(this.sounds.startFlip);\n    }\n    if (this.sounds.endFlip) {\n      this.audio.endFlip = new Audio(this.sounds.endFlip);\n    }\n  }\n\n  SoundsEnviroment.prototype.setEnabled = function setEnabled(enabled) {\n    this.enabled = enabled;\n  };\n\n  SoundsEnviroment.prototype.togle = function togle() {\n    this.enabled = !this.enabled;\n  };\n\n  SoundsEnviroment.prototype.dispose = function dispose() {\n    delete this.audio.startFlip;\n    delete this.audio.endFlip;\n  };\n\n  SoundsEnviroment.prototype.startFlip = function startFlip() {\n    if (this.enabled && this.audio.startFlip) {\n      this.audio.startFlip.play();\n    }\n  };\n\n  SoundsEnviroment.prototype.endFlip = function endFlip() {\n    if (this.enabled && this.audio.startFlip) {\n      this.audio.startFlip.pause();\n      this.audio.startFlip.currentTime = 0;\n    }\n    if (this.enabled && this.audio.endFlip) {\n      this.audio.endFlip.play();\n    }\n  };\n\n  SoundsEnviroment.prototype.subscribeFlips = function subscribeFlips(emitter) {\n    emitter.addEventListener('startFlip', this.startFlip.bind(this));\n    emitter.addEventListener('endFlip', this.endFlip.bind(this));\n  };\n\n  return SoundsEnviroment;\n}();\n\nexports.default = SoundsEnviroment;\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _WidgetController2 = __webpack_require__(67);\n\nvar _WidgetController3 = _interopRequireDefault(_WidgetController2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TocController = function (_WidgetController) {\n  _inherits(TocController, _WidgetController);\n\n  function TocController(view, bookCtrl) {\n    _classCallCheck(this, TocController);\n\n    var _this = _possibleConstructorReturn(this, _WidgetController.call(this, view));\n\n    _this.bookCtrl = bookCtrl;\n    _this.tab = 'none';\n    return _this;\n  }\n\n  TocController.prototype.setThumbnails = function setThumbnails(thumbnails) {\n    this.thumbnails = thumbnails;\n    thumbnails.onNavigate = this.navigateThumbnails.bind(this);\n    if (this.tab === 'none') {\n      this.tab = 'thumbnails';\n    }\n    this.fireChange();\n  };\n\n  TocController.prototype.setSearch = function setSearch(search) {\n    this.search = search;\n    search.onNavigate = this.navigateSearch.bind(this);\n    this.fireChange();\n  };\n\n  TocController.prototype.setBookmarks = function setBookmarks(bookmarks, pdf) {\n    this.bookmarks = bookmarks;\n    this.pdf = pdf;\n    bookmarks.onNavigate = this.navigateBookmarks.bind(this);\n    if (bookmarks.getSize()) {\n      this.tab = 'bookmarks';\n      this.isBookmarks = true;\n    }\n    this.fireChange();\n  };\n\n  TocController.prototype.cmdBookmarks = function cmdBookmarks() {\n    this.tab = 'bookmarks';\n    this.fireChange();\n  };\n\n  TocController.prototype.cmdThumbnails = function cmdThumbnails() {\n    this.tab = 'thumbnails';\n    this.fireChange();\n  };\n\n  TocController.prototype.cmdSearch = function cmdSearch() {\n    this.tab = 'search';\n    this.fireChange();\n  };\n\n  TocController.prototype.cmdCloseToc = function cmdCloseToc() {\n    this.hide();\n  };\n\n  TocController.prototype.navigateThumbnails = function navigateThumbnails(number) {\n    this.bookCtrl.goToPage(number);\n  };\n\n  TocController.prototype.navigateSearch = function navigateSearch(number) {\n    this.bookCtrl.goToPage(number);\n  };\n\n  TocController.prototype.navigateBookmarks = function navigateBookmarks(item) {\n    var _this2 = this;\n\n    if (item.url) {\n      window.open(item.url, '_blank');\n    } else if (item.dest) {\n      var destPromise = void 0;\n      if (typeof item.dest === 'string') {\n        destPromise = this.pdf.handler.getDestination(item.dest);\n      } else {\n        destPromise = Promise.resolve(item.dest);\n      }\n      destPromise.then(function (dest) {\n        return _this2.pdf.handler.getPageIndex(dest[0]);\n      }).then(function (number) {\n        return _this2.bookCtrl.goToPage(number);\n      }).catch(function () {\n        return console.error('Bad bookmark');\n      });\n    }\n  };\n\n  TocController.prototype.updateView = function updateView() {\n    var _this3 = this;\n\n    if (this.view) {\n      this.view.setState('widTocMenu', {\n        enable: true,\n        visible: true,\n        active: false\n      });\n      this.view.setState('widThumbnails', {\n        enable: true,\n        visible: this.tab === 'thumbnails',\n        active: false\n      });\n      this.view.setState('widSearch', {\n        enable: true,\n        visible: this.tab === 'search',\n        active: false\n      });\n      this.view.setState('widBookmarks', {\n        enable: true,\n        visible: this.tab === 'bookmarks',\n        active: false\n      });\n      this.view.setState('cmdBookmarks', {\n        enable: true,\n        visible: true,\n        active: this.tab === 'bookmarks'\n      });\n      this.view.setState('cmdCloseToc', {\n        enable: true,\n        visible: true,\n        active: false\n      });\n      this.view.setState('cmdThumbnails', {\n        enable: true,\n        visible: true,\n        active: this.tab === 'thumbnails'\n      });\n      this.view.setState('cmdSearch', {\n        enable: true,\n        visible: true,\n        active: this.tab === 'search'\n      });\n      Promise.resolve().then(function () {\n        return _this3.thumbnails.setEnable(_this3.visible && _this3.tab === 'thumbnails');\n      });\n      _WidgetController.prototype.updateView.call(this);\n    }\n  };\n\n  return TocController;\n}(_WidgetController3.default);\n\nexports.default = TocController;\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(1);\n\nvar _ThreeUtils = __webpack_require__(20);\n\nvar _ThreeUtils2 = _interopRequireDefault(_ThreeUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar resX = 11,\n    resY = 2,\n    resZ = 15,\n    scale = 1,\n    faces = [];\n\nvar frontGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resY - 1);\nfrontGeometry.translate(0.5 * scale, 0.5 * scale, scale);\nvar backGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resY - 1);\nbackGeometry.rotateY(Math.PI);\nbackGeometry.translate(0.5 * scale, 0.5 * scale, 0);\nvar leftGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resZ - 1, resY - 1);\nleftGeometry.rotateY(-Math.PI / 2);\nleftGeometry.translate(0, 0.5 * scale, 0.5 * scale);\nvar rightGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resZ - 1, resY - 1);\nrightGeometry.rotateY(Math.PI / 2);\nrightGeometry.translate(scale, 0.5 * scale, 0.5 * scale);\nvar topGeometry = new _libs.THREE.PlaneGeometry(scale, scale, resX - 1, resZ - 1);\ntopGeometry.rotateX(-Math.PI / 2);\ntopGeometry.translate(0.5 * scale, scale, 0.5 * scale);\nvar bottomGeometry = topGeometry.clone();\nbottomGeometry.translate(0, -scale, 0);\nfor (var _iterator = bottomGeometry.faces, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n  var _ref;\n\n  if (_isArray) {\n    if (_i >= _iterator.length) break;\n    _ref = _iterator[_i++];\n  } else {\n    _i = _iterator.next();\n    if (_i.done) break;\n    _ref = _i.value;\n  }\n\n  var f = _ref;\n  var _ref3 = [f.b, f.a];\n  f.a = _ref3[0];\n  f.b = _ref3[1];\n}\n\nvar geometry = new _libs.THREE.Geometry();\ngeometry.vertices = [].concat(bottomGeometry.vertices, topGeometry.vertices);\n\nvar addFaces = function addFaces(fs, map) {\n  for (var _iterator2 = fs, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n    var _ref2;\n\n    if (_isArray2) {\n      if (_i2 >= _iterator2.length) break;\n      _ref2 = _iterator2[_i2++];\n    } else {\n      _i2 = _iterator2.next();\n      if (_i2.done) break;\n      _ref2 = _i2.value;\n    }\n\n    var f = _ref2;\n\n    geometry.faces.push(new _libs.THREE.Face3(map(f.a), map(f.b), map(f.c)));\n  }\n  faces.push(geometry.faces.length);\n};\n\nvar mapVertices = function mapVertices(src, dst) {\n  var map = [];\n  var eq = function eq(a, b) {\n    return Math.abs(a.x - b.x) + Math.abs(a.y - b.y) + Math.abs(a.z - b.z) < 1e-4;\n  };\n  for (var i = 0; i < src.length; ++i) {\n    for (var j = 0; j < dst.length; ++j) {\n      if (eq(src[i], dst[j])) {\n        map[i] = j;\n        break;\n      }\n    }\n  }\n  return map;\n};\n\nvar frontMap = mapVertices(frontGeometry.vertices, geometry.vertices);\nvar backMap = mapVertices(backGeometry.vertices, geometry.vertices);\nvar leftMap = mapVertices(leftGeometry.vertices, geometry.vertices);\nvar rightMap = mapVertices(rightGeometry.vertices, geometry.vertices);\n\naddFaces(topGeometry.faces, function (i) {\n  return i + bottomGeometry.vertices.length;\n});\naddFaces(bottomGeometry.faces, function (i) {\n  return i;\n});\naddFaces(frontGeometry.faces, function (i) {\n  return frontMap[i];\n});\naddFaces(backGeometry.faces, function (i) {\n  return backMap[i];\n});\naddFaces(leftGeometry.faces, function (i) {\n  return leftMap[i];\n});\naddFaces(rightGeometry.faces, function (i) {\n  return rightMap[i];\n});\nfaces.pop();\n\n_ThreeUtils2.default.computeFaceVertexUvs(geometry, faces);\n\ngeometry.computeVertexNormals();\n//geometry.computeFaceNormals();\ngeometry.computeBoundingSphere();\n//geometry.computeBoundingBox();\ngeometry.verticesNeedUpdate = true;\n\nexports.default = {\n  resX: resX,\n  resY: resY,\n  resZ: resZ,\n  faces: faces,\n  geometry: geometry\n};\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\nexports.props = props;\nvar mouseButtons = {\n  Left: 0,\n  Middle: 1,\n  Right: 2\n};\n\nfunction props() {\n  return {\n    eps: 1e-4,\n    skin: {\n      default: 'short-white-book-view'\n    },\n    scale: {\n      default: 0.9,\n      min: 0.9,\n      max: 2.5,\n      levels: 7\n    },\n    lighting: {\n      default: 0.7,\n      min: 0,\n      max: 1,\n      levels: 7\n    },\n    pan: {\n      speed: 50\n    },\n    loadingAnimation: {\n      skin: false,\n      book: true\n    },\n    autoResolution: {\n      enabled: true,\n      coefficient: 1.5\n    },\n    actions: {\n      cmdZoomIn: {\n        enabled: true\n      },\n      cmdZoomOut: {\n        enabled: true\n      },\n      cmdDefaultZoom: {\n        enabled: true,\n        type: 'dblclick',\n        code: 0\n      },\n      cmdToc: {\n        enabled: true\n      },\n      cmdFastBackward: {\n        enabled: false\n      },\n      cmdBackward: {\n        enabled: true\n      },\n      cmdForward: {\n        enabled: true\n      },\n      cmdFastForward: {\n        enabled: false\n      },\n      cmdSave: {\n        enabled: true\n      },\n      cmdPrint: {\n        enabled: true\n      },\n      cmdFullScreen: {\n        enabled: true\n      },\n      widSettings: {\n        enabled: true\n      },\n      cmdSmartPan: {\n        enabled: true,\n        active: true\n      },\n      cmdSinglePage: {\n        enabled: true,\n        active: false,\n        activeForMobile: false\n      },\n      cmdSounds: {\n        enabled: true,\n        active: true\n      },\n      cmdStats: {\n        enabled: true,\n        active: false\n      },\n      cmdLightingUp: {\n        enabled: true\n      },\n      cmdLightingDown: {\n        enabled: true\n      },\n      cmdPanLeft: {\n        enabled: false\n      },\n      cmdPanRight: {\n        enabled: false\n      },\n      cmdPanUp: {\n        enabled: false\n      },\n      cmdPanDown: {\n        enabled: false\n      },\n      mouseCmdRotate: {\n        enabled: true,\n        type: 'mousedrag',\n        code: mouseButtons.Right\n      },\n      mouseCmdDragZoom: {\n        enabled: true,\n        type: 'mousedrag',\n        code: mouseButtons.Middle\n      },\n      mouseCmdPan: {\n        enabled: true,\n        type: 'mousedrag',\n        code: mouseButtons.Left\n      },\n      mouseCmdWheelZoom: {\n        enabled: true,\n        type: 'mousewheel',\n        code: 0\n      },\n      touchCmdRotate: {\n        enabled: true,\n        type: 'touchdrag',\n        code: 3\n      },\n      touchCmdZoom: {\n        enabled: true,\n        type: 'touchdrag',\n        code: 2\n      },\n      touchCmdPan: {\n        enabled: true,\n        type: 'touchdrag',\n        code: 1\n      },\n      touchCmdSwipe: {\n        enabled: true,\n        type: 'touchdrag',\n        code: 1\n      }\n    }\n  };\n};\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _ImageBase2 = __webpack_require__(5);\n\nvar _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BlankImage = function (_ImageBase) {\n  _inherits(BlankImage, _ImageBase);\n\n  function BlankImage(context, width, height, color) {\n    _classCallCheck(this, BlankImage);\n\n    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n    Promise.resolve().then(function () {\n      _this.startRender = function () {\n        _this.renderBlankPage();\n        _this.finishRender();\n      };\n      _this.finishLoad();\n    });\n    return _this;\n  }\n\n  return BlankImage;\n}(_ImageBase3.default);\n\nexports.default = BlankImage;\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Bookmarks = function () {\n  function Bookmarks(container, items) {\n    var _this = this;\n\n    var getTitle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (i) {\n      return i.title;\n    };\n    var getItems = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (i) {\n      return i.items;\n    };\n\n    _classCallCheck(this, Bookmarks);\n\n    this.container = container;\n    this.map = [];\n    this.getTitle = getTitle;\n    this.getItems = getItems;\n    this.nodes = this.mapNodes(items, this.map);\n\n    this.binds = {\n      togle: function togle(e) {\n        e.preventDefault();\n        var li = (0, _libs.$)(e.target);\n        while (li[0] && li[0] !== container[0] && !li.hasClass('item')) {\n          li = (0, _libs.$)(li[0].parentNode);\n        }\n        if (li.hasClass('item')) {\n          var cmd = (0, _libs.$)(e.target);\n          while (cmd[0] && cmd[0] !== li[0] && !cmd.hasClass('cmd')) {\n            cmd = (0, _libs.$)(cmd[0].parentNode);\n          }\n          if (cmd.hasClass('cmd')) {\n            var node = _this.map[li.attr('data-id')];\n            if (cmd.hasClass('togle')) {\n              node.minimized = !node.minimized;\n              if (node.minimized) {\n                li.find('ul').remove();\n                li.find('.togle').addClass('minimized');\n              } else {\n                li.find('.togle').removeClass('minimized');\n                li.append((_this.renderNode(node).match(/<ul.*<\\/ul>/) || [''])[0]);\n              }\n            } else {\n              if (_this.onNavigate) {\n                _this.onNavigate(node.item);\n              }\n            }\n          }\n        }\n      }\n    };\n\n    container.on('click', this.binds.togle);\n    this.update();\n  }\n\n  Bookmarks.prototype.getSize = function getSize() {\n    return this.map.length;\n  };\n\n  Bookmarks.prototype.dispose = function dispose() {\n    this.container.off('click', this.binds.togle);\n    this.container.html('');\n  };\n\n  Bookmarks.prototype.update = function update() {\n    this.container.html(this.renderNodes(this.nodes));\n  };\n\n  Bookmarks.prototype.forEach = function forEach(f) {\n    var nodes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.nodes;\n\n    for (var _iterator = nodes || [], _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var node = _ref;\n\n      f(node);\n      this.forEach(f, node.children);\n    }\n  };\n\n  Bookmarks.prototype.expand = function expand() {\n    this.forEach(function (n) {\n      return n.minimized = false;\n    });\n    this.update();\n  };\n\n  Bookmarks.prototype.minimize = function minimize() {\n    this.forEach(function (n) {\n      return n.minimized = true;\n    });\n    this.update();\n  };\n\n  Bookmarks.prototype.renderNode = function renderNode(node) {\n    return ['<div class=\"area\">', node.children ? '<a href=\"#\" class=\"cmd togle' + (node.minimized ? ' minimized' : '') + '\"><i class=\"fa fa-angle-right\"></i></a> ' : '<i class=\"white-space\"></i> ', '<a class=\"cmd\" title=\"', node.title, '\" href=\"#\">', node.title, '</a></div>', node.minimized ? '' : this.renderNodes(node.children)].join('');\n  };\n\n  Bookmarks.prototype.renderNodes = function renderNodes(nodes) {\n    var res = ['<div class=\"bookmarks\">'];\n    if (nodes && nodes.length) {\n      res.push('<ul class=\"level-', nodes[0].level, '\">');\n      for (var _iterator2 = nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var node = _ref2;\n\n        res.push(['<li class=\"item\" data-id=\"', node.id, '\">', this.renderNode(node), '</li>'].join(''));\n      }\n      res.push('</ul>');\n    }\n    res.push('</div>');\n    return res.join('');\n  };\n\n  Bookmarks.prototype.mapNodes = function mapNodes(items) {\n    var map = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    var level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n    var nodes = null;\n    if (items && items.length) {\n      nodes = [];\n      for (var _iterator3 = items, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) break;\n          _ref3 = _i3.value;\n        }\n\n        var item = _ref3;\n\n        var id = map.length;\n        map.push(undefined);\n        var node = {\n          id: id,\n          title: this.getTitle(item),\n          level: level,\n          item: item,\n          minimized: true,\n          children: this.mapNodes(this.getItems(item), map, level + 1)\n        };\n        nodes.push(node);\n        map[id] = node;\n      }\n    }\n    return nodes;\n  };\n\n  return Bookmarks;\n}();\n\nexports.default = Bookmarks;\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Detector = function () {\n\tfunction Detector() {\n\t\t_classCallCheck(this, Detector);\n\t}\n\n\tDetector.getWebGLErrorMessage = function getWebGLErrorMessage() {\n\t\tvar element = document.createElement('div');\n\t\telement.id = 'webgl-error-message';\n\t\telement.style.fontFamily = 'monospace';\n\t\telement.style.fontSize = '13px';\n\t\telement.style.fontWeight = 'normal';\n\t\telement.style.textAlign = 'center';\n\t\telement.style.background = '#fff';\n\t\telement.style.color = '#000';\n\t\telement.style.padding = '1.5em';\n\t\telement.style.width = '400px';\n\t\telement.style.margin = '5em auto 0';\n\n\t\tif (!Detector.webgl) {\n\t\t\telement.innerHTML = window.WebGLRenderingContext ? ['Your graphics card does not seem to support <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#000\">WebGL</a>.<br />', 'Find out how to get it <a href=\"http://get.webgl.org/\" style=\"color:#000\">here</a>.'].join('\\n') : ['Your browser does not seem to support <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#000\">WebGL</a>.<br/>', 'Find out how to get it <a href=\"http://get.webgl.org/\" style=\"color:#000\">here</a>.'].join('\\n');\n\t\t}\n\t\treturn element;\n\t};\n\n\tDetector.addGetWebGLMessage = function addGetWebGLMessage(parameters) {\n\t\tvar parent = void 0,\n\t\t    id = void 0,\n\t\t    element = void 0;\n\t\tparameters = parameters || {};\n\n\t\tparent = parameters.parent || (0, _libs.$)(document.body);\n\t\tid = parameters.id || 'oldie';\n\n\t\telement = Detector.getWebGLErrorMessage();\n\t\t//element.id = id;\n\n\t\tparent.append(element);\n\t};\n\n\treturn Detector;\n}();\n\nDetector.canvas = !!window.CanvasRenderingContext2D;\n\nDetector.webgl = function () {\n\ttry {\n\t\tvar canvas = document.createElement('canvas');\n\t\treturn !!(window.WebGLRenderingContext && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')));\n\t} catch (e) {\n\t\treturn false;\n\t}\n}();\n\nDetector.workers = !!window.Worker;\nDetector.fileapi = window.File && window.FileReader && window.FileList && window.Blob;\nexports.default = Detector;\n\n/***/ },\n/* 46 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DocMouseSimulator = function () {\n  function DocMouseSimulator(jFrame, element) {\n    var bElement = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : document.body;\n\n    _classCallCheck(this, DocMouseSimulator);\n\n    this.jFrame = jFrame;\n    this.wnd = jFrame[0].contentWindow;\n    this.doc = jFrame[0].contentDocument;\n    this.element = element || doc.body;\n    this.bElement = bElement;\n    this.resendProperties = this.getDefaultResendProperties();\n    this.undefinedProperties = this.getDefaultUndefinedProperties();\n    this.cursors = [];\n    this.onDocChangeClbs = [];\n    var terms = [{\n      find: ':hover',\n      replace: '.' + DocMouseSimulator.HOVER\n    }, {\n      find: ':active',\n      replace: '.' + DocMouseSimulator.ACTIVE\n    }];\n    var style = ['<style type=\"text/css\">'];\n    for (var i = 0; i < this.doc.styleSheets.length; ++i) {\n      var ss = this.doc.styleSheets[i];\n      for (var j = 0; j < ss.cssRules.length; ++j) {\n        var r = ss.cssRules[j],\n            cssText = void 0;\n        for (var _iterator = terms, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n          var _ref;\n\n          if (_isArray) {\n            if (_i >= _iterator.length) break;\n            _ref = _iterator[_i++];\n          } else {\n            _i = _iterator.next();\n            if (_i.done) break;\n            _ref = _i.value;\n          }\n\n          var term = _ref;\n\n          if (~r.selectorText.indexOf(term.find)) {\n            cssText = (cssText || r.cssText).replace(new RegExp(term.find, 'g'), term.replace);\n          }\n        }\n        if (cssText) {\n          style.push(cssText);\n        }\n      }\n    }\n    style.push('</style>');\n    (0, _libs.$)(this.doc.head).append((0, _libs.$)(style.join('')));\n  }\n\n  DocMouseSimulator.prototype.convertCoords = function convertCoords(x, y) {\n    var jElement = (0, _libs.$)(this.element);\n    var offset = jElement.offset();\n    return {\n      x: offset.left + jElement.width() * x,\n      y: offset.top + jElement.height() * (1 - y)\n    };\n  };\n\n  DocMouseSimulator.prototype.triggerEvent = function triggerEvent(element, e, p, type, advancedProps) {\n    var props = {};\n    for (var _iterator2 = this.resendProperties, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      if (_isArray2) {\n        if (_i2 >= _iterator2.length) break;\n        _ref2 = _iterator2[_i2++];\n      } else {\n        _i2 = _iterator2.next();\n        if (_i2.done) break;\n        _ref2 = _i2.value;\n      }\n\n      var _n = _ref2;\n\n      props[_n] = e[_n];\n    }\n    for (var _iterator3 = this.undefinedProperties, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n      var _ref3;\n\n      if (_isArray3) {\n        if (_i3 >= _iterator3.length) break;\n        _ref3 = _iterator3[_i3++];\n      } else {\n        _i3 = _iterator3.next();\n        if (_i3.done) break;\n        _ref3 = _i3.value;\n      }\n\n      var _n2 = _ref3;\n\n      props[_n2] = undefined;\n    }\n    for (var n in advancedProps) {\n      if (advancedProps.hasOwnProperty(n)) {\n        props[n] = advancedProps[n];\n      }\n    }\n    props.view = this.wnd;\n    props.pageX = p.x;\n    props.pageY = p.y;\n    var jE = _libs.$.Event(type, props);\n    jE.timeStamp = e.timeStamp;\n    (0, _libs.$)(element).trigger(jE);\n  };\n\n  DocMouseSimulator.prototype.addClass = function addClass(element, name) {\n    (0, _libs.$)(element).addClass(name);\n    var style = this.wnd.getComputedStyle(element);\n    this.cursors.push((0, _libs.$)(this.bElement).css('cursor'));\n    (0, _libs.$)(this.bElement).css('cursor', style.getPropertyValue('cursor'));\n  };\n\n  DocMouseSimulator.prototype.removeClass = function removeClass(element, name) {\n    (0, _libs.$)(element).removeClass(name);\n    (0, _libs.$)(this.bElement).css('cursor', this.cursors.pop());\n  };\n\n  DocMouseSimulator.prototype.enterElement = function enterElement(element) {\n    this.addClass(element, DocMouseSimulator.HOVER);\n  };\n\n  DocMouseSimulator.prototype.leaveElement = function leaveElement(element) {\n    this.removeClass(element, DocMouseSimulator.HOVER);\n  };\n\n  DocMouseSimulator.prototype.activateElement = function activateElement(element) {\n    this.addClass(element, DocMouseSimulator.ACTIVE);\n  };\n\n  DocMouseSimulator.prototype.deactivateElement = function deactivateElement(element) {\n    this.removeClass(element, DocMouseSimulator.ACTIVE);\n  };\n\n  DocMouseSimulator.prototype.addDocChangeClb = function addDocChangeClb(clb) {\n    this.onDocChangeClbs.push(clb);\n  };\n\n  DocMouseSimulator.prototype.notify = function notify() {\n    for (var _iterator4 = this.onDocChangeClbs, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n      var _ref4;\n\n      if (_isArray4) {\n        if (_i4 >= _iterator4.length) break;\n        _ref4 = _iterator4[_i4++];\n      } else {\n        _i4 = _iterator4.next();\n        if (_i4.done) break;\n        _ref4 = _i4.value;\n      }\n\n      var clb = _ref4;\n\n      clb(this.wnd, this.doc);\n    }\n  };\n\n  DocMouseSimulator.prototype.elementFromPoint = function elementFromPoint(p) {\n    var node = this.doc.body,\n        next = true;\n    while (next) {\n      next = false;\n      for (var i = 0; i < node.childNodes.length; ++i) {\n        var child = node.childNodes[i];\n        if (child instanceof this.wnd.Element) {\n          var jC = (0, _libs.$)(child),\n              offset = jC.offset(),\n              height = jC.height(),\n              width = jC.width();\n          if (p.x > offset.left && p.x < offset.left + width && p.y > offset.top && p.y < offset.top + height) {\n            node = child;\n            next = true;\n            break;\n          }\n        }\n      }\n    }\n    return node;\n  };\n\n  DocMouseSimulator.prototype.getElement = function getElement(p) {\n    var off0 = this.jFrame.offset();\n    this.jFrame.offset({ left: 0.5 * window.innerWidth - p.x, top: 0.5 * window.innerHeight - p.y });\n    var element = this.doc.elementFromPoint(p.x, p.y);\n    if (!element) {\n      // it isn't a joke it's IE\n      element = this.doc.elementFromPoint(p.x, p.y);\n    }\n    this.jFrame.offset(off0);\n    return element ? element : this.elementFromPoint(p);\n  };\n\n  DocMouseSimulator.prototype.simulate = function simulate(e, doc, x, y) {\n    var p = this.convertCoords(x, y),\n        element = doc === this.doc ? this.getElement(p) : undefined;\n    var trigger = element !== undefined,\n        notify = false;\n\n    switch (e.type) {\n      case 'mousedown':\n        {\n          if (this.capElement) {\n            this.deactivateElement(this.capElement);\n            notify = true;\n          }\n          this.capElement = element;\n          if (this.capElement) {\n            this.activateElement(this.capElement);\n            notify = true;\n          }\n          break;\n        }\n      case 'mouseup':\n        {\n          if (this.capElement) {\n            this.deactivateElement(this.capElement);\n            notify = true;\n          }\n          this.timeStamp = e.timeStamp;\n          break;\n        }\n      case 'click':\n        {\n          trigger = element && this.capElement === element && e.timeStamp === this.timeStamp;\n          this.capElement = undefined;\n          break;\n        }\n      case 'mouseenter':\n      case 'mouseover':\n      case 'mousemove':\n        {\n          var leaved = null;\n          if (this.hovElement !== element && this.hovElement) {\n            this.triggerEvent(this.hovElement, e, p, 'mouseout', { relatedTarget: element ? element : null });\n            this.leaveElement(this.hovElement);\n            leaved = this.hovElement;\n            this.hovElement = undefined;\n            notify = true;\n          }\n          if (!this.hovElement && element) {\n            this.triggerEvent(element, e, p, 'mouseover', { relatedTarget: leaved });\n            this.enterElement(element);\n            this.hovElement = element;\n            notify = true;\n          }\n          trigger = element && e.type === 'mousemove';\n          break;\n        }\n      case 'mouseleave':\n      case 'mouseout':\n        {\n          if (this.hovElement) {\n            this.triggerEvent(this.hovElement, e, p, 'mouseout', { relatedTarget: e.relatedTarget });\n            this.leaveElement(this.hovElement);\n            this.hovElement = undefined;\n            notify = true;\n          }\n          trigger = false;\n          break;\n        }\n    }\n    if (trigger) {\n      this.triggerEvent(element, e, p, e.type);\n    }\n    if (notify) {\n      this.notify();\n    }\n  };\n\n  DocMouseSimulator.prototype.getDefaultUndefinedProperties = function getDefaultUndefinedProperties() {\n    return ['clientX', 'clientY', 'offsetX', 'offsetY', 'screenX', 'screenY'];\n  };\n\n  DocMouseSimulator.prototype.getDefaultResendProperties = function getDefaultResendProperties() {\n    return ['altKey', 'bubbles', 'button', 'buttons', 'cancelable', 'changedTouches', 'char', 'charCode', 'ctrlKey', 'data', 'detail', 'eventPhase', 'isDefaultPrevented', 'key', 'keyCode', 'metaKey', 'pointerId', 'pointerType', 'shiftKey', 'targetTouches', 'touches', 'which'];\n  };\n\n  return DocMouseSimulator;\n}();\n\n/*\naltKey,\nbubbles,\nbutton,\nbuttons,\ncancelable,\nchangedTouches,\nchar,\ncharCode,\nclientX,\nclientY,\nctrlKey,\ncurrentTarget,\ndata,\ndelegateTarget,\ndetail,\neventPhase,\nhandleObj,\nisDefaultPrevented,\nkey,\nkeyCode,\nmetaKey,\noffsetX,\noffsetY,\noriginalEvent,\npageX,\npageY,\npointerId,\npointerType,\nrelatedTarget,\nscreenX,\nscreenY,\nshiftKey,\ntarget,\ntargetTouches,\ntimeStamp,\ntoElement,\ntouches,\ntype,\nview,\nwhich\n*/\n\n\nDocMouseSimulator.HOVER = 'SIMULATED-HOVER';\nDocMouseSimulator.ACTIVE = 'SIMULATED-ACTIVE';\nexports.default = DocMouseSimulator;\n\n/***/ },\n/* 47 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Dom2Image = function Dom2Image(wnd, doc, cache) {\n    _classCallCheck(this, Dom2Image);\n\n    var self = this;\n    this.window = wnd;\n    this.document = doc;\n    this.cache = cache;\n\n    var util = newUtil();\n    var inliner = newInliner();\n    var fontFaces = newFontFaces();\n    var images = newImages();\n\n    this.toSvg = toSvg;\n    this.toPng = toPng;\n    this.toJpeg = toJpeg;\n    this.toBlob = toBlob;\n    this.toPixelData = toPixelData;\n    this.impl = {\n        fontFaces: fontFaces,\n        images: images,\n        util: util,\n        inliner: inliner\n    };\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options\n     * @param {Function} options.filter - Should return true if passed node should be included in the output\n     *          (excluding node means excluding it's children as well). Not called on the root node.\n     * @param {String} options.bgcolor - color for the background, any valid CSS color value.\n     * @param {Number} options.width - width to be applied to node before rendering.\n     * @param {Number} options.height - height to be applied to node before rendering.\n     * @param {Object} options.style - an object whose properties to be copied to node's style before rendering.\n     * @param {Number} options.quality - a Number between 0 and 1 indicating image quality (applicable to JPEG only),\n                defaults to 1.0.\n     * @return {Promise} - A promise that is fulfilled with a SVG image data URL\n     * */\n\n    function toSvg(node, options) {\n        options = options || {};\n        return Promise.resolve(node).then(function (node) {\n            return cloneNode(node, options.filter, true);\n        }).then(embedFonts).then(inlineImages).then(applyOptions).then(function (clone) {\n            return makeSvgDataUri(clone, options.width || util.width(node), options.height || util.height(node));\n        });\n\n        function applyOptions(clone) {\n            if (options.bgcolor) clone.style.backgroundColor = options.bgcolor;\n\n            if (options.width) clone.style.width = options.width + 'px';\n            if (options.height) clone.style.height = options.height + 'px';\n\n            if (options.style) self.window.Object.keys(options.style).forEach(function (property) {\n                clone.style[property] = options.style[property];\n            });\n\n            return clone;\n        }\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a Uint8Array containing RGBA pixel data.\n     * */\n    function toPixelData(node, options) {\n        return draw(node, options || {}).then(function (canvas) {\n            return canvas.getContext('2d').getImageData(0, 0, util.width(node), util.height(node)).data;\n        });\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a PNG image data URL\n     * */\n    function toPng(node, options) {\n        return draw(node, options || {}).then(function (canvas) {\n            return canvas.toDataURL();\n        });\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a JPEG image data URL\n     * */\n    function toJpeg(node, options) {\n        options = options || {};\n        return draw(node, options).then(function (canvas) {\n            return canvas.toDataURL('image/jpeg', options.quality || 1.0);\n        });\n    }\n\n    /**\n     * @param {Node} node - The DOM Node object to render\n     * @param {Object} options - Rendering options, @see {@link toSvg}\n     * @return {Promise} - A promise that is fulfilled with a PNG image blob\n     * */\n    function toBlob(node, options) {\n        return draw(node, options || {}).then(util.canvasToBlob);\n    }\n\n    function draw(domNode, options) {\n        return toSvg(domNode, options).then(util.makeImage).then(util.delay(100)).then(function (image) {\n            var canvas = newCanvas(domNode);\n            canvas.getContext('2d').drawImage(image, 0, 0);\n            return canvas;\n        });\n\n        function newCanvas(domNode) {\n            var canvas = self.document.createElement('canvas');\n            canvas.width = options.width || util.width(domNode);\n            canvas.height = options.height || util.height(domNode);\n\n            if (options.bgcolor) {\n                var ctx = canvas.getContext('2d');\n                ctx.fillStyle = options.bgcolor;\n                ctx.fillRect(0, 0, canvas.width, canvas.height);\n            }\n\n            return canvas;\n        }\n    }\n\n    function cloneNode(node, filter, root) {\n        if (!root && filter && !filter(node)) return Promise.resolve();\n\n        return Promise.resolve(node).then(makeNodeCopy).then(function (clone) {\n            return cloneChildren(node, clone, filter);\n        }).then(function (clone) {\n            return processClone(node, clone);\n        });\n\n        function makeNodeCopy(node) {\n            if (util.isCanvas(node)) return util.makeImage(node.toDataURL());\n            return node.cloneNode(false);\n        }\n\n        function cloneChildren(original, clone, filter) {\n            var children = original.childNodes;\n            if (children.length === 0) return Promise.resolve(clone);\n\n            return cloneChildrenInOrder(clone, util.asArray(children), filter).then(function () {\n                return clone;\n            });\n\n            function cloneChildrenInOrder(parent, children, filter) {\n                var done = Promise.resolve();\n                children.forEach(function (child) {\n                    done = done.then(function () {\n                        return cloneNode(child, filter);\n                    }).then(function (childClone) {\n                        if (childClone) parent.appendChild(childClone);\n                    });\n                });\n                return done;\n            }\n        }\n\n        function processClone(original, clone) {\n            if (!util.isElement(clone)) return clone;\n\n            return Promise.resolve().then(cloneStyle).then(clonePseudoElements).then(copyUserInput).then(fixSvg).then(function () {\n                return clone;\n            });\n\n            function cloneStyle() {\n                copyStyle(self.window.getComputedStyle(original), clone.style);\n\n                function copyStyle(source, target) {\n                    if (source.cssText) target.cssText = source.cssText;else copyProperties(source, target);\n\n                    function copyProperties(source, target) {\n                        util.asArray(source).forEach(function (name) {\n                            target.setProperty(name, source.getPropertyValue(name), source.getPropertyPriority(name));\n                        });\n                    }\n                }\n            }\n\n            function clonePseudoElements() {\n                [':before', ':after'].forEach(function (element) {\n                    clonePseudoElement(element);\n                });\n\n                function clonePseudoElement(element) {\n                    var style = self.window.getComputedStyle(original, element);\n                    var content = style.getPropertyValue('content');\n\n                    if (content === '' || content === 'none') return;\n\n                    var className = util.uid();\n                    clone.className = clone.className + ' ' + className;\n                    var styleElement = self.document.createElement('style');\n                    styleElement.appendChild(formatPseudoElementStyle(className, element, style));\n                    clone.appendChild(styleElement);\n\n                    function formatPseudoElementStyle(className, element, style) {\n                        var selector = '.' + className + ':' + element;\n                        var cssText = style.cssText ? formatCssText(style) : formatCssProperties(style);\n                        return self.document.createTextNode(selector + '{' + cssText + '}');\n\n                        function formatCssText(style) {\n                            var content = style.getPropertyValue('content');\n                            return style.cssText + ' content: ' + content + ';';\n                        }\n\n                        function formatCssProperties(style) {\n\n                            return util.asArray(style).map(formatProperty).join('; ') + ';';\n\n                            function formatProperty(name) {\n                                return name + ': ' + style.getPropertyValue(name) + (style.getPropertyPriority(name) ? ' !important' : '');\n                            }\n                        }\n                    }\n                }\n            }\n\n            function copyUserInput() {\n                if (util.isTextArea(original)) clone.innerHTML = original.value;\n                if (util.isInput(original)) clone.setAttribute(\"value\", original.value);\n            }\n\n            function fixSvg() {\n                if (!util.isSVG(clone)) return;\n                clone.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n\n                if (!util.isSVGRect(clone)) return;\n                ['width', 'height'].forEach(function (attribute) {\n                    var value = clone.getAttribute(attribute);\n                    if (!value) return;\n\n                    clone.style.setProperty(attribute, value);\n                });\n            }\n        }\n    }\n\n    function embedFonts(node) {\n        return fontFaces.resolveAll().then(function (cssText) {\n            var styleNode = self.document.createElement('style');\n            node.appendChild(styleNode);\n            styleNode.appendChild(self.document.createTextNode(cssText));\n            return node;\n        });\n    }\n\n    function inlineImages(node) {\n        return images.inlineAll(node).then(function () {\n            return node;\n        });\n    }\n\n    function makeSvgDataUri(node, width, height) {\n        return Promise.resolve(node).then(function (node) {\n            node.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n            return new self.window.XMLSerializer().serializeToString(node);\n        }).then(util.escapeXhtml).then(function (xhtml) {\n            return ['data:image/svg+xml;charset=utf-8,', '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"', width, '\" height=\"', height, '\">', '<foreignObject x=\"0\" y=\"0\" width=\"100%\" height=\"100%\">', xhtml, '</foreignObject>', '</svg>'].join('');\n        });\n    }\n\n    function newUtil() {\n        return {\n            escape: escape,\n            parseExtension: parseExtension,\n            mimeType: mimeType,\n            dataAsUrl: dataAsUrl,\n            isDataUrl: isDataUrl,\n            canvasToBlob: canvasToBlob,\n            resolveUrl: resolveUrl,\n            getAndEncode: getAndEncode,\n            uid: uid(),\n            delay: delay,\n            asArray: asArray,\n            escapeXhtml: escapeXhtml,\n            makeImage: makeImage,\n            width: width,\n            height: height,\n\n            isElement: isElement,\n            isCanvas: isCanvas,\n            isTextArea: isTextArea,\n            isInput: isInput,\n            isSVG: isSVG,\n            isSVGRect: isSVGRect,\n            isImage: isImage\n        };\n\n        function mimes() {\n            /*\n             * Only WOFF and EOT mime types for fonts are 'real'\n             * see http://www.iana.org/assignments/media-types/media-types.xhtml\n             */\n            var WOFF = 'application/font-woff';\n            var JPEG = 'image/jpeg';\n\n            return {\n                'woff': WOFF,\n                'woff2': WOFF,\n                'ttf': 'application/font-truetype',\n                'eot': 'application/vnd.ms-fontobject',\n                'png': 'image/png',\n                'jpg': JPEG,\n                'jpeg': JPEG,\n                'gif': 'image/gif',\n                'tiff': 'image/tiff',\n                'svg': 'image/svg+xml'\n            };\n        }\n\n        function parseExtension(url) {\n            var match = /\\.([^\\.\\/]*?)$/g.exec(url);\n            if (match) return match[1];else return '';\n        }\n\n        function mimeType(url) {\n            var extension = parseExtension(url).toLowerCase();\n            return mimes()[extension] || '';\n        }\n\n        function isDataUrl(url) {\n            return url.search(/^(data:)/) !== -1;\n        }\n\n        function toBlob(canvas) {\n            return new Promise(function (resolve) {\n                var binaryString = self.window.atob(canvas.toDataURL().split(',')[1]);\n                var length = binaryString.length;\n                var binaryArray = new self.window.Uint8Array(length);\n\n                for (var i = 0; i < length; i++) {\n                    binaryArray[i] = binaryString.charCodeAt(i);\n                }resolve(new self.window.Blob([binaryArray], {\n                    type: 'image/png'\n                }));\n            });\n        }\n\n        function canvasToBlob(canvas) {\n            if (canvas.toBlob) return new Promise(function (resolve) {\n                canvas.toBlob(resolve);\n            });\n\n            return toBlob(canvas);\n        }\n\n        function resolveUrl(url, baseUrl) {\n            var doc = self.document.implementation.createHTMLDocument();\n            var base = doc.createElement('base');\n            doc.head.appendChild(base);\n            var a = doc.createElement('a');\n            doc.body.appendChild(a);\n            base.href = baseUrl;\n            a.href = url;\n            return a.href;\n        }\n\n        function uid() {\n            var index = 0;\n\n            return function () {\n                return 'u' + fourRandomChars() + index++;\n\n                function fourRandomChars() {\n                    /* see http://stackoverflow.com/a/6248722/2519373 */\n                    return ('0000' + (self.window.Math.random() * self.window.Math.pow(36, 4) << 0).toString(36)).slice(-4);\n                }\n            };\n        }\n\n        function makeImage(uri) {\n            return new Promise(function (resolve, reject) {\n                var image = new self.window.Image();\n                image.onload = function () {\n                    resolve(image);\n                };\n                image.onerror = reject;\n                image.src = uri;\n            });\n        }\n\n        function getAndEncode(url) {\n            var data = self.cache.get(url);\n            if (data) {\n                if (data.content) {\n                    return data.content;\n                } else {\n                    return new Promise(function (resolve) {\n                        if (data.content) {\n                            resolve(data.content);\n                        } else {\n                            data.pendings.push(resolve);\n                        }\n                    });\n                }\n            } else {\n                data = self.cache.put(url, { pendings: [] });\n\n                var TIMEOUT = 30000;\n\n                return new Promise(function (resolve) {\n                    var request = new self.window.XMLHttpRequest();\n\n                    request.onreadystatechange = done;\n                    request.ontimeout = timeout;\n                    request.responseType = 'blob';\n                    request.timeout = TIMEOUT;\n                    request.open('GET', url, true);\n                    request.send();\n\n                    function done() {\n                        if (request.readyState !== 4) return;\n\n                        if (request.status !== 200) {\n                            fail('cannot fetch resource: ' + url + ', status: ' + request.status);\n                            return;\n                        }\n\n                        var encoder = new self.window.FileReader();\n                        encoder.onloadend = function () {\n                            data.content = encoder.result.split(/,/)[1];\n                            for (var _iterator = data.pendings, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n                                var _ref;\n\n                                if (_isArray) {\n                                    if (_i >= _iterator.length) break;\n                                    _ref = _iterator[_i++];\n                                } else {\n                                    _i = _iterator.next();\n                                    if (_i.done) break;\n                                    _ref = _i.value;\n                                }\n\n                                var _resolve = _ref;\n\n                                _resolve(data.content);\n                            }\n                            data.pendings = [];\n                            resolve(data.content);\n                        };\n                        encoder.readAsDataURL(request.response);\n                    }\n\n                    function timeout() {\n                        fail('timeout of ' + TIMEOUT + 'ms occured while fetching resource: ' + url);\n                    }\n\n                    function fail(message) {\n                        console.error(message);\n                        resolve('');\n                    }\n                });\n            }\n        }\n\n        function dataAsUrl(content, type) {\n            return ['data:', type, ';base64,', content].join('');\n        }\n\n        function escape(string) {\n            return string.replace(/([.*+?^${}()|\\[\\]\\/\\\\])/g, '\\\\$1');\n        }\n\n        function delay(ms) {\n            return function (arg) {\n                return new Promise(function (resolve) {\n                    setTimeout(function () {\n                        resolve(arg);\n                    }, ms);\n                });\n            };\n        }\n\n        function asArray(arrayLike) {\n            var array = [];\n            var length = arrayLike.length;\n            for (var i = 0; i < length; i++) {\n                array.push(arrayLike[i]);\n            }return array;\n        }\n\n        function escapeXhtml(string) {\n            return string.replace(/(#|\\n)/g, function (c) {\n                return c === '#' ? '%23' : '%0A';\n            });\n        }\n\n        function width(node) {\n            var leftBorder = px(node, 'border-left-width');\n            var rightBorder = px(node, 'border-right-width');\n            return node.scrollWidth + leftBorder + rightBorder;\n        }\n\n        function height(node) {\n            var topBorder = px(node, 'border-top-width');\n            var bottomBorder = px(node, 'border-bottom-width');\n            return node.scrollHeight + topBorder + bottomBorder;\n        }\n\n        function px(node, styleProperty) {\n            var value = self.window.getComputedStyle(node).getPropertyValue(styleProperty);\n            return parseFloat(value.replace('px', ''));\n        }\n\n        function isElement(node) {\n            return node instanceof self.window.Element;\n        }\n\n        function isCanvas(node) {\n            return node instanceof self.window.HTMLCanvasElement;\n        }\n\n        function isTextArea(node) {\n            return node instanceof self.window.HTMLTextAreaElement;\n        }\n\n        function isInput(node) {\n            return node instanceof self.window.HTMLInputElement;\n        }\n\n        function isSVG(node) {\n            return node instanceof self.window.SVGElement;\n        }\n\n        function isSVGRect(node) {\n            return node instanceof self.window.SVGRectElement;\n        }\n\n        function isImage(node) {\n            return node instanceof self.window.HTMLImageElement;\n        }\n    }\n\n    function newInliner() {\n        var URL_REGEX = /url\\(['\"]?([^'\"]+?)['\"]?\\)/g;\n\n        return {\n            inlineAll: inlineAll,\n            shouldProcess: shouldProcess,\n            impl: {\n                readUrls: readUrls,\n                inline: inline\n            }\n        };\n\n        function shouldProcess(string) {\n            return string.search(URL_REGEX) !== -1;\n        }\n\n        function readUrls(string) {\n            var result = [];\n            var match = void 0;\n            while ((match = URL_REGEX.exec(string)) !== null) {\n                result.push(match[1]);\n            }\n            return result.filter(function (url) {\n                return !util.isDataUrl(url);\n            });\n        }\n\n        function inline(string, url, baseUrl, get) {\n            return Promise.resolve(url).then(function (url) {\n                return baseUrl ? util.resolveUrl(url, baseUrl) : url;\n            }).then(get || util.getAndEncode).then(function (data) {\n                return util.dataAsUrl(data, util.mimeType(url));\n            }).then(function (dataUrl) {\n                return string.replace(urlAsRegex(url), ['$1', dataUrl, '$3'].join(''));\n            });\n\n            function urlAsRegex(url) {\n                return new self.window.RegExp(['(url\\\\([\\'\"]?)(', util.escape(url), ')([\\'\"]?\\\\))'].join(''), 'g');\n            }\n        }\n\n        function inlineAll(string, baseUrl, get) {\n            if (nothingToInline()) return Promise.resolve(string);\n\n            return Promise.resolve(string).then(readUrls).then(function (urls) {\n                var done = Promise.resolve(string);\n                urls.forEach(function (url) {\n                    done = done.then(function (string) {\n                        return inline(string, url, baseUrl, get);\n                    });\n                });\n                return done;\n            });\n\n            function nothingToInline() {\n                return !shouldProcess(string);\n            }\n        }\n    }\n\n    function newFontFaces() {\n        return {\n            resolveAll: resolveAll,\n            impl: {\n                readAll: readAll\n            }\n        };\n\n        function resolveAll() {\n            return readAll(self.document).then(function (webFonts) {\n                return Promise.all(webFonts.map(function (webFont) {\n                    return webFont.resolve();\n                }));\n            }).then(function (cssStrings) {\n                return cssStrings.join('\\n');\n            });\n        }\n\n        function readAll() {\n            return Promise.resolve(util.asArray(self.document.styleSheets)).then(getCssRules).then(selectWebFontRules).then(function (rules) {\n                return rules.map(newWebFont);\n            });\n\n            function selectWebFontRules(cssRules) {\n                return cssRules.filter(function (rule) {\n                    return rule.type === CSSRule.FONT_FACE_RULE;\n                }).filter(function (rule) {\n                    return inliner.shouldProcess(rule.style.getPropertyValue('src'));\n                });\n            }\n\n            function getCssRules(styleSheets) {\n                var cssRules = [];\n                styleSheets.forEach(function (sheet) {\n                    try {\n                        util.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));\n                    } catch (e) {\n                        console.log('Error while reading CSS rules from ' + sheet.href, e.toString());\n                    }\n                });\n                return cssRules;\n            }\n\n            function newWebFont(webFontRule) {\n                return {\n                    resolve: function resolve() {\n                        var baseUrl = (webFontRule.parentStyleSheet || {}).href;\n                        return inliner.inlineAll(webFontRule.cssText, baseUrl);\n                    },\n                    src: function src() {\n                        return webFontRule.style.getPropertyValue('src');\n                    }\n                };\n            }\n        }\n    }\n\n    function newImages() {\n        return {\n            inlineAll: inlineAll,\n            impl: {\n                newImage: newImage\n            }\n        };\n\n        function newImage(element) {\n            return {\n                inline: inline\n            };\n\n            function inline(get) {\n                if (util.isDataUrl(element.src)) return Promise.resolve();\n\n                return Promise.resolve(element.src).then(get || util.getAndEncode).then(function (data) {\n                    return util.dataAsUrl(data, util.mimeType(element.src));\n                }).then(function (dataUrl) {\n                    return new Promise(function (resolve, reject) {\n                        element.onload = resolve;\n                        element.onerror = reject;\n                        element.src = dataUrl;\n                    });\n                });\n            }\n        }\n\n        function inlineAll(node) {\n            if (!util.isElement(node)) return Promise.resolve(node);\n\n            return inlineBackground(node).then(function () {\n                if (util.isImage(node)) return newImage(node).inline();else return Promise.all(util.asArray(node.childNodes).map(function (child) {\n                    return inlineAll(child);\n                }));\n            });\n\n            function inlineBackground(node) {\n                var background = node.style.getPropertyValue('background');\n\n                if (!background) return Promise.resolve(node);\n\n                return inliner.inlineAll(background).then(function (inlined) {\n                    node.style.setProperty('background', inlined, node.style.getPropertyPriority('background'));\n                }).then(function () {\n                    return node;\n                });\n            }\n        }\n    }\n};\n\nexports.default = Dom2Image;\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Drag = function () {\n  function Drag(wnd, doc, visualWorld) {\n    _classCallCheck(this, Drag);\n\n    this.wnd = wnd;\n    this.doc = doc;\n    this.visual = visualWorld;\n    this.coords = new _libs.THREE.Vector2();\n    this.intersection = new _libs.THREE.Vector3();\n    this.raycaster = this.visual.raycaster;\n    this.camera = this.visual.camera;\n    this.plane = new _libs.THREE.Plane();\n    this.threes = [];\n    this.selected = null;\n    this.enabled = true;\n    this.controlsState = this.visual.getControlsState();\n\n    this.element = this.visual.element;\n    this.binds = {\n      onMouseMove: this.onMouseMove.bind(this),\n      onMouseDown: this.onMouseDown.bind(this),\n      onMouseUp: this.onMouseUp.bind(this)\n    };\n    (0, _libs.$)(this.element).on('mousemove', this.binds.onMouseMove);\n    (0, _libs.$)(this.element).on('mousedown', this.binds.onMouseDown);\n    (0, _libs.$)(this.doc).on('mouseup', this.binds.onMouseUp);\n  }\n\n  Drag.prototype.addThree = function addThree(three) {\n    this.threes.push(three);\n  };\n\n  Drag.prototype.removeThree = function removeThree(three) {\n    var i = this.threes.indexOf(three);\n    if (~i) {\n      this.threes.splice(i, 1);\n    }\n  };\n\n  Drag.prototype.onPickCallback = function onPickCallback() {\n    return true;\n  };\n\n  Drag.prototype.onDragCallback = function onDragCallback() {\n    return true;\n  };\n\n  Drag.prototype.onReleaseCallback = function onReleaseCallback() {};\n\n  Drag.prototype.dispose = function dispose() {\n    (0, _libs.$)(this.element).off('mousemove', this.binds.onMouseMove);\n    (0, _libs.$)(this.element).off('mousedown', this.binds.onMouseDown);\n    (0, _libs.$)(this.doc).off('mouseup', this.binds.onMouseUp);\n  };\n\n  Drag.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {\n    var jElement = (0, _libs.$)(this.element);\n    var offset = jElement.offset();\n    this.coords.x = (e.pageX - offset.left) / jElement.width() * 2 - 1;\n    this.coords.y = -((e.pageY - offset.top) / jElement.height()) * 2 + 1;\n    return this.coords;\n  };\n\n  Drag.prototype.onMouseDown = function onMouseDown(e) {\n    if (!this.enabled) return;\n\n    if (this.selected) this.onMouseUp(e);\n\n    this.setCoordsFromEvent(e);\n    this.raycaster.setFromCamera(this.coords, this.camera);\n\n    var intersects = this.raycaster.intersectObjects(this.threes);\n    if (intersects.length > 0) {\n      var selected = intersects[0].object;\n      if (!this.onPickCallback(intersects[0])) return;\n      var v = intersects[0].point.clone();\n      this.distance = v.sub(this.raycaster.ray.origin).length();;\n      this.controlsState = this.visual.getControlsState();\n      this.visual.setControlsState(false);\n      this.plane.setFromNormalAndCoplanarPoint(this.visual.camera.getWorldDirection(this.plane.normal), intersects[0].point);\n      //this.plane.setFromNormalAndCoplanarPoint(this.plane.normal.set(0,0,1), new THREE.Vector3(0,0,0));\n      this.selected = selected;\n    }\n  };\n\n  Drag.prototype.onMouseMove = function onMouseMove(e) {\n    if (!this.enabled) return;\n    e.preventDefault();\n\n    if (this.selected) {\n      this.setCoordsFromEvent(e);\n      this.raycaster.setFromCamera(this.coords, this.camera);\n      if (this.raycaster.ray.intersectPlane(this.plane, this.intersection)) {\n        if (!this.onDragCallback(this.intersection)) this.onMouseUp(e);\n      } /**/\n      //this.intersection.copy(this.raycaster.ray.direction).normalize().multiplyScalar(this.distance).add(this.raycaster.ray.origin);/**/\n      //if(!this.onDragCallback(this.selected, this.intersection)) this.onMouseUp(e);\n    }\n  };\n\n  Drag.prototype.onMouseUp = function onMouseUp(e) {\n    if (this.selected) {\n      this.onReleaseCallback();\n      this.selected = null;\n      this.visual.setControlsState(this.controlsState);\n    }\n    if (!this.enabled) return;\n    e.preventDefault();\n  };\n\n  return Drag;\n}();\n\nexports.default = Drag;\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n__webpack_require__(71)(_libs.$);\n\nvar EventsToActions = function () {\n  EventsToActions.getEventFlags = function getEventFlags(e) {\n    return e.ctrlKey << 0 | e.shiftKey << 1 | e.altKey << 2;\n  };\n\n  EventsToActions.getPosition = function getPosition(touches) {\n    var x = void 0,\n        y = void 0;\n    if (touches.length === 2) {\n      x = touches[1].pageX - touches[0].pageX;\n      y = touches[1].pageY - touches[0].pageY;\n      y = -Math.sqrt(x * x + y * y);\n      x = 0;\n    } else {\n      x = touches[0].pageX;\n      y = touches[0].pageY;\n    }\n    return {\n      x: x,\n      y: y\n    };\n  };\n\n  function EventsToActions(element, actions) {\n    _classCallCheck(this, EventsToActions);\n\n    this.actions = actions || {};\n    this.element = element;\n    this.doc = element[0].ownerDocument;\n    this.wnd = this.doc.defaultView;\n    this.enabled = true;\n\n    this.binds = {\n      contextMenu: this.contextMenu.bind(this),\n\n      mouseDown: this.mouseDown.bind(this),\n      mouseMove: this.mouseMove.bind(this),\n      mouseUp: this.mouseUp.bind(this),\n      mouseWheel: this.mouseWheel.bind(this),\n\n      mouseMoveDoc: this.mouseMoveDoc.bind(this),\n      mouseUpDoc: this.mouseUpDoc.bind(this),\n\n      click: this.click.bind(this),\n      dblclick: this.dblclick.bind(this),\n\n      touchStart: this.touchStart.bind(this),\n      touchMove: this.touchMove.bind(this),\n      touchEnd: this.touchEnd.bind(this),\n\n      keyDown: this.keyDown.bind(this),\n      keyPress: this.keyPress.bind(this),\n      keyUp: this.keyUp.bind(this)\n    };\n\n    this.element.on('contextmenu', this.binds.contextMenu);\n\n    this.element.on('mousedown', this.binds.mouseDown);\n    this.element.on('mousemove', this.binds.mouseMove);\n    this.element.on('mouseup', this.binds.mouseUp);\n    this.element.on('mousewheel', this.binds.mouseWheel);\n\n    (0, _libs.$)(this.doc).on('mousemove', this.binds.mouseMoveDoc);\n    (0, _libs.$)(this.doc).on('mouseup', this.binds.mouseUpDoc);\n\n    this.element.on('click', this.binds.click);\n    this.element.on('dblclick', this.binds.dblclick);\n\n    this.element.on('touchstart', this.binds.touchStart);\n    this.element.on('touchmove', this.binds.touchMove);\n    this.element.on('touchend', this.binds.touchEnd);\n\n    (0, _libs.$)(this.wnd).on('keydown', this.binds.keyDown);\n    (0, _libs.$)(this.wnd).on('keypress', this.binds.keyPress);\n    (0, _libs.$)(this.wnd).on('keyup', this.binds.keyUp);\n  }\n\n  EventsToActions.prototype.addAction = function addAction(action, type, code, flags) {\n    type = type.toLowerCase();\n    if (!this.actions[type]) {\n      this.actions[type] = {};\n    }\n    if (!this.actions[type][code]) {\n      this.actions[type][code] = {};\n    }\n    if (!this.actions[type][code][flags]) {\n      this.actions[type][code][flags] = [];\n    }\n    this.actions[type][code][flags].push(action);\n  };\n\n  EventsToActions.prototype.getActions = function getActions(type, code, flags) {\n    return ((this.actions[type] || {})[code] || {})[flags] || [];\n  };\n\n  EventsToActions.prototype.fireActions = function fireActions(actions, e, data) {\n    for (var _iterator = actions, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var action = _ref;\n\n      action(e, data);\n    }\n  };\n\n  EventsToActions.prototype.contextMenu = function contextMenu(e) {\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e);\n      this.fireActions(this.getActions('contextmenu', e.button, flags), e);\n    }\n  };\n\n  EventsToActions.prototype.mouseDown = function mouseDown(e) {\n    if (this.picked) {\n      this.mouseUpDoc();\n    }\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e);\n      this.fireActions(this.getActions('mousedown', e.button, flags), e);\n      this.picked = {\n        x: e.pageX,\n        y: e.pageY,\n        actions: this.getActions('mousedrag', e.button, flags)\n      };\n      this.fireActions(this.picked.actions, e, {\n        state: 'start'\n      });\n    }\n  };\n\n  EventsToActions.prototype.mouseMove = function mouseMove(e) {\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e);\n      this.fireActions(this.getActions('mousemove', e.button, flags), e);\n    }\n  };\n\n  EventsToActions.prototype.mouseMoveDoc = function mouseMoveDoc(e) {\n    if (this.enabled && this.picked) {\n      this.fireActions(this.picked.actions, e, {\n        state: 'move',\n        dx: e.pageX - this.picked.x,\n        dy: e.pageY - this.picked.y\n      });\n      this.picked = {\n        x: e.pageX,\n        y: e.pageY,\n        actions: this.picked.actions\n      };\n    }\n  };\n\n  EventsToActions.prototype.mouseUp = function mouseUp(e) {\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e);\n      this.fireActions(this.getActions('mouseup', e.button, flags), e);\n    }\n  };\n\n  EventsToActions.prototype.mouseUpDoc = function mouseUpDoc(e) {\n    if (this.picked) {\n      this.fireActions(this.picked.actions, e, {\n        state: 'end'\n      });\n      delete this.picked;\n    }\n  };\n\n  EventsToActions.prototype.mouseWheel = function mouseWheel(e) {\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e);\n      this.fireActions(this.getActions('mousewheel', 0, flags), e);\n    }\n  };\n\n  EventsToActions.prototype.clicks = function clicks(e, type) {\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e);\n      this.fireActions(this.getActions(type, e.button, flags), e);\n    }\n  };\n\n  EventsToActions.prototype.click = function click(e) {\n    this.clicks(e, 'click');\n  };\n\n  EventsToActions.prototype.dblclick = function dblclick(e) {\n    this.clicks(e, 'dblclick');\n  };\n\n  EventsToActions.prototype.touchPick = function touchPick(e, flags, touches) {\n    this.touchPicked = _extends({}, EventsToActions.getPosition(touches), {\n      actions: this.getActions('touchdrag', touches.length, flags),\n      code: touches.length,\n      flags: flags\n    });\n    this.fireActions(this.touchPicked.actions, e, {\n      state: 'start'\n    });\n  };\n\n  EventsToActions.prototype.touchStart = function touchStart(e) {\n    if (this.touchPicked) {\n      this.touchEnd(e);\n    }\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e),\n          touches = e.touches || e.originalEvent.touches;\n      this.fireActions(this.getActions('touchstart', touches.length, flags), e);\n      this.touchPick(e, flags, touches);\n    }\n  };\n\n  EventsToActions.prototype.touchMove = function touchMove(e) {\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e),\n          touches = e.touches || e.originalEvent.touches;\n      this.fireActions(this.getActions('touchmove', touches.length, flags), e);\n      if (this.touchPicked) {\n        if (this.touchPicked.code === touches.length && this.touchPicked.flags === flags) {\n          var pos = EventsToActions.getPosition(touches);\n          this.fireActions(this.touchPicked.actions, e, {\n            state: 'move',\n            dx: pos.x - this.touchPicked.x,\n            dy: pos.y - this.touchPicked.y\n          });\n          this.touchPicked = _extends({}, this.touchPicked, pos);\n        } else {\n          this.touchEnd(e);\n          this.touchPick(e, flags, touches);\n        }\n      }\n    }\n  };\n\n  EventsToActions.prototype.touchEnd = function touchEnd(e) {\n    if (this.touchPicked) {\n      this.fireActions(this.touchPicked.actions, e, {\n        state: 'end'\n      });\n      delete this.touchPicked;\n    }\n  };\n\n  EventsToActions.prototype.key = function key(e, type) {\n    if (this.enabled) {\n      var flags = EventsToActions.getEventFlags(e);\n      this.fireActions(this.getActions(type, e.keyCode, flags), e);\n    }\n  };\n\n  EventsToActions.prototype.keyDown = function keyDown(e) {\n    this.key(e, 'keydown');\n  };\n\n  EventsToActions.prototype.keyPress = function keyPress(e) {\n    this.key(e, 'keypress');\n  };\n\n  EventsToActions.prototype.keyUp = function keyUp(e) {\n    this.key(e, 'keyup');\n  };\n\n  EventsToActions.prototype.dispose = function dispose() {\n    this.element.off('contextmenu', this.binds.contextMenu);\n\n    this.element.off('mousedown', this.binds.mouseDown);\n    this.element.off('mousemove', this.binds.mouseMove);\n    this.element.off('mouseup', this.binds.mouseUp);\n    this.element.off('mousewheel', this.binds.mouseWheel);\n\n    (0, _libs.$)(this.doc).off('mousemove', this.binds.mouseMoveDoc);\n    (0, _libs.$)(this.doc).off('mouseup', this.binds.mouseUpDoc);\n\n    this.element.off('click', this.binds.click);\n    this.element.off('dblclick', this.binds.dblclick);\n\n    this.element.off('touchstart', this.binds.touchStart);\n    this.element.off('touchmove', this.binds.touchMove);\n    this.element.off('touchend', this.binds.touchEnd);\n\n    (0, _libs.$)(this.wnd).off('keydown', this.binds.keyDown);\n    (0, _libs.$)(this.wnd).off('keypress', this.binds.keyPress);\n    (0, _libs.$)(this.wnd).off('keyup', this.binds.keyUp);\n  };\n\n  return EventsToActions;\n}();\n\nEventsToActions.modKeys = {\n  Ctrl: 1,\n  Shift: 2,\n  Alt: 4\n};\nEventsToActions.mouseButtons = {\n  Left: 0,\n  Middle: 1,\n  Right: 2\n};\nexports.default = EventsToActions;\n\n/***/ },\n/* 50 */\n/***/ function(module, exports) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FullScreen = function () {\n\tfunction FullScreen() {\n\t\t_classCallCheck(this, FullScreen);\n\t}\n\n\tFullScreen.available = function available() {\n\t\treturn FullScreen._hasWebkitFullScreen || FullScreen._hasMozFullScreen || FullScreen._hasMsFullscreen;\n\t};\n\n\tFullScreen.activated = function activated() {\n\t\tif (FullScreen._hasWebkitFullScreen) {\n\t\t\treturn document.webkitIsFullScreen;\n\t\t} else if (FullScreen._hasMozFullScreen) {\n\t\t\treturn document.mozFullScreen;\n\t\t} else if (FullScreen._hasMsFullscreen) {\n\t\t\treturn !!document.msFullscreenElement;\n\t\t} else {\n\t\t\tconsole.assert(false);\n\t\t}\n\t};\n\n\tFullScreen.addEventListener = function addEventListener(element, handler) {\n\t\tif (element.addEventListener) {\n\t\t\telement.addEventListener('webkitfullscreenchange', handler, false);\n\t\t\telement.addEventListener('mozfullscreenchange', handler, false);\n\t\t\telement.addEventListener('fullscreenchange', handler, false);\n\t\t\telement.addEventListener('MSFullscreenChange', handler, false);\n\t\t}\n\t};\n\n\tFullScreen.removeEventListener = function removeEventListener(element, handler) {\n\t\tif (element.removeEventListener) {\n\t\t\telement.removeEventListener('webkitfullscreenchange', handler, false);\n\t\t\telement.removeEventListener('mozfullscreenchange', handler, false);\n\t\t\telement.removeEventListener('fullscreenchange', handler, false);\n\t\t\telement.removeEventListener('MSFullscreenChange', handler, false);\n\t\t}\n\t};\n\n\tFullScreen.request = function request(element) {\n\t\telement = element || document.body;\n\t\tif (FullScreen._hasWebkitFullScreen) {\n\t\t\telement.webkitRequestFullScreen();\n\t\t} else if (FullScreen._hasMozFullScreen) {\n\t\t\telement.mozRequestFullScreen();\n\t\t} else if (FullScreen._hasMsFullscreen) {\n\t\t\telement.msRequestFullscreen();\n\t\t} else {\n\t\t\tconsole.assert(false);\n\t\t}\n\t};\n\n\tFullScreen.cancel = function cancel() {\n\t\tif (FullScreen._hasWebkitFullScreen) {\n\t\t\tdocument.webkitCancelFullScreen();\n\t\t} else if (FullScreen._hasMozFullScreen) {\n\t\t\tdocument.mozCancelFullScreen();\n\t\t} else if (FullScreen._hasMsFullscreen) {\n\t\t\tdocument.msExitFullscreen();\n\t\t} else {\n\t\t\tconsole.assert(false);\n\t\t}\n\t};\n\n\treturn FullScreen;\n}();\n\nFullScreen._hasWebkitFullScreen = !!document.webkitCancelFullScreen;\nFullScreen._hasMozFullScreen = !!document.mozCancelFullScreen;\nFullScreen._hasMsFullscreen = !!document.documentElement.msRequestFullscreen;\nexports.default = FullScreen;\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _ImageBase2 = __webpack_require__(5);\n\nvar _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\nvar _BaseMathUtils = __webpack_require__(2);\n\nvar _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\nvar _Dom2Image = __webpack_require__(47);\n\nvar _Dom2Image2 = _interopRequireDefault(_Dom2Image);\n\nvar _DocMouseSimulator = __webpack_require__(46);\n\nvar _DocMouseSimulator2 = _interopRequireDefault(_DocMouseSimulator);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar InteractiveImage = function (_ImageBase) {\n  _inherits(InteractiveImage, _ImageBase);\n\n  function InteractiveImage(context, width, height, color, src, cache, injector) {\n    _classCallCheck(this, InteractiveImage);\n\n    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n    _this.iId = 'i' + _BaseMathUtils2.default.getUnique();\n    var jFrame = (0, _libs.$)('<iframe id=\"' + _this.iId + '\" src=\"' + src + '\" style=\"position: fixed; left: -1000px;\"></iframe>');\n    (0, _libs.$)(_this.doc.body).append(jFrame);\n    _this.frame = jFrame[0];\n\n    _this.binds = {};\n\n    if (injector) {\n      injector(_this.frame.contentWindow);\n    }\n\n    if (_this.doc.implementation.hasFeature('www.http://w3.org/TR/SVG11/feature#Extensibility', '1.1')) {\n      // svg foreignObject renderer\n      _this.image = new Image();\n      _this.binds.imageLoad = function () {\n        _this.renderImage(_this.image);\n        _this.finishRender();\n      };\n      (0, _libs.$)(_this.image).on('load', _this.binds.imageLoad);\n      _this.svgRender = new _Dom2Image2.default(_this.frame.contentWindow, _this.frame.contentDocument, cache);\n    } // otherwise - html2canvas\n\n    _this.binds.frameLoad = function () {\n      if (~_this.frame.contentDocument.title.indexOf('404')) {\n        _this.startRender = function () {\n          _this.renderNotFoundPage();\n          _this.finishRender();\n        };\n        _this.finishLoad();\n      } else {\n        setTimeout(function () {\n          if (_this.frame) {\n            _this.width = (0, _libs.$)(_this.frame.contentDocument.body).width();\n            _this.height = (0, _libs.$)(_this.frame.contentDocument.body).height();\n            jFrame.css('width', _this.width + 'px').css('height', _this.height + 'px');\n            jFrame.offset({ left: -_this.width - 100, top: 0 });\n            if (_this.svgRender) {\n              _this.simulator = new _DocMouseSimulator2.default(jFrame, _this.frame.contentDocument.body, _this.element);\n              _this.simulator.addDocChangeClb(_this.finishLoad.bind(_this));\n            }\n            _this.startRender = function () {\n              _this.render();\n            };\n            _this.finishLoad();\n          }\n        }, 500);\n      }\n    };\n    (0, _libs.$)(_this.frame.contentWindow).on('load', _this.binds.frameLoad);\n    return _this;\n  }\n\n  InteractiveImage.prototype.getSimulatedDoc = function getSimulatedDoc() {\n    return this.frame.contentDocument;\n  };\n\n  InteractiveImage.prototype.render = function render() {\n    var _this2 = this;\n\n    if (this.svgRender) {\n      this.svgRender.toSvg(this.simulator.element, { height: this.height + 'px', width: this.width + 'px' }).then(function (dataUrl) {\n        _this2.image.src = dataUrl;\n      }).catch(function (error) {\n        console.error('Dom2Image: ', error);\n        _this2.renderBlankPage();\n        _this2.finishRender();\n      });\n    } else {\n      (0, _libs.html2canvas)(this.frame.contentDocument.body, { timeout: 30000 }).then(function (canvas) {\n        _this2.renderImage(canvas);\n        _this2.finishRender();\n      });\n    }\n  };\n\n  InteractiveImage.prototype.dispose = function dispose() {\n    (0, _libs.$)(this.image).off('load', this.binds.imageLoad);\n    (0, _libs.$)(this.frame.contentWindow).off('load', this.binds.frameLoad);\n    (0, _libs.$)(this.doc.body).find('#' + this.iId).remove();\n    if (this.image) {\n      this.image.src = '';\n      delete this.image;\n    }\n    this.frame.src = '';\n    delete this.frame;\n    _ImageBase.prototype.dispose.call(this);\n  };\n\n  InteractiveImage.prototype.simulate = function simulate(e, doc, x, y) {\n    if (this.simulator) {\n      this.simulator.simulate(e, doc, x, y);\n    }\n  };\n\n  return InteractiveImage;\n}(_ImageBase3.default);\n\nexports.default = InteractiveImage;\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _GraphUtils = __webpack_require__(7);\n\nvar _GraphUtils2 = _interopRequireDefault(_GraphUtils);\n\nvar _MathUtils = __webpack_require__(3);\n\nvar _MathUtils2 = _interopRequireDefault(_MathUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LoadingAnimation = function () {\n  LoadingAnimation.prototype.dy = function dy(t, y) {\n    var w = y[0],\n        a = y[1];\n    return [-this.g * Math.cos(a), w];\n  };\n\n  LoadingAnimation.prototype.integrate = function integrate(T) {\n    var t = 0,\n        dt = this.p.dt,\n        os = this.os;\n    while (t < T) {\n      if (t + dt > T) {\n        dt = T - t;\n      }\n      os = _MathUtils2.default.rk4(this.dy.bind({ g: this.p.g }), 0, dt, os);\n      t += dt;\n    }\n    return os;\n  };\n\n  LoadingAnimation.prototype.calcTimeTo = function calcTimeTo(target) {\n    var t = 0,\n        dt = this.p.dt,\n        os = this.os;\n    while (Math.abs(os[1] - target) > 1e-4) {\n      var nos = _MathUtils2.default.rk4(this.dy.bind({ g: this.p.g }), 0, dt, os);\n      if (nos[0] < 0 && nos[1] < target || nos[0] > 0 && nos[1] > target) {\n        dt /= 2;\n      } else {\n        os = nos;\n        t += dt;\n      }\n    }\n    return t;\n  };\n\n  LoadingAnimation.prototype.update = function update(T) {\n    this.os = this.integrate(T);\n\n    this.t += T;\n    if (this.t >= this.p.updateInterval) {\n      this.t = 0;\n      var r = 0.06 * Math.min(this.c.width, this.c.height),\n          a = this.os[1],\n          x0 = 0.5 * this.c.width,\n          y0 = 0.5 * this.c.height,\n          ctx = this.ctx;\n\n      ctx.clearRect(0, 0, this.c.width, this.c.height);\n      ctx.beginPath();\n      ctx.fillStyle = _GraphUtils2.default.color2Rgba(this.p.color, 1);\n      ctx.rect(0, 0, this.c.width, this.c.height);\n      ctx.fill();\n\n      ctx.beginPath();\n      ctx.shadowBlur = 50;\n      ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 0.9), Math.abs(this.os[0] / 6.36));\n      ctx.shadowColor = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 1), 0.9);\n      ctx.shadowOffsetX = 0;\n      ctx.shadowOffsetY = 0;\n      ctx.font = 'bold ' + Math.round(0.25 * r) + 'px Arial';\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      ctx.fillText((0, _libs.tr)('Loading...'), x0, y0);\n\n      var ps = 10,\n          da = 2 * Math.PI / ps; //2.5*_r/r\n      ctx.shadowColor = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, 1), 0.7);\n      for (var i = 0, _a = a, _r = 0.2 * r; i < ps; ++i, _r *= 0.9, _a += da) {\n        ctx.beginPath();\n        ctx.fillStyle = _GraphUtils2.default.color2Rgba(_GraphUtils2.default.inverseColor(this.p.color, (ps - i) / ps), 0.7 * (ps - i) / ps);\n        var cx = x0 + r * Math.cos(_a),\n            cy = y0 - r * Math.sin(_a),\n            nx = x0 + r * Math.cos(_a + da),\n            ny = y0 - r * Math.sin(_a + da);\n        ctx.shadowOffsetX = 0.2 * (nx - cx);\n        ctx.shadowOffsetY = 0.2 * (ny - cy);\n        ctx.arc(cx, cy, _r, 0, Math.PI * 2, 1);\n        ctx.fill();\n      }\n      if (this.onChange) {\n        this.onChange(this.c, this.p.color);\n      }\n    }\n  };\n\n  LoadingAnimation.prototype.getImage = function getImage() {\n    return this.c;\n  };\n\n  LoadingAnimation.prototype.dispose = function dispose() {\n    this.c.width = 0;\n    this.c.height = 0;\n    delete this.ctx;\n    delete this.c;\n  };\n\n  LoadingAnimation.prototype.createSprite = function createSprite(n) {\n    var c = (0, _libs.$)('<canvas width=\"' + this.c.width * n + '\" height=\"' + this.c.height + '\"></canvas>')[0],\n        ctx = c.getContext('2d'),\n        t = this.calcTimeTo(this.os[1] + Math.sign(this.os[0]) * 2 * Math.PI),\n        dt = t / (n + 1);\n    var updateInterval = this.p.updateInterval;\n\n    this.p.updateInterval = 0;\n    for (var i = 0; i < n; ++i) {\n      this.update(dt);\n      ctx.drawImage(this.c, i * this.c.width, 0);\n    }\n    this.p.updateInterval = updateInterval;\n    return c;\n  };\n\n  function LoadingAnimation(width, height, color) {\n    _classCallCheck(this, LoadingAnimation);\n\n    var jC = (0, _libs.$)('<canvas width=\"' + width + '\" height=\"' + height + '\"></canvas>');\n    this.c = jC[0];\n    this.p = {\n      g: 9.8,\n      dt: 1 / 60,\n      color: color,\n      updateInterval: 0.25\n    };\n    this.ctx = this.c.getContext('2d');\n    this.os = [-2, Math.PI / 2];\n    this.t = this.p.updateInterval;\n  }\n\n  return LoadingAnimation;\n}();\n\nexports.default = LoadingAnimation;\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LoadingController = function () {\n  function LoadingController(view) {\n    var showProgress = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    var loadingMsg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n    _classCallCheck(this, LoadingController);\n\n    this.view = view;\n    this.progress = 0;\n    this.showProgress = showProgress;\n    this.getLoadingMsg = loadingMsg || LoadingController.defaultLoadingMsg;\n    this.updateView();\n  }\n\n  LoadingController.defaultLoadingMsg = function defaultLoadingMsg(progress) {\n    return ['Please wait... the Application is Loading: ', progress, '%'].join('');\n  };\n\n  LoadingController.prototype.dispose = function dispose() {\n    this.showProgress = false;\n    this.updateView();\n    delete this.view;\n  };\n\n  LoadingController.prototype.setProgress = function setProgress(v) {\n    this.progress = v;\n    this.updateView();\n  };\n\n  LoadingController.prototype.updateView = function updateView() {\n    if (this.view) {\n\n      this.view.setState('widLoadingProgress', {\n        enable: true,\n        visible: this.showProgress,\n        active: false\n      });\n\n      this.view.setState('txtLoadingProgress', {\n        value: this.getLoadingMsg(this.progress),\n        visible: true\n      });\n\n      for (var _iterator = this.view.getLinks(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n        var _ref;\n\n        if (_isArray) {\n          if (_i >= _iterator.length) break;\n          _ref = _iterator[_i++];\n        } else {\n          _i = _iterator.next();\n          if (_i.done) break;\n          _ref = _i.value;\n        }\n\n        var name = _ref;\n\n        this.view.setState(name, {\n          enable: false,\n          visible: true,\n          active: false\n        });\n      }\n\n      this.view.setState('inpPages', {\n        visible: true,\n        value: ''\n      });\n\n      this.view.setState('inpPage', {\n        visible: true,\n        enable: false,\n        value: ''\n      });\n    }\n  };\n\n  return LoadingController;\n}();\n\nexports.default = LoadingController;\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _EventConverter2 = __webpack_require__(6);\n\nvar _EventConverter3 = _interopRequireDefault(_EventConverter2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar MouseEventConverter = function (_EventConverter) {\n  _inherits(MouseEventConverter, _EventConverter);\n\n  function MouseEventConverter(wnd, doc, element) {\n    _classCallCheck(this, MouseEventConverter);\n\n    var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));\n\n    _this.element = element;\n    _this.binds = {\n      convert: _this.convert.bind(_this)\n    };\n    (0, _libs.$)(_this.element).on('mousemove mousedown mouseover mouseout click', _this.binds.convert);\n    (0, _libs.$)(_this.doc).on('mouseup', _this.binds.convert);\n    return _this;\n  }\n\n  MouseEventConverter.prototype.dispose = function dispose() {\n    (0, _libs.$)(this.element).off('mousemove mousedown mouseover mouseout click', this.binds.convert);\n    (0, _libs.$)(this.doc).off('mouseup', this.binds.convert);\n  };\n\n  return MouseEventConverter;\n}(_EventConverter3.default);\n\nexports.default = MouseEventConverter;\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(0);\n\nvar _MathUtils = __webpack_require__(3);\n\nvar _MathUtils2 = _interopRequireDefault(_MathUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Object3DWatcher = function () {\n  function Object3DWatcher(visual, boundBoxClb) {\n    var testScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.testScale;\n\n    _classCallCheck(this, Object3DWatcher);\n\n    this.visual = visual;\n    this.boundBoxClb = boundBoxClb;\n    this.testScale = testScale;\n    this.camera = visual.camera;\n    this.element = this.visual.element;\n    this.elementSize = { w: 1, h: 1 };\n    this.devicePixelRatio = this.visual.wnd.devicePixelRatio || 1;\n    this.orbit = visual.getOrbit();\n    this.scale = 1;\n\n    this.eps = 1e-4;\n    this.v = new _libs.THREE.Vector3();\n    this.dv = new _libs.THREE.Vector2();\n\n    this.enabled = false;\n\n    visual.addRenderCallback(this.update.bind(this));\n\n    this.os = {\n      vx: 0,\n      vy: 0,\n      x: 0,\n      y: 0\n    };\n    this.orbit.update();\n    this.camera.updateMatrixWorld();\n    var box = this.computeClientBoundBox(),\n        k = 1.11;\n    this.movePan({ x: -k * box.mid.x, y: -k * box.mid.y });\n  }\n\n  Object3DWatcher.prototype.movePan = function movePan(dv) {\n    this.orbit.pan(dv.x * this.visual.width(), -dv.y * this.visual.height());\n  };\n\n  Object3DWatcher.prototype.vToCamera = function vToCamera(v) {\n    v.project(this.camera);\n    return {\n      x: 0.5 * v.x,\n      y: 0.5 * v.y\n    };\n  };\n\n  Object3DWatcher.prototype.computeClientBoundBox = function computeClientBoundBox() {\n    var box = this.boundBoxClb(),\n        xs = [box.min.x, box.max.x],\n        ys = [0, 0],\n        zs = [box.min.z, box.max.z];\n\n    var ps = [],\n        res = { max: {}, min: {} };\n    for (var _iterator = xs, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var x = _ref;\n\n      for (var _iterator2 = ys, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var y = _ref2;\n\n        for (var _iterator3 = zs, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n          var _ref3;\n\n          if (_isArray3) {\n            if (_i3 >= _iterator3.length) break;\n            _ref3 = _iterator3[_i3++];\n          } else {\n            _i3 = _iterator3.next();\n            if (_i3.done) break;\n            _ref3 = _i3.value;\n          }\n\n          var z = _ref3;\n\n          ps.push(this.vToCamera(this.v.set(x, y, z)));\n        }\n      }\n    }\n\n    ps.sort(function (p1, p2) {\n      return p1.x - p2.x;\n    });\n    res.min.x = ps[0].x;\n    res.max.x = ps[ps.length - 1].x;\n    ps.sort(function (p1, p2) {\n      return p1.y - p2.y;\n    });\n    res.min.y = ps[0].y;\n    res.max.y = ps[ps.length - 1].y;\n\n    res.width = res.max.x - res.min.x;\n    res.height = res.max.y - res.min.y;\n\n    res.mid = {\n      x: 0.5 * (res.max.x + res.min.x),\n      y: 0.5 * (res.max.y + res.min.y)\n    };\n\n    return res;\n  };\n\n  Object3DWatcher.prototype.setObject = function setObject(boundBoxClb) {\n    this.boundBoxClb = boundBoxClb;\n  };\n\n  Object3DWatcher.prototype.testScale = function testScale() {\n    return true;\n  };\n\n  Object3DWatcher.prototype.computeCorr = function computeCorr(K, min, max) {\n    var corr = 0;\n    if (K < 1) {\n      if (min > -0.5) {\n        corr = -0.5 - min;\n      } else if (max < 0.5) {\n        corr = 0.5 - max;\n      }\n    } else {\n      if (min < -0.5) {\n        corr = -0.5 - min;\n      } else if (max > 0.5) {\n        corr = 0.5 - max;\n      }\n    }\n    return corr;\n  };\n\n  Object3DWatcher.prototype.getScale = function getScale() {\n    var box = this.computeClientBoundBox(),\n        Kx = this.elementSize.w / box.width,\n        Ky = this.elementSize.h / box.height;\n    return 1 / Math.min(Kx, Ky);\n  };\n\n  Object3DWatcher.prototype.centerView = function centerView(T) {\n    var _this = this;\n\n    var box = this.computeClientBoundBox(),\n        Kx = this.elementSize.w / box.width,\n        Ky = this.elementSize.h / box.height,\n        K = Math.min(Kx, Ky);\n\n    if (this.testScale() && Math.abs(1 / K - this.scale) > this.eps) {\n      var scale = 1 / K + 0.2 * (this.scale - 1 / K);\n      this.orbit.setScale(this.orbit.getScale() / (K * scale));\n      this.orbit.update();\n      this.camera.updateMatrixWorld();\n      box = this.computeClientBoundBox();\n      Kx = this.elementSize.w / box.width;\n      Ky = this.elementSize.h / box.height;\n      K = Math.min(Kx, Ky);\n    }\n\n    var dv = this.dv;\n    if (K > 1 - this.eps) {\n      dv.set(-box.mid.x, -box.mid.y);\n    } else {\n      dv.set(this.computeCorr(Kx, box.min.x, box.max.x), this.computeCorr(Ky, box.min.y, box.max.y));\n    }\n\n    if (Math.sqrt(this.os.vx * this.os.vx + this.os.vy * this.os.vy) > 0.003 || dv.length() > 0.003) {\n      var dt = 1 / 60,\n          t = 0,\n          os = _extends({}, this.os, {\n        x: 0,\n        y: 0\n      });\n      os.tf = function (vx, vy, x, y) {\n        return {\n          x: 75 * (dv.x - x) / Math.pow(_this.devicePixelRatio, 1.0),\n          y: 75 * (dv.y - y) / Math.pow(_this.devicePixelRatio, 1.0)\n        };\n      };\n      while (t < T) {\n        if (t + dt > T) {\n          dt = T - t;\n        }\n        os = this.integrate(os, dt);\n        t += dt;\n      }\n      this.movePan(os);\n      this.os = os;\n    }\n  };\n\n  Object3DWatcher.prototype.integrate = function integrate(os, dt) {\n    var _MathUtils$rk = _MathUtils2.default.rk4(this.dy.bind(os), 0, dt, [os.vx, os.vy, os.x, os.y]),\n        vx = _MathUtils$rk[0],\n        vy = _MathUtils$rk[1],\n        x = _MathUtils$rk[2],\n        y = _MathUtils$rk[3];\n\n    return _extends({}, os, {\n      vx: vx, vy: vy, x: x, y: y\n    });\n  };\n\n  Object3DWatcher.prototype.dy = function dy(t, Y) {\n    var vx = Y[0],\n        vy = Y[1],\n        x = Y[2],\n        y = Y[3],\n        vd = 15,\n        tf = this.tf(vx, vy, x, y);\n\n    return [tf.x - vd * vx, tf.y - vd * vy, vx, vy];\n  };\n\n  Object3DWatcher.prototype.update = function update(dt) {\n    if (this.enabled && this.boundBoxClb) {\n      this.centerView(dt);\n    }\n  };\n\n  return Object3DWatcher;\n}();\n\nexports.default = Object3DWatcher;\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Orbit = function (_THREE$EventDispatche) {\n  _inherits(Orbit, _THREE$EventDispatche);\n\n  function Orbit(object, domElement) {\n    _classCallCheck(this, Orbit);\n\n    var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));\n\n    _this.object = object;\n    _this.domElement = domElement || document.body;\n\n    // Set to false to disable this control\n    _this.enabled = true;\n\n    // \"target\" sets the location of focus, where the object orbits around\n    _this.target = new _libs.THREE.Vector3();\n\n    // How far you can dolly in and out(PerspectiveCamera only)\n    _this.minDistance = 0;\n    _this.maxDistance = Infinity;\n\n    // How far you can zoom in and out(OrthographicCamera only)\n    _this.minZoom = 0;\n    _this.maxZoom = Infinity;\n\n    // How far you can orbit vertically, upper and lower limits.\n    // Range is 0 to Math.PI radians.\n    _this.minPolarAngle = 0; // radians\n    _this.maxPolarAngle = Math.PI; // radians\n\n    // How far you can orbit horizontally, upper and lower limits.\n    // If set, must be a sub-interval of the interval [-Math.PI, Math.PI ].\n    _this.minAzimuthAngle = -Infinity; // radians\n    _this.maxAzimuthAngle = Infinity; // radians\n\n    // Set to true to enable damping (inertia)\n    // If damping is enabled, you must call controls.update() in your animation loop\n    _this.enableDamping = false;\n    _this.dampingFactor = 0.25;\n\n    // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n    // Set to false to disable zooming\n    _this.enableZoom = true;\n    _this.zoomSpeed = 1.0;\n\n    // Set to false to disable rotating\n    _this.enableRotate = true;\n    _this.rotateSpeed = 1.0;\n\n    // Set to false to disable panning\n    _this.enablePan = true;\n\n    // Set to true to automatically rotate around the target\n    // If auto-rotate is enabled, you must call controls.update() in your animation loop\n    _this.autoRotate = false;\n    _this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n    // for reset\n    _this.target0 = _this.target.clone();\n    _this.position0 = _this.object.position.clone();\n    _this.zoom0 = _this.object.zoom;\n\n    //\n    // public methods\n    //\n    _this.getPolarAngle = function () {\n      return spherical.phi;\n    };\n\n    _this.getAzimuthalAngle = function () {\n      return spherical.theta;\n    };\n\n    _this.reset = function () {\n      scope.target.copy(scope.target0);\n      scope.object.position.copy(scope.position0);\n      scope.object.zoom = scope.zoom0;\n\n      scope.object.updateProjectionMatrix();\n      scope.dispatchEvent(changeEvent);\n\n      scope.update();\n    };\n\n    _this.zoomOut = function () {\n      var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.zoomSpeed;\n\n      var _speed = this.zoomSpeed;\n      this.zoomSpeed = speed;\n      dollyIn(getZoomScale());\n      this.zoomSpeed = _speed;\n    };\n\n    _this.zoomIn = function () {\n      var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.zoomSpeed;\n\n      var _speed = this.zoomSpeed;\n      this.zoomSpeed = speed;\n      dollyOut(getZoomScale());\n      this.zoomSpeed = _speed;\n    };\n\n    _this.getScale = function () {\n      return scale;\n    };\n\n    _this.setScale = function (newScale) {\n      scale = newScale;\n    };\n\n    // this method is exposed, but perhaps it would be better if we can make it private...\n    _this.update = function () {\n      var offset = new _libs.THREE.Vector3();\n      // so camera.up is the orbit axis\n      var quat = new _libs.THREE.Quaternion().setFromUnitVectors(object.up, new _libs.THREE.Vector3(0, 1, 0));\n      var quatInverse = quat.clone().inverse();\n      var lastPosition = new _libs.THREE.Vector3();\n      var lastQuaternion = new _libs.THREE.Quaternion();\n\n      return function update() {\n        var position = scope.object.position;\n        offset.copy(position).sub(scope.target);\n        // rotate offset to \"y-axis-is-up\" space\n        offset.applyQuaternion(quat);\n        // angle from z-axis around y-axis\n        spherical.setFromVector3(offset);\n        if (scope.autoRotate) {\n          rotateLeft(getAutoRotationAngle());\n        }\n        spherical.theta += sphericalDelta.theta;\n        spherical.phi += sphericalDelta.phi;\n        // restrict theta to be between desired limits\n        spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta));\n        // restrict phi to be between desired limits\n        spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n        spherical.makeSafe();\n        spherical.radius *= scale;\n        // restrict radius to be between desired limits\n        spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));\n        // move target to panned location\n        scope.target.add(panOffset);\n        offset.setFromSpherical(spherical);\n        // rotate offset back to \"camera-up-vector-is-up\" space\n        offset.applyQuaternion(quatInverse);\n        position.copy(scope.target).add(offset);\n        scope.object.lookAt(scope.target);\n\n        if (scope.enableDamping === true) {\n          sphericalDelta.theta *= 1 - scope.dampingFactor;\n          sphericalDelta.phi *= 1 - scope.dampingFactor;\n        } else {\n          sphericalDelta.set(0, 0, 0);\n        }\n\n        scale = 1;\n        panOffset.set(0, 0, 0);\n\n        // update condition is:\n        // min(camera displacement, camera rotation in radians)^2 > EPS\n        // using small-angle approximation cos(x/2) = 1-x^2 / 8\n\n        if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n\n          scope.dispatchEvent(changeEvent);\n\n          lastPosition.copy(scope.object.position);\n          lastQuaternion.copy(scope.object.quaternion);\n          zoomChanged = false;\n\n          return true;\n        }\n        return false;\n      };\n    }();\n\n    _this.dispose = function () {};\n\n    //\n    // internals\n    //\n    var scope = _this;\n    var changeEvent = { type: 'change' };\n    var EPS = 1e-6;\n    // current position in spherical coordinates\n    var spherical = new _libs.THREE.Spherical();\n    var sphericalDelta = new _libs.THREE.Spherical();\n\n    var scale = 1;\n    var panOffset = new _libs.THREE.Vector3();\n    var zoomChanged = false;\n\n    function getAutoRotationAngle() {\n      return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n    }\n\n    function getZoomScale() {\n      return Math.pow(0.95, scope.zoomSpeed);\n    }\n\n    function rotateLeft(angle) {\n      sphericalDelta.theta -= angle;\n    }\n\n    function rotateUp(angle) {\n      sphericalDelta.phi -= angle;\n    }\n\n    var panLeft = function () {\n      var v = new _libs.THREE.Vector3();\n      return function panLeft(distance, objectMatrix) {\n        v.setFromMatrixColumn(objectMatrix, 0); // get X column of objectMatrix\n        v.multiplyScalar(-distance);\n        panOffset.add(v);\n      };\n    }();\n\n    var panUp = function () {\n      var v = new _libs.THREE.Vector3();\n      return function panUp(distance, objectMatrix) {\n        v.setFromMatrixColumn(objectMatrix, 1); // get Y column of objectMatrix\n        v.multiplyScalar(distance);\n        panOffset.add(v);\n      };\n    }();\n\n    // deltaX and deltaY are in pixels; right and down are positive\n    scope.pan = function () {\n      var offset = new _libs.THREE.Vector3();\n      return function pan(deltaX, deltaY) {\n        var element = scope.domElement;\n        if (scope.object instanceof _libs.THREE.PerspectiveCamera) {\n          // perspective\n          var position = scope.object.position;\n          offset.copy(position).sub(scope.target);\n          var targetDistance = offset.length();\n          // half of the fov is center to top of screen\n          targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180.0);\n          // we actually don't use screenWidth, since perspective camera is fixed to screen height\n          panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n          panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n        } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {\n          // orthographic\n          panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix);\n          panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix);\n        } else {\n          // camera neither orthographic nor perspective\n          console.warn('WARNING: OrbitControls.js encountered an unknown camera type-pan disabled.');\n          scope.enablePan = false;\n        }\n      };\n    }();\n\n    function dollyIn(dollyScale) {\n      if (scope.object instanceof _libs.THREE.PerspectiveCamera) {\n        scale /= dollyScale;\n      } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {\n        scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));\n        scope.object.updateProjectionMatrix();\n        zoomChanged = true;\n      } else {\n        console.warn('WARNING: OrbitControls.js encountered an unknown camera type-dolly/zoom disabled.');\n        scope.enableZoom = false;\n      }\n    }\n\n    function dollyOut(dollyScale) {\n      if (scope.object instanceof _libs.THREE.PerspectiveCamera) {\n        scale *= dollyScale;\n      } else if (scope.object instanceof _libs.THREE.OrthographicCamera) {\n        scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));\n        scope.object.updateProjectionMatrix();\n        zoomChanged = true;\n      } else {\n        console.warn('WARNING: OrbitControls.js encountered an unknown camera type-dolly/zoom disabled.');\n        scope.enableZoom = false;\n      }\n    }\n\n    /* Actions */\n\n    function rotate(event, data) {\n      if (scope.enabled && scope.enableRotate && data.state === 'move') {\n        var element = scope.domElement;\n        // rotating across whole screen goes 360 degrees around\n        rotateLeft(2 * Math.PI * data.dx / element.clientWidth * scope.rotateSpeed);\n        // rotating up and down along whole screen attempts to go 360, but limited to 180\n        rotateUp(2 * Math.PI * data.dy / element.clientHeight * scope.rotateSpeed);\n        scope.update();\n      }\n    }\n\n    function pan(event, data) {\n      if (scope.enabled && scope.enablePan && data.state === 'move') {\n        scope.pan(data.dx, data.dy);\n        scope.update();\n      }\n    }\n\n    function offsetDolly(event, data) {\n      if (scope.enabled && scope.enableZoom && data.state === 'move') {\n        if (data.dy > 0) {\n          dollyIn(getZoomScale());\n        } else if (data.dy < 0) {\n          dollyOut(getZoomScale());\n        }\n        scope.update();\n      }\n    }\n\n    function wheelDolly(event) {\n      if (scope.enabled && scope.enableZoom) {\n        if (event.deltaY > 0) {\n          dollyOut(getZoomScale());\n        } else if (event.deltaY < 0) {\n          dollyIn(getZoomScale());\n        }\n        scope.update();\n      }\n    }\n\n    _this.actions = {\n      rotate: rotate,\n      pan: pan,\n      offsetDolly: offsetDolly,\n      wheelDolly: wheelDolly\n    };\n\n    // force an update at start\n    _this.update();\n    return _this;\n  }\n\n  return Orbit;\n}(_libs.THREE.EventDispatcher);\n\nexports.default = Orbit;\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _ImageBase2 = __webpack_require__(5);\n\nvar _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\nvar _Pdf = __webpack_require__(18);\n\nvar _Pdf2 = _interopRequireDefault(_Pdf);\n\nvar _BaseMathUtils = __webpack_require__(2);\n\nvar _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\nvar _CustomEventConverter = __webpack_require__(16);\n\nvar _CustomEventConverter2 = _interopRequireDefault(_CustomEventConverter);\n\nvar _PolyTarget = __webpack_require__(69);\n\nvar _PolyTarget2 = _interopRequireDefault(_PolyTarget);\n\nvar _Finder = __webpack_require__(17);\n\nvar _Finder2 = _interopRequireDefault(_Finder);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PdfImage = function (_ImageBase) {\n  _inherits(PdfImage, _ImageBase);\n\n  function PdfImage(context, width, height, color, pdf, n) {\n    _classCallCheck(this, PdfImage);\n\n    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n    _this.query = '';\n    _this.n = n;\n    _this.pdf = pdf;\n    _this.v = { x: 0, y: 0, z: 0, set: function set(x, y, z) {\n        this.x = x;this.y = y;this.z = z;\n        return this;\n      }, transform: function transform(m) {\n        var x = m.m[0][0] * this.x + m.m[1][0] * this.y + m.m[2][0] * this.z,\n            y = m.m[0][1] * this.x + m.m[1][1] * this.y + m.m[2][1] * this.z,\n            z = m.m[0][2] * this.x + m.m[0][2] * this.y + m.m[2][0] * this.z;\n        this.x = x;\n        this.y = y;\n        this.z = z;\n        return this;\n      } };\n    _this.m = { m: [[1, 0, 0], [0, 1, 0], [0, 0, 1]], set: function set(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n        this.m = [[m00, m01, m02], [m10, m11, m12], [m20, m21, m22]];\n        return this;\n      } };\n\n    _this.startRender = function () {\n      _this.pdf.getHandler(_this.render.bind(_this));\n    };\n    Promise.resolve().then(function () {\n      return _this.pdf.getHandler(_this.init.bind(_this));\n    });\n    return _this;\n  }\n\n  PdfImage.prototype.setQuery = function setQuery(query) {\n    this.query = query.trim();\n    if (this.textContent) {\n      this.setHits(this.textContent);\n      // this.finishLoad();\n    }\n  };\n\n  PdfImage.prototype.rectSize = function rectSize(r) {\n    return {\n      width: r[2] - r[0],\n      height: r[3] - r[1]\n    };\n  };\n\n  PdfImage.prototype.createPoly = function createPoly(m, p, s) {\n    var poly = [],\n        v = this.v;\n    v.set(p.x, p.y, 1).transform(m);\n    poly.push({ x: v.x, y: v.y });\n    v.set(p.x, p.y + s.height, 1).transform(m);\n    poly.push({ x: v.x, y: v.y });\n    v.set(p.x + s.width, p.y + s.height, 1).transform(m);\n    poly.push({ x: v.x, y: v.y });\n    v.set(p.x + s.width, p.y, 1).transform(m);\n    poly.push({ x: v.x, y: v.y });\n    return poly;\n  };\n\n  PdfImage.prototype.getSimulatedDoc = function getSimulatedDoc() {\n    return this.page;\n  };\n\n  PdfImage.prototype.simulate = function simulate(e, doc, x, y) {\n    if (this.eventConverter) {\n      this.eventConverter.convert(e, { doc: doc, x: x, y: y });\n    }\n  };\n\n  PdfImage.prototype.setAnnotations = function setAnnotations(annos) {\n    var _this2 = this;\n\n    var t = this.viewport.transform,\n        targets = [];\n    this.m.set(t[0], t[1], 0, t[2], t[3], 0, t[4], t[5], 1);\n\n    for (var _iterator = annos, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var anno = _ref;\n\n      if (anno.subtype === 'Link') {\n        var rect = anno.rect,\n            aPos = {\n          x: rect[0],\n          y: rect[1]\n        },\n            aSz = this.rectSize(rect);\n        var _target = new _PolyTarget2.default(this.createPoly(this.m, aPos, aSz).map(function (p) {\n          return { x: p.x / _this2.viewport.width, y: 1 - p.y / _this2.viewport.height };\n        }));\n        _target.anno = anno;\n        _target.callback = this.annoClb.bind(this);\n        targets.push(_target);\n      }\n    }\n    if (targets.length) {\n      this.eventConverter = new _CustomEventConverter2.default(this.wnd, this.doc, _PolyTarget2.default.test, this.page);\n      for (var _iterator2 = targets, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var target = _ref2;\n\n        this.eventConverter.addCustom(target);\n      }\n    }\n  };\n\n  PdfImage.prototype.setHits = function setHits(textContent) {\n    this.textContent = textContent;\n    if (this.query !== '') {\n      this.finder = new _Finder2.default(textContent.items.map(function (item) {\n        return item.str;\n      }), this.query, { contexts: false });\n    }\n  };\n\n  PdfImage.prototype.renderHits = function renderHits() {\n    var _this3 = this;\n\n    if (this.finder) {\n      var view = this.page.view,\n          testSz = (0, _libs.$)('<div style=\"position: absolute; visibility: hidden;\"></div>').appendTo('body'),\n          textDiv = testSz[0],\n          baseOffset = testSz.offset().left;\n      for (var _iterator3 = this.finder.getHits(), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) break;\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) break;\n          _ref3 = _i3.value;\n        }\n\n        var hit = _ref3;\n\n        var item = this.textContent.items[hit.index],\n            t = PDFJS.Util.transform(this.viewport.transform, item.transform),\n            style = this.textContent.styles[item.fontName],\n            angle = Math.atan2(t[1], t[0]) + (style.vertical ? Math.PI / 2 : 0),\n            fontHeight = Math.sqrt(t[2] * t[2] + t[3] * t[3]),\n            fontAscent = style.ascent ? style.ascent * fontHeight : style.descent ? (1 + style.descent) * fontHeight : fontHeight;\n        testSz.html(item.str.substr(0, hit.offset) + '<span>' + item.str.substr(hit.offset, hit.length) + '</span>' + item.str.substr(hit.offset + hit.length));\n\n        textDiv.style.fontSize = fontHeight + 'px';\n        textDiv.style.fontFamily = style.fontFamily;\n\n        var testSpan = testSz.find('span'),\n            iwidth = style.vertical ? item.height * this.viewport.scale : item.width * this.viewport.scale,\n            width = testSz.width(),\n            relativeOffset = (testSpan.offset().left - baseOffset) / width;\n        this.m.set(1, 0, 0, 0, 1, 0, t[4] + fontAscent * Math.sin(angle), t[5] - fontAscent * Math.cos(angle), 1);\n        var poly = this.createPoly(this.m, { x: relativeOffset * iwidth, y: 0 }, { width: iwidth * testSpan.width() / width, height: testSpan.height() });\n        poly = poly.map(function (p) {\n          return { x: p.x / _this3.viewport.width, y: 1 - p.y / _this3.viewport.height };\n        });\n        this.renderHit(poly);\n      }\n      testSz.remove();\n    }\n  };\n\n  PdfImage.prototype.annoClb = function annoClb(e, data) {\n    if (this.context.dispatchEvent) {\n      this.context.dispatchEvent({\n        type: 'pdfAnnotation',\n        event: e,\n        annotation: data.target.anno\n      });\n    }\n  };\n\n  PdfImage.prototype.calcViewport = function calcViewport() {\n    var scale = _BaseMathUtils2.default.calcScale(this.size.width, this.size.height, this.resW, this.resH);\n    if (!this.viewport || Math.abs(this.viewport.scale - scale) > 1e-4) {\n      this.viewport = this.page.getViewport(scale);\n      if (this.type !== 'full') {\n        if (this.type === 'right') {\n          this.viewport.offsetX += 0.5 * this.viewport.width;\n          this.viewport.transform[4] -= 0.5 * this.viewport.width;\n        }\n        this.viewport.width /= 2;\n      }\n      this.resW = this.width = this.viewport.width;\n      this.resH = this.height = this.viewport.height;\n    }\n  };\n\n  PdfImage.prototype.init = function init() {\n    var _this4 = this;\n\n    this.type = this.pdf.getPageType(this.n);\n    this.pdf.getPage(this.n).then(function (page) {\n      _this4.page = page;\n      _this4.size = _Pdf2.default.getPageSize(page);\n      if (_this4.type !== 'full') {\n        _this4.size.width /= 2;\n      }\n      page.getAnnotations().then(_this4.setAnnotations.bind(_this4));\n      page.getTextContent().then(_this4.setHits.bind(_this4));\n      _this4.calcViewport();\n      _this4.finishLoad();\n    }).catch(function (e) {\n      console.error('Cannot load PDF page: ' + (_this4.n + 1));\n      _this4.finishLoad();\n    });\n  };\n\n  PdfImage.prototype.setResolution = function setResolution(res) {\n    _ImageBase.prototype.setResolution.call(this, res);\n    if (this.page) {\n      this.calcViewport();\n    }\n  };\n\n  PdfImage.prototype.render = function render(handler) {\n    var _this5 = this;\n\n    if (this.page) {\n      this.page.render({\n        canvasContext: this.pushCtx(),\n        viewport: this.viewport\n      }).then(function () {\n        _this5.renderHits();\n        _this5.popCtx();\n        _this5.finishRender();\n      });\n    } else {\n      this.renderBlankPage();\n      this.finishRender();\n    }\n  };\n\n  return PdfImage;\n}(_ImageBase3.default);\n\nexports.default = PdfImage;\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Search = function () {\n  function Search(container, pages) {\n    _classCallCheck(this, Search);\n\n    this.container = container;\n    this.pages = pages;\n    this.prevResults = [];\n    container.html('\\n      <div class=\"search\">\\n        <div class=\"query\">\\n          <input class=\"inpQuery\" type=\"text\" maxlength=\"30\" value=\"\" />\\n        </div>\\n        <div class=\"results\">\\n        </div>\\n        <div class=\"status\">\\n\\n        </div>\\n      </div>\\n    ');\n    this.query = container.find('.query input');\n    this.results = container.find('.results');\n    this.status = container.find('.status');\n\n    this.binds = {\n      navigate: this.navigate.bind(this),\n      doQuery: this.doQuery.bind(this)\n    };\n\n    this.query.on('keydown', this.binds.doQuery);\n    this.results.on('click', this.binds.navigate);\n  }\n\n  Search.prototype.dispose = function dispose() {\n    this.results.off('click', this.binds.navigate);\n    this.query.off('keydown', this.binds.doQuery);\n  };\n\n  Search.prototype.navigate = function navigate(e) {\n    e.preventDefault();\n    if (this.onNavigate !== undefined) {\n      var target = (0, _libs.$)(e.target);\n      if (!target.hasClass('result')) {\n        var t = target.find('.result');\n        if (t.length) {\n          target = t;\n        } else {\n          while (target.length && !target.hasClass('result')) {\n            target = (0, _libs.$)(target[0].parentNode);\n          }\n        }\n      }\n      var page = target.attr('data');\n      if (page !== undefined) {\n        this.onNavigate(parseInt(page));\n      }\n    }\n  };\n\n  Search.prototype.doQuery = function doQuery() {\n    var _this = this;\n\n    if (this.onQuery) {\n      var queryStamp = this.queryStamp = Date.now();\n      setTimeout(function () {\n        if (queryStamp === _this.queryStamp) {\n          _this.onQuery(_this.query[0].value.trim());\n        }\n      }, 1000);\n    }\n  };\n\n  Search.prototype.setResults = function setResults(results, lastPage) {\n    if (this.prevResults.length && results[0] !== this.prevResults[0]) {\n      this.prevResults = [];\n      this.results.html('');\n    }\n    var htmls = [];\n    for (var i = this.prevResults.length; i < results.length; ++i) {\n      var result = results[i];\n      htmls.push('<div class=\"result\" data=\"' + result.page + '\">');\n      htmls.push('<a href=\"#\">');\n      htmls.push('<div>' + result.contexts.join('</div><div>') + '</div>');\n      htmls.push('</a>');\n      htmls.push('</div>');\n    }\n    (0, _libs.$)(htmls.join('')).appendTo(this.results);\n    this.prevResults = [].concat(results);\n    if (lastPage === undefined) {\n      this.status.html('');\n    } else {\n      this.status.html(lastPage + ' of ' + this.pages);\n    }\n  };\n\n  return Search;\n}();\n\nexports.default = Search;\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _ImageBase2 = __webpack_require__(5);\n\nvar _ImageBase3 = _interopRequireDefault(_ImageBase2);\n\nvar _Utils = __webpack_require__(4);\n\nvar _Utils2 = _interopRequireDefault(_Utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar StaticImage = function (_ImageBase) {\n  _inherits(StaticImage, _ImageBase);\n\n  function StaticImage(context, width, height, color, src) {\n    _classCallCheck(this, StaticImage);\n\n    var _this = _possibleConstructorReturn(this, _ImageBase.call(this, context, width, height, color));\n\n    _this.binds = {};\n    _this.image = new Image();\n    _this.image.crossOrigin = 'Anonymous';\n    _this.binds.imageLoad = function () {\n      _this.width = _this.image.width;\n      _this.height = _this.image.height;\n      _this.startRender = function () {\n        _this.renderImage(_this.image);\n        _this.finishRender();\n      };\n      _this.finishLoad();\n    };\n    _this.binds.imageError = function () {\n      _this.startRender = function () {\n        _this.renderNotFoundPage();\n        _this.finishRender();\n      };\n      _this.finishLoad();\n    };\n    (0, _libs.$)(_this.image).on('load', _this.binds.imageLoad).on('error', _this.binds.imageError);\n    _this.image.src = _Utils2.default.normalizeUrl(src);\n    return _this;\n  }\n\n  StaticImage.prototype.dispose = function dispose() {\n    (0, _libs.$)(this.image).off('load', this.binds.imageLoad).off('error', this.binds.imageError);\n    this.image.src = '';\n    delete this.image;\n    _ImageBase.prototype.dispose.call(this);\n  };\n\n  return StaticImage;\n}(_ImageBase3.default);\n\nexports.default = StaticImage;\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TextureAnimator = function () {\n  function TextureAnimator(img, tilesHoriz, tilesVert, numTiles, tileDispDuration) {\n    _classCallCheck(this, TextureAnimator);\n\n    var texture = new _libs.THREE.Texture();\n    texture.minFilter = _libs.THREE.LinearFilter;\n    texture.image = img;\n    texture.needsUpdate = true;\n\n    // note: texture passed by reference, will be updated by the update function.\n    this.texture = texture;\n    this.tilesHorizontal = tilesHoriz;\n    this.tilesVertical = tilesVert;\n    // how many images does this spritesheet contain?\n    //  usually equals tilesHoriz * tilesVert, but not necessarily,\n    //  if there at blank tiles at the bottom of the spritesheet.\n    this.numberOfTiles = numTiles;\n    texture.repeat.set(1 / this.tilesHorizontal, 1 / this.tilesVertical);\n\n    // how long should each image be displayed?\n    this.tileDisplayDuration = tileDispDuration;\n\n    // how long has the current image been displayed?\n    this.currentDisplayTime = 0;\n\n    // which image is currently being displayed?\n    this.currentTile = 0;\n  }\n\n  TextureAnimator.prototype.update = function update(milliSec) {\n    this.currentDisplayTime += milliSec;\n    while (this.currentDisplayTime > this.tileDisplayDuration) {\n      this.currentDisplayTime -= this.tileDisplayDuration;\n      ++this.currentTile;\n      if (this.currentTile == this.numberOfTiles) this.currentTile = 0;\n      var currentColumn = this.currentTile % this.tilesHorizontal;\n      this.texture.offset.x = currentColumn / this.tilesHorizontal;\n      var currentRow = Math.floor(this.currentTile / this.tilesHorizontal);\n      this.texture.offset.y = currentRow / this.tilesVertical;\n    }\n  };\n\n  TextureAnimator.prototype.dispose = function dispose() {\n    var img = this.texture.image;\n    img.height = img.width = 0;\n    this.texture.dispose();\n  };\n\n  return TextureAnimator;\n}();\n\nexports.default = TextureAnimator;\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _Utils = __webpack_require__(4);\n\nvar _Utils2 = _interopRequireDefault(_Utils);\n\nvar _MouseEventConverter2 = __webpack_require__(54);\n\nvar _MouseEventConverter3 = _interopRequireDefault(_MouseEventConverter2);\n\nvar _ThreeEventConverter = __webpack_require__(19);\n\nvar _ThreeEventConverter2 = _interopRequireDefault(_ThreeEventConverter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ThreeMouseEventConverter = function (_MouseEventConverter) {\n  _inherits(ThreeMouseEventConverter, _MouseEventConverter);\n\n  function ThreeMouseEventConverter(wnd, doc, visualWorld, test) {\n    _classCallCheck(this, ThreeMouseEventConverter);\n\n    var _this = _possibleConstructorReturn(this, _MouseEventConverter.call(this, wnd, doc, visualWorld.element));\n\n    _Utils2.default.extends(_this, new _ThreeEventConverter2.default(visualWorld, test));\n    return _this;\n  }\n\n  ThreeMouseEventConverter.prototype.getCallback = function getCallback(object) {\n    return object.object.userData.mouseCallback;\n  };\n\n  ThreeMouseEventConverter.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {\n    var jElement = (0, _libs.$)(this.element);\n    var offset = jElement.offset();\n    this.coords.x = (e.pageX - offset.left) / jElement.width() * 2 - 1;\n    this.coords.y = -((e.pageY - offset.top) / jElement.height()) * 2 + 1;\n    return this.coords;\n  };\n\n  return ThreeMouseEventConverter;\n}(_MouseEventConverter3.default);\n\nexports.default = ThreeMouseEventConverter;\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _Utils = __webpack_require__(4);\n\nvar _Utils2 = _interopRequireDefault(_Utils);\n\nvar _TouchEventConverter2 = __webpack_require__(64);\n\nvar _TouchEventConverter3 = _interopRequireDefault(_TouchEventConverter2);\n\nvar _ThreeEventConverter = __webpack_require__(19);\n\nvar _ThreeEventConverter2 = _interopRequireDefault(_ThreeEventConverter);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ThreeTouchEventConverter = function (_TouchEventConverter) {\n  _inherits(ThreeTouchEventConverter, _TouchEventConverter);\n\n  function ThreeTouchEventConverter(wnd, doc, visualWorld, test) {\n    _classCallCheck(this, ThreeTouchEventConverter);\n\n    var _this = _possibleConstructorReturn(this, _TouchEventConverter.call(this, wnd, doc, visualWorld.element));\n\n    _Utils2.default.extends(_this, new _ThreeEventConverter2.default(visualWorld, test));\n    return _this;\n  }\n\n  ThreeTouchEventConverter.prototype.getCallback = function getCallback(object) {\n    return object.object.userData.touchCallback;\n  };\n\n  ThreeTouchEventConverter.prototype.setCoordsFromEvent = function setCoordsFromEvent(e) {\n    var jElement = (0, _libs.$)(this.element),\n        offset = jElement.offset(),\n        touches = e.touches || e.originalEvent.touches,\n        touch = touches.length ? touches[0] : (this.lastTouches || [{ pageX: 0, pageY: 0 }])[0],\n        pageX = touch.pageX,\n        pageY = touch.pageY;\n    this.lastTouches = touches.length ? touches : this.lastTouches;\n    this.coords.x = (pageX - offset.left) / jElement.width() * 2 - 1;\n    this.coords.y = -((pageY - offset.top) / jElement.height()) * 2 + 1;\n    return this.coords;\n  };\n\n  return ThreeTouchEventConverter;\n}(_TouchEventConverter3.default);\n\nexports.default = ThreeTouchEventConverter;\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(0);\n\nvar _ImageFactory = __webpack_require__(8);\n\nvar _ImageFactory2 = _interopRequireDefault(_ImageFactory);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Thumbnails = function () {\n  function Thumbnails(context, container, thumbnailsClb, size) {\n    var _this = this;\n\n    var props = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { kWtoH: 210 / 297 };\n\n    _classCallCheck(this, Thumbnails);\n\n    this.container = container;\n    this.p = props;\n    this.thumbnailsClb = thumbnailsClb;\n    this.size = size;\n    this.canvas = (0, _libs.$)('<canvas>')[0];\n    this.imageFactory = new _ImageFactory2.default(_extends({}, context, {\n      renderCanvas: this.canvas,\n      renderCanvasCtx: this.canvas.getContext('2d')\n    }));\n    this.thumbnails = [];\n    for (var i = 0; i < size; ++i) {\n      var info = this.thumbnailsClb(i);\n      this.thumbnails.push(_extends({}, info, {\n        index: i,\n        loaded: info.type === 'thumbnail-image',\n        heading: null,\n        thumbnail: null,\n        title: info.title || i\n      }));\n    }\n\n    this.binds = {\n      update: this.update.bind(this),\n      navigate: function navigate(e) {\n        e.preventDefault();\n        if (_this.onNavigate) {\n          var node = e.target;\n          while (node && !node.dataThumbnail) {\n            node = node.parentNode;\n          }\n          _this.onNavigate(node.dataThumbnail.index);\n        }\n      }\n    };\n    this.container.on('scroll', this.binds.update);\n  }\n\n  Thumbnails.prototype.getSize = function getSize() {\n    return this.size;\n  };\n\n  Thumbnails.prototype.setEnable = function setEnable(enable) {\n    this.enable = enable;\n    this.update();\n  };\n\n  Thumbnails.prototype.dispose = function dispose() {\n    this.container.find('a').off('click', this.binds.navigate);\n    this.container.off('scroll', this.binds.update);\n    this.container.html('');\n    this.canvas.height = this.canvas.width = 0;\n    delete this.canvas;\n  };\n\n  Thumbnails.prototype.load = function load(thumbnail) {\n    var _this2 = this;\n\n    this.loading = true;\n    var wrapper = this.imageFactory.build(thumbnail, thumbnail.number === undefined ? thumbnail.index : thumbnail.number, this.p.kWtoH * 300, 300);\n    wrapper.onChange = function (canvas) {\n      _this2.setImage(thumbnail, canvas.toDataURL('image/png'));\n      thumbnail.loaded = true;\n      wrapper.dispose();\n      _this2.loading = false;\n      Promise.resolve().then(function () {\n        return _this2.update();\n      });\n    };\n  };\n\n  Thumbnails.prototype.getActive = function getActive() {\n    var first = this.container.scrollTop(),\n        last = first + this.container.height(),\n        res = [];\n    for (var _iterator = this.thumbnails, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var thumbnail = _ref;\n\n      if (Math.max(thumbnail.first, first) < Math.min(thumbnail.last, last)) {\n        res.push(thumbnail);\n      }\n    }\n    return res;\n  };\n\n  Thumbnails.prototype.update = function update() {\n    if (!this.loading && this.canvas && this.enable) {\n      if (!this.built) {\n        this.render();\n      }\n      var active = this.getActive();\n      for (var _iterator2 = active, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n        var _ref2;\n\n        if (_isArray2) {\n          if (_i2 >= _iterator2.length) break;\n          _ref2 = _iterator2[_i2++];\n        } else {\n          _i2 = _iterator2.next();\n          if (_i2.done) break;\n          _ref2 = _i2.value;\n        }\n\n        var thumbnail = _ref2;\n\n        if (!thumbnail.loaded) {\n          this.load(thumbnail);\n          break;\n        }\n      }\n    }\n  };\n\n  Thumbnails.prototype.setImage = function setImage(thumbnail, img) {\n    thumbnail.img = img;\n    thumbnail.thumbnail.css('background-image', ['url(\\'', img, '\\')'].join(''));\n    thumbnail.thumbnail.removeClass('loading');\n  };\n\n  Thumbnails.prototype.render = function render() {\n    var elements = ['<div class=\"thumbnails\">'];\n    for (var i = 0; i < this.size; ++i) {\n      elements.push(['<div class=\"item\"><a href=\"#\"><div class=\"thumbnail loading\"></div></a><div class=\"heading\"><a href=\"#\" title=\"', i + 1, '\">', i + 1, '</a></div></div>'].join(''));\n    }\n    elements.push('</div>');\n    this.container.append(elements.join(''));\n    var items = this.container.find('.item'),\n        base = this.container.find('.thumbnails').offset().top;\n    for (var _i3 = 0; _i3 < items.length; ++_i3) {\n      var item = (0, _libs.$)(items[_i3]);\n      this.thumbnails[_i3].heading = item.find('.heading');\n      this.thumbnails[_i3].thumbnail = item.find('.thumbnail');\n      this.thumbnails[_i3].first = item.offset().top - base;\n      this.thumbnails[_i3].last = this.thumbnails[_i3].first + item.height();\n      if (this.thumbnails[_i3].loaded) {\n        this.setImage(this.thumbnails[_i3], this.thumbnails[_i3].src);\n      }\n      var as = item.find('a');\n      for (var j = 0; j < as.length; ++j) {\n        var a = as[j];\n        a.dataThumbnail = this.thumbnails[_i3];\n      }\n    }\n    this.container.find('a').on('click', this.binds.navigate);\n    this.built = true;\n  };\n\n  return Thumbnails;\n}();\n\nexports.default = Thumbnails;\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _libs = __webpack_require__(0);\n\nvar _EventConverter2 = __webpack_require__(6);\n\nvar _EventConverter3 = _interopRequireDefault(_EventConverter2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TouchConverter = function (_EventConverter) {\n  _inherits(TouchConverter, _EventConverter);\n\n  function TouchConverter(wnd, doc, element) {\n    _classCallCheck(this, TouchConverter);\n\n    var _this = _possibleConstructorReturn(this, _EventConverter.call(this, wnd, doc));\n\n    _this.element = element;\n    _this.binds = {\n      convert: _this.convert.bind(_this)\n    };\n    (0, _libs.$)(_this.element).on('touchstart touchmove', _this.binds.convert);\n    (0, _libs.$)(_this.doc).on('touchend', _this.binds.convert);\n    return _this;\n  }\n\n  TouchConverter.prototype.dispose = function dispose() {\n    (0, _libs.$)(this.element).off('touchstart touchmove', this.binds.convert);\n    (0, _libs.$)(this.doc).off('touchend', this.binds.convert);\n  };\n\n  return TouchConverter;\n}(_EventConverter3.default);\n\nexports.default = TouchConverter;\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar View = function () {\n  View.classProperty = function classProperty(ctrl, className, value) {\n    if (value) {\n      ctrl.addClass(className);\n    } else {\n      ctrl.removeClass(className);\n    }\n  };\n\n  View.attributeProperty = function attributeProperty(ctrl, attributeName, value) {\n    if (value) {\n      ctrl.attr(attributeName, value);\n    } else {\n      ctrl.removeAttr(attributeName);\n    }\n  };\n\n  View.callHandlers = function callHandlers(handlers, id, e, data) {\n    for (var _iterator = handlers, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var handler = _ref;\n\n      if (handler[id]) {\n        handler[id](e, data);\n      } else if (handler.handleDefault) {\n        handler.handleDefault(id, e, data);\n      }\n    }\n  };\n\n  View.handleEvent = function handleEvent(id, getHandlers, e, data) {\n    View.callHandlers(getHandlers(id), id, e, data);\n  };\n\n  View.handleLinkEvent = function handleLinkEvent(e) {\n    e.preventDefault();\n    if (!this.ctrl.hasClass('disabled')) {\n      View.handleEvent(this.id, this.getHandlers, e);\n    }\n  };\n\n  View.handleInputEvent = function handleInputEvent(e) {\n    View.handleEvent(this.id, this.getHandlers, e, e.target.value);\n  };\n\n  View.handleFormEvent = function handleFormEvent(e) {\n    e.preventDefault();\n    View.handleEvent(this.id, this.getHandlers, e);\n  };\n\n  // virtual functions {\n\n\n  View.prototype.getLinks = function getLinks() {\n    return null;\n  };\n\n  View.prototype.getWidgets = function getWidgets() {\n    return null;\n  };\n\n  View.prototype.getInputs = function getInputs() {\n    return null;\n  };\n\n  View.prototype.getTexts = function getTexts() {\n    return null;\n  };\n\n  View.prototype.getTemplate = function getTemplate() {\n    return {};\n  };\n\n  View.prototype.getHandlers = function getHandlers(id) {\n    return this.handlers;\n  };\n  // }\n\n  View.prototype.callLater = function callLater(handlers, id, e, data, ms) {\n    var _this = this;\n\n    this.pendings[id] = {\n      timestamp: new Date().getTime()\n    };\n    setTimeout(function () {\n      var timestamp = new Date().getTime(),\n          pending = _this.pendings[id];\n      if (pending && timestamp - pending.timestamp >= ms) {\n        View.callHandlers(handlers, id, e, data);\n        delete _this.pendings[id];\n      }\n    }, ms);\n  };\n\n  // loadFiles(urls, ready, failure) {\n  //   let done = Promise.resolve();\n  //   for(let url of urls) {\n  //     done = done.then(()=> {\n  //       return new Promise((resolve, reject)=> {\n  //         $.get(url, (res)=> {\n  //           ready(res, url);\n  //           resolve();\n  //         }).fail((res)=> {\n  //           if(failure && failure(res, url)) {\n  //             resolve();\n  //           }\n  //           else {\n  //             reject(res);\n  //           }\n  //         });\n  //       });\n  //     });\n  //   }\n  //   return done;\n  // }\n\n  View.prototype.loadFiles = function loadFiles(urls, files) {\n    var tasks = [];\n\n    var _loop = function _loop() {\n      if (_isArray2) {\n        if (_i2 >= _iterator2.length) return 'break';\n        _ref2 = _iterator2[_i2++];\n      } else {\n        _i2 = _iterator2.next();\n        if (_i2.done) return 'break';\n        _ref2 = _i2.value;\n      }\n\n      var name = _ref2;\n\n      files[name] = [];\n\n      var _loop2 = function _loop2() {\n        if (_isArray3) {\n          if (_i3 >= _iterator3.length) return 'break';\n          _ref3 = _iterator3[_i3++];\n        } else {\n          _i3 = _iterator3.next();\n          if (_i3.done) return 'break';\n          _ref3 = _i3.value;\n        }\n\n        var url = _ref3;\n\n        tasks.push(new Promise(function (resolve, reject) {\n          _libs.$.get(url, function (data) {\n            files[name].push({ url: url, data: data });\n            resolve();\n          }).fail(function (res) {\n            reject(res);\n          });\n        }));\n      };\n\n      for (var _iterator3 = urls[name], _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {\n        var _ref3;\n\n        var _ret2 = _loop2();\n\n        if (_ret2 === 'break') break;\n      }\n    };\n\n    for (var _iterator2 = Object.keys(urls), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {\n      var _ref2;\n\n      var _ret = _loop();\n\n      if (_ret === 'break') break;\n    }\n    return Promise.all(tasks);\n  };\n\n  View.prototype.urlResolver = function urlResolver(baseUrl, url) {\n    url = url.replace(/\\\\/g, '/');\n    if (url.charAt(0) !== '/') {\n      baseUrl = baseUrl.replace(/\\\\/g, '/');\n      var p = baseUrl.lastIndexOf('/');\n      url = (~p ? baseUrl.substr(0, p + 1) : '') + url;\n\n      var parts = url.split('/');\n      url = [];\n      for (var _iterator4 = parts, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {\n        var _ref4;\n\n        if (_isArray4) {\n          if (_i4 >= _iterator4.length) break;\n          _ref4 = _iterator4[_i4++];\n        } else {\n          _i4 = _iterator4.next();\n          if (_i4.done) break;\n          _ref4 = _i4.value;\n        }\n\n        var part = _ref4;\n\n        if (part === '.') {} else if (part === '..') {\n          if (url.length && !(url.length === 1 && url[0] === '')) {\n            url.pop();\n          }\n        } else {\n          url.push(part);\n        }\n      }\n      url = url.join('/');\n    }\n\n    return url;\n  };\n\n  View.prototype.objToAttrsStr = function objToAttrsStr(o) {\n    var res = [];\n    for (var _iterator5 = Object.keys(o), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {\n      var _ref5;\n\n      if (_isArray5) {\n        if (_i5 >= _iterator5.length) break;\n        _ref5 = _iterator5[_i5++];\n      } else {\n        _i5 = _iterator5.next();\n        if (_i5.done) break;\n        _ref5 = _i5.value;\n      }\n\n      var _name = _ref5;\n\n      res.push([_name, '=\"', o[_name], '\"'].join(''));\n    }\n    return res.join(' ');\n  };\n\n  View.prototype.checkIframeSize = function checkIframeSize() {\n    if (this.frame) {\n      if (Math.abs(this.frame.width - this.parentContainer.width()) > 1 || Math.abs(this.frame.height - this.parentContainer.height()) > 1) {\n        this.onResize();\n      }\n      setTimeout(this.checkIframeSize.bind(this), 250);\n    }\n  };\n\n  View.prototype.onResize = function onResize() {\n    this.frame.width = this.parentContainer.width();\n    this.frame.height = this.parentContainer.height();\n  };\n\n  View.prototype.translate = function translate(html) {\n    return html.replace(/<\\$tr>(.*)<\\/\\$tr>/gi, function (s0, s1) {\n      return (0, _libs.tr)(s1);\n    });\n  };\n\n  View.prototype.fireLinksOnLoadEvent = function fireLinksOnLoadEvent() {\n    var _this2 = this;\n\n    if (this.templateObject && this.templateObject.linkLoaded) {\n      var loaded = true;\n\n      var _loop3 = function _loop3() {\n        if (_isArray6) {\n          if (_i6 >= _iterator6.length) return 'break';\n          _ref6 = _iterator6[_i6++];\n        } else {\n          _i6 = _iterator6.next();\n          if (_i6.done) return 'break';\n          _ref6 = _i6.value;\n        }\n\n        var jLink = _ref6;\n\n        var link = jLink[0];\n        var img = new Image();\n        img.onerror = function () {\n          return _this2.templateObject.linkLoaded(link);\n        };\n        img.src = link.href;\n      };\n\n      for (var _iterator6 = this.jLinks, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {\n        var _ref6;\n\n        var _ret3 = _loop3();\n\n        if (_ret3 === 'break') break;\n      }\n    }\n  };\n\n  function View(parentContainer, onLoad) {\n    var _this3 = this;\n\n    var template = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n    _classCallCheck(this, View);\n\n    this.pendings = {};\n    this.binds = {\n      onResize: this.onResize.bind(this)\n    };\n    this.parentContainer = (0, _libs.$)(parentContainer);\n    this.isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n    this.parentContainer.html('<iframe style=\"border: 0;' + (this.isIOS ? '' : ' width: 100%; height: 100%') + '\" scrolling=\"no\"></iframe>');\n\n    this.frame = this.parentContainer.find('iframe')[0];\n    if (this.frame.contentWindow.stop) {\n      this.frame.contentWindow.stop();\n    }\n    if (this.isIOS) {\n      (0, _libs.$)(this.parentContainer[0].ownerDocument.defaultView).on('resize', this.binds.onResize);\n      this.onResize();\n      setTimeout(this.checkIframeSize.bind(this), 250);\n    }\n\n    this.container = (0, _libs.$)(this.frame.contentDocument.body);\n    this.container.css('margin', '0');\n    this.head = (0, _libs.$)(this.frame.contentDocument.head);\n    this.onLoad = onLoad;\n    this.handlers = [];\n\n    var script = template.html ? template.script : this.getTemplate().script;\n    var urls = {\n      styles: template.styles || this.getTemplate().styles,\n      html: [template.html || this.getTemplate().html],\n      script: script ? [script] : []\n    },\n        files = {},\n        links = template.links || this.getTemplate().links;\n\n    this.loadFiles(urls, files).then(function () {\n      var _loop4 = function _loop4() {\n        if (_isArray7) {\n          if (_i7 >= _iterator7.length) return 'break';\n          _ref7 = _iterator7[_i7++];\n        } else {\n          _i7 = _iterator7.next();\n          if (_i7.done) return 'break';\n          _ref7 = _i7.value;\n        }\n\n        var style = _ref7;\n\n        var textCss = style.data,\n            url = style.url;\n        textCss = textCss.replace(/url\\(['\"](.*?)[\"']\\)/g, function (r, r1) {\n          return ['url(', _this3.urlResolver(url, r1), ')'].join('');\n        });\n        (0, _libs.$)('<style type=\"text/css\">' + textCss + '</style>').appendTo(_this3.head);\n      };\n\n      for (var _iterator7 = files.styles, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {\n        var _ref7;\n\n        var _ret4 = _loop4();\n\n        if (_ret4 === 'break') break;\n      }\n\n      _this3.container.html(_this3.translate(files.html[0].data));\n\n      _this3.jLinks = [];\n      for (var _iterator8 = links, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {\n        var _ref8;\n\n        if (_isArray8) {\n          if (_i8 >= _iterator8.length) break;\n          _ref8 = _iterator8[_i8++];\n        } else {\n          _i8 = _iterator8.next();\n          if (_i8.done) break;\n          _ref8 = _i8.value;\n        }\n\n        var _link = _ref8;\n\n        _this3.jLinks.push((0, _libs.$)(['<link ', _this3.objToAttrsStr(_link), '>'].join('')).appendTo(_this3.head));\n      }\n\n      if (files.script[0]) {\n        var init = eval(files.script[0].data);\n        _this3.templateObject = init(_this3.container);\n      } else {\n        _this3.templateObject = {};\n      }\n\n      _this3.linkControls = {};\n      for (var _iterator9 = _this3.getLinks(), _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {\n        var _ref9;\n\n        if (_isArray9) {\n          if (_i9 >= _iterator9.length) break;\n          _ref9 = _iterator9[_i9++];\n        } else {\n          _i9 = _iterator9.next();\n          if (_i9.done) break;\n          _ref9 = _i9.value;\n        }\n\n        var id = _ref9;\n\n        _this3.linkControls[id] = _this3.container.find('.' + id);\n        _this3.binds[id] = View.handleLinkEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: id, ctrl: _this3.linkControls[id] });\n        _this3.linkControls[id].on('click', _this3.binds[id]);\n      }\n\n      _this3.widgetControls = {};\n      for (var _iterator10 = _this3.getWidgets(), _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {\n        var _ref10;\n\n        if (_isArray10) {\n          if (_i10 >= _iterator10.length) break;\n          _ref10 = _iterator10[_i10++];\n        } else {\n          _i10 = _iterator10.next();\n          if (_i10.done) break;\n          _ref10 = _i10.value;\n        }\n\n        var _id = _ref10;\n\n        _this3.widgetControls[_id] = _this3.container.find('.' + _id);\n      }\n\n      _this3.inputControls = {};\n      for (var _iterator11 = _this3.getInputs(), _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) {\n        var _ref11;\n\n        if (_isArray11) {\n          if (_i11 >= _iterator11.length) break;\n          _ref11 = _iterator11[_i11++];\n        } else {\n          _i11 = _iterator11.next();\n          if (_i11.done) break;\n          _ref11 = _i11.value;\n        }\n\n        var _id2 = _ref11;\n\n        _this3.inputControls[_id2] = _this3.container.find('.' + _id2);\n        _this3.binds[_id2] = View.handleInputEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: _id2, ctrl: _this3.inputControls[_id2] });\n        _this3.inputControls[_id2].on('keyup', _this3.binds[_id2]);\n      }\n\n      _this3.formControls = {};\n      for (var _iterator12 = _this3.getForms(), _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) {\n        var _ref12;\n\n        if (_isArray12) {\n          if (_i12 >= _iterator12.length) break;\n          _ref12 = _iterator12[_i12++];\n        } else {\n          _i12 = _iterator12.next();\n          if (_i12.done) break;\n          _ref12 = _i12.value;\n        }\n\n        var _id3 = _ref12;\n\n        _this3.formControls[_id3] = _this3.container.find('.' + _id3);\n        _this3.binds[_id3] = View.handleFormEvent.bind({ getHandlers: _this3.getHandlers.bind(_this3), id: _id3, ctrl: _this3.formControls[_id3] });\n        _this3.formControls[_id3].on('submit', _this3.binds[_id3]);\n      }\n\n      _this3.textControls = {};\n      for (var _iterator13 = _this3.getTexts(), _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) {\n        var _ref13;\n\n        if (_isArray13) {\n          if (_i13 >= _iterator13.length) break;\n          _ref13 = _iterator13[_i13++];\n        } else {\n          _i13 = _iterator13.next();\n          if (_i13.done) break;\n          _ref13 = _i13.value;\n        }\n\n        var _id4 = _ref13;\n\n        _this3.textControls[_id4] = _this3.container.find('.' + _id4);\n      }\n\n      _this3.stateSetters = [{\n        map: _this3.linkControls,\n        setter: _this3.setLinkControlState.bind(_this3)\n      }, {\n        map: _this3.widgetControls,\n        setter: _this3.setWidgetControlState.bind(_this3)\n      }, {\n        map: _this3.inputControls,\n        setter: _this3.setInputControlState.bind(_this3)\n      }, {\n        map: _this3.textControls,\n        setter: _this3.setTextControlState.bind(_this3)\n      }];\n\n      _this3.initView();\n\n      if (_this3.onLoad) {\n        _this3.onLoad();\n      }\n\n      _this3.fireLinksOnLoadEvent();\n    }).catch(function (res) {\n      return console.error(res);\n    });\n  }\n\n  View.prototype.dispose = function dispose() {\n    delete this.textControls;\n    for (var _iterator14 = this.getLinks(), _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) {\n      var _ref14;\n\n      if (_isArray14) {\n        if (_i14 >= _iterator14.length) break;\n        _ref14 = _iterator14[_i14++];\n      } else {\n        _i14 = _iterator14.next();\n        if (_i14.done) break;\n        _ref14 = _i14.value;\n      }\n\n      var id = _ref14;\n\n      this.linkControls[id].off('click', this.binds[id]);\n    }\n    delete this.linkControls;\n    delete this.widgetControls;\n    for (var _iterator15 = this.getInputs(), _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) {\n      var _ref15;\n\n      if (_isArray15) {\n        if (_i15 >= _iterator15.length) break;\n        _ref15 = _iterator15[_i15++];\n      } else {\n        _i15 = _iterator15.next();\n        if (_i15.done) break;\n        _ref15 = _i15.value;\n      }\n\n      var _id5 = _ref15;\n\n      this.inputControls[_id5].off('keyup', this.binds[_id5]);\n    }\n    delete this.inputControls;\n    for (var _iterator16 = this.getForms(), _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) {\n      var _ref16;\n\n      if (_isArray16) {\n        if (_i16 >= _iterator16.length) break;\n        _ref16 = _iterator16[_i16++];\n      } else {\n        _i16 = _iterator16.next();\n        if (_i16.done) break;\n        _ref16 = _i16.value;\n      }\n\n      var _id6 = _ref16;\n\n      this.formControls[_id6].off('submit', this.binds[_id6]);\n    }\n    delete this.formControls;\n\n    !this.templateObject.dispose || this.templateObject.dispose();\n    delete this.templateObject;\n\n    if (this.isIOS) {\n      (0, _libs.$)(this.parentContainer[0].ownerDocument.defaultView).off('resize', this.binds.onResize);\n    }\n    this.parentContainer.html('');\n    delete this.frame;\n  };\n\n  View.prototype.getContainer = function getContainer() {\n    return this.container[0];\n  };\n\n  View.prototype.getParentContainer = function getParentContainer() {\n    return this.parentContainer[0];\n  };\n\n  View.prototype.addHandler = function addHandler(handler) {\n    this.handlers.push(handler);\n  };\n\n  View.prototype.initView = function initView() {};\n\n  View.setControlState = function setControlState(ctrl, defaults, state, stateHandlers) {\n    if (ctrl) {\n      var st = _extends({}, defaults, state);\n      for (var _name2 in st) {\n        if (st.hasOwnProperty(_name2) && stateHandlers[_name2]) {\n          stateHandlers[_name2](ctrl, st[_name2]);\n        }\n      }\n    }\n  };\n\n  View.prototype.setLinkControlState = function setLinkControlState(id, state) {\n    View.setControlState(this.linkControls[id], {\n      visible: true,\n      active: false,\n      enable: true\n    }, state, View.linkStateHandlers);\n  };\n\n  View.prototype.setWidgetControlState = function setWidgetControlState(id, state) {\n    View.setControlState(this.widgetControls[id], {\n      visible: true,\n      active: false,\n      enable: true\n    }, state, View.widgetStateHandlers);\n  };\n\n  View.prototype.setInputControlState = function setInputControlState(id, state) {\n    View.setControlState(this.inputControls[id], {\n      visible: true,\n      enable: true,\n      value: ''\n    }, state, View.inputStateHandlers);\n  };\n\n  View.prototype.setTextControlState = function setTextControlState(id, state) {\n    View.setControlState(this.textControls[id], {\n      visible: true,\n      value: ''\n    }, state, View.textStateHandlers);\n  };\n\n  View.prototype.onItemStateChanged = function onItemStateChanged() {};\n\n  View.prototype.setState = function setState(id, state) {\n    for (var _iterator17 = this.stateSetters, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) {\n      var _ref17;\n\n      if (_isArray17) {\n        if (_i17 >= _iterator17.length) break;\n        _ref17 = _iterator17[_i17++];\n      } else {\n        _i17 = _iterator17.next();\n        if (_i17.done) break;\n        _ref17 = _i17.value;\n      }\n\n      var item = _ref17;\n\n      if (item.map[id]) {\n        item.setter(id, state);\n        this.onItemStateChanged(id, state);\n        break;\n      }\n    }\n  };\n\n  return View;\n}();\n\nView.linkStateHandlers = {\n  visible: function visible(ctrl, value) {\n    return View.classProperty(ctrl, 'hidden', !value);\n  },\n  active: function active(ctrl, value) {\n    return View.classProperty(ctrl, 'active', value);\n  },\n  enable: function enable(ctrl, value) {\n    return View.classProperty(ctrl, 'disabled', !value);\n  }\n};\nView.widgetStateHandlers = {\n  visible: function visible(ctrl, value) {\n    return View.classProperty(ctrl, 'hidden', !value);\n  },\n  active: function active(ctrl, value) {\n    return View.classProperty(ctrl, 'active', value);\n  },\n  enable: function enable(ctrl, value) {\n    return View.classProperty(ctrl, 'disabled', !value);\n  }\n};\nView.inputStateHandlers = {\n  visible: function visible(ctrl, value) {\n    return View.classProperty(ctrl, 'hidden', !value);\n  },\n  value: function value(ctrl, _value) {\n    return ctrl[0].value = _value;\n  },\n  enable: function enable(ctrl, value) {\n    return View.attributeProperty(ctrl, 'disabled', !value);\n  }\n};\nView.textStateHandlers = {\n  visible: function visible(ctrl, value) {\n    return View.classProperty(ctrl, 'hidden', !value);\n  },\n  value: function value(ctrl, _value2) {\n    return ctrl.text(_value2);\n  }\n};\nexports.default = View;\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _libs = __webpack_require__(0);\n\nvar _Orbit = __webpack_require__(56);\n\nvar _Orbit2 = _interopRequireDefault(_Orbit);\n\nvar _ThreeMouseEventConverter = __webpack_require__(61);\n\nvar _ThreeMouseEventConverter2 = _interopRequireDefault(_ThreeMouseEventConverter);\n\nvar _ThreeTouchEventConverter = __webpack_require__(62);\n\nvar _ThreeTouchEventConverter2 = _interopRequireDefault(_ThreeTouchEventConverter);\n\nvar _Drag = __webpack_require__(48);\n\nvar _Drag2 = _interopRequireDefault(_Drag);\n\nvar _CSS3DRenderer = __webpack_require__(12);\n\nvar _CSS3DRenderer2 = _interopRequireDefault(_CSS3DRenderer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar VisualWorld = function (_THREE$EventDispatche) {\n  _inherits(VisualWorld, _THREE$EventDispatche);\n\n  function VisualWorld(wnd, doc, container) {\n    var useHelpers = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n    _classCallCheck(this, VisualWorld);\n\n    var _this = _possibleConstructorReturn(this, _THREE$EventDispatche.call(this));\n\n    _this.wnd = wnd;\n    _this.doc = doc;\n    _this.jContainer = container;\n    _this.renderCallbacks = [];\n\n    _this.clock = new _libs.THREE.Clock();\n\n    _this.raycaster = new _libs.THREE.Raycaster();\n\n    _this.scene = new _libs.THREE.Scene();\n    _this.cssScene = new _libs.THREE.Scene();\n\n    _this.camera = new _libs.THREE.PerspectiveCamera(30, _this.width() / _this.height(), 0.2, 2000);\n    var scale = 1;\n\n    _this.camera.position.x = 0;\n    _this.camera.position.y = 5.5 * scale;\n    _this.camera.position.z = 0;\n\n    _this.renderer = new _libs.THREE.WebGLRenderer({ alpha: true, antialias: true });\n    _this.renderer.setClearColor(0x000000, 0);\n    _this.renderer.setPixelRatio(_this.wnd.devicePixelRatio);\n    _this.renderer.setSize(_this.width(), _this.height());\n\n    _this.jContainer.append(_this.renderer.domElement);\n\n    _this.cssRenderer = new _CSS3DRenderer2.default();\n    _this.cssRenderer.setSize(_this.width(), _this.height());\n    (0, _libs.$)(_this.cssRenderer.domElement).css({\n      position: 'absolute',\n      top: 0,\n      margin: 0,\n      padding: 0\n    });\n    _this.jContainer.append(_this.cssRenderer.domElement);\n\n    _this.element = _this.cssRenderer.domElement;\n\n    _this.controls = new _Orbit2.default(_this.camera, _this.element);\n    _this.controls.target.y = 0.5;\n\n    var cssScene = (0, _libs.$)(_this.cssRenderer.domElement).find('div'),\n        tmpVector = new _libs.THREE.Vector3();\n    _this.controls.addEventListener('change', function () {\n      _this.camera.getWorldDirection(tmpVector);\n      cssScene.css('display', tmpVector.y - _this.camera.position.y > 0 ? 'none' : 'block');\n    });\n\n    _this.textureLoader = new _libs.THREE.TextureLoader();\n\n    _this.scene.add(new _libs.THREE.AmbientLight(0xD0D0D0)); //0xC0C0C0\n\n    _this.light = new _libs.THREE.DirectionalLight(0x404040, 1);\n    _this.light.position.set(0, 6 * scale, 0);\n    _this.light.castShadow = false;\n    // const d = 20*scale;\n    // this.light.shadow.camera.left = -d;\n    // this.light.shadow.camera.right = d;\n    // this.light.shadow.camera.top = d;\n    // this.light.shadow.camera.bottom = -d;\n    // this.light.shadow.camera.near = 1*scale;\n    // this.light.shadow.camera.far = 25*scale;\n    // this.light.shadow.mapSize.x = 1024;\n    // this.light.shadow.mapSize.y = 1024;\n    _this.scene.add(_this.light);\n\n    if (useHelpers) {\n      _this.scene.add(new _libs.THREE.AxisHelper(5));\n    }\n\n    _this.binds = {\n      onWindowResize: _this.onWindowResize.bind(_this),\n      animate: _this.animate.bind(_this)\n    };\n\n    (0, _libs.$)(_this.wnd).on('resize', _this.binds.onWindowResize);\n\n    _this.mouseEvents = new _ThreeMouseEventConverter2.default(_this.wnd, _this.doc, _this);\n    _this.touchEvents = new _ThreeTouchEventConverter2.default(_this.wnd, _this.doc, _this);\n    var filterData = { type: 'mousemove' };\n    _this.mouseEvents.filter = function (element, e) {\n      var types = ['mouseenter', 'mouseover', 'mouseleave', 'mouseout'],\n          contains = function contains(p, c) {\n        return p === c || _libs.$.contains(p, c);\n      };\n      if (e.type === 'mousemove') {\n        filterData.pageX = e.pageX;\n        filterData.pageY = e.pageY;\n      }\n      return e.relatedTarget && ~types.indexOf(e.type) && contains(element, e.target) && contains(element, e.relatedTarget) ? _extends({}, e, filterData) : e;\n    };\n    _this.drag = new _Drag2.default(_this.wnd, _this.doc, _this);\n\n    _this.animate();\n    return _this;\n  }\n\n  VisualWorld.prototype.dispose = function dispose() {\n    delete this.binds.animate;\n    (0, _libs.$)(this.wnd).off('resize', this.binds.onWindowResize);\n    this.mouseEvents.dispose();\n    this.touchEvents.dispose();\n    this.drag.dispose();\n    this.controls.dispose();\n  };\n\n  VisualWorld.prototype.width = function width() {\n    return this.jContainer.width();\n  };\n\n  VisualWorld.prototype.height = function height() {\n    return this.jContainer.height();\n  };\n\n  VisualWorld.prototype.setExtraLighting = function setExtraLighting(v) {\n    this.light.intensity = v;\n  };\n\n  VisualWorld.prototype.getOrbit = function getOrbit() {\n    return this.controls;\n  };\n\n  VisualWorld.prototype.setControlsState = function setControlsState(state) {\n    this.controls.enabled = state;\n  };\n\n  VisualWorld.prototype.getControlsState = function getControlsState() {\n    return this.controls.enabled;\n  };\n\n  VisualWorld.prototype.onWindowResize = function onWindowResize() {\n    var _this2 = this;\n\n    var updateCamera = function updateCamera(camera) {\n      camera.aspect = _this2.width() / _this2.height();\n      camera.updateProjectionMatrix();\n    },\n        updateRenderer = function updateRenderer(renderer) {\n      renderer.setSize(_this2.width(), _this2.height());\n    };\n\n    updateCamera(this.camera);\n    updateRenderer(this.renderer);\n    updateRenderer(this.cssRenderer);\n\n    this.dispatchEvent({ type: 'resize' });\n  };\n\n  VisualWorld.prototype.addObject = function addObject(object) {\n    this.scene.add(object);\n  };\n\n  VisualWorld.prototype.addCssObject = function addCssObject(object) {\n    this.cssScene.add(object);\n  };\n\n  VisualWorld.prototype.removeCssObject = function removeCssObject(object) {\n    this.cssScene.remove(object);\n  };\n\n  VisualWorld.prototype.removeObject = function removeObject(object) {\n    this.scene.remove(object);\n  };\n\n  VisualWorld.prototype.animate = function animate() {\n    if (this.binds.animate) {\n      requestAnimationFrame(this.binds.animate);\n    }\n    this.render();\n  };\n\n  VisualWorld.prototype.addRenderCallback = function addRenderCallback(clb) {\n    this.renderCallbacks.push(clb);\n  };\n\n  VisualWorld.prototype.removeRenderCallback = function removeRenderCallback(clb) {\n    var i = this.renderCallbacks.indexOf(clb);\n    if (~i) {\n      this.renderCallbacks.splice(i, 1);\n    }\n  };\n\n  VisualWorld.prototype.render = function render() {\n    var deltaTime = this.clock.getDelta();\n    this.controls.update(deltaTime);\n    for (var _iterator = this.renderCallbacks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n      var _ref;\n\n      if (_isArray) {\n        if (_i >= _iterator.length) break;\n        _ref = _iterator[_i++];\n      } else {\n        _i = _iterator.next();\n        if (_i.done) break;\n        _ref = _i.value;\n      }\n\n      var clb = _ref;\n\n      clb(deltaTime);\n    }\n    this.cssRenderer.render(this.cssScene, this.camera);\n    this.renderer.render(this.scene, this.camera);\n  };\n\n  VisualWorld.prototype.processGeometry = function processGeometry(bufGeometry, mesh) {\n    mesh.geometry = bufGeometry;\n    // Obtain a Geometry\n    var geometry = new _libs.THREE.Geometry().fromBufferGeometry(bufGeometry);\n    // Merge the vertices so the triangle soup is converted to indexed triangles\n    geometry.mergeVertices();\n    // Convert again to BufferGeometry, indexed\n    var indexedBufferGeom = this.createIndexedBufferGeometryFromGeometry(geometry);\n    // Create index arrays mapping the indexed vertices to bufGeometry vertices\n    return this.mapIndices(bufGeometry, indexedBufferGeom);\n  };\n\n  VisualWorld.prototype.createIndexedBufferGeometryFromGeometry = function createIndexedBufferGeometryFromGeometry(geometry) {\n    var numVertices = geometry.vertices.length;\n    var numFaces = geometry.faces.length;\n\n    var bufferGeom = new _libs.THREE.BufferGeometry();\n    var vertices = new Float32Array(numVertices * 3);\n    var indices = new (numFaces * 3 > 65535 ? Uint32Array : Uint16Array)(numFaces * 3);\n\n    for (var i = 0; i < numVertices; i++) {\n      var p = geometry.vertices[i];\n      var i3 = i * 3;\n      vertices[i3] = p.x;\n      vertices[i3 + 1] = p.y;\n      vertices[i3 + 2] = p.z;\n    }\n\n    for (var _i2 = 0; _i2 < numFaces; _i2++) {\n      var f = geometry.faces[_i2];\n      var _i3 = _i2 * 3;\n      indices[_i3] = f.a;\n      indices[_i3 + 1] = f.b;\n      indices[_i3 + 2] = f.c;\n    }\n\n    bufferGeom.setIndex(new _libs.THREE.BufferAttribute(indices, 1));\n    bufferGeom.addAttribute('position', new _libs.THREE.BufferAttribute(vertices, 3));\n\n    return bufferGeom;\n  };\n\n  VisualWorld.prototype.isEqual = function isEqual(x1, y1, z1, x2, y2, z2) {\n    var delta = 0.000001;\n    return Math.abs(x2 - x1) < delta && Math.abs(y2 - y1) < delta && Math.abs(z2 - z1) < delta;\n  };\n\n  VisualWorld.prototype.mapIndices = function mapIndices(bufGeometry, indexedBufferGeom) {\n    // Creates mappedVertices, mappedIndices and mappedAssociation in bufGeometry\n    var vertices = bufGeometry.attributes.position.array;\n    var idxVertices = indexedBufferGeom.attributes.position.array;\n    var indices = indexedBufferGeom.index.array;\n\n    var numIdxVertices = idxVertices.length / 3;\n    var numVertices = vertices.length / 3;\n\n    bufGeometry.mappedVertices = idxVertices;\n    bufGeometry.mappedIndices = indices;\n    bufGeometry.mappedAssociation = [];\n\n    for (var i = 0; i < numIdxVertices; i++) {\n      var association = [];\n      bufGeometry.mappedAssociation.push(association);\n      var i3 = i * 3;\n      for (var j = 0; j < numVertices; j++) {\n        var j3 = j * 3;\n        if (this.isEqual(idxVertices[i3], idxVertices[i3 + 1], idxVertices[i3 + 2], vertices[j3], vertices[j3 + 1], vertices[j3 + 2])) {\n          association.push(j3);\n        }\n      }\n    }\n    return { vertices: bufGeometry.mappedVertices, indices: bufGeometry.mappedIndices };\n  };\n\n  VisualWorld.prototype.oneNodePositionCallback = function oneNodePositionCallback(p, q) {\n    this.position.set(p.x, p.y, p.z);\n    this.quaternion.set(q.x, q.y, q.z, q.w);\n  };\n\n  VisualWorld.prototype.multyNodePositionCallback = function multyNodePositionCallback(node, p, n) {\n    var geometry = this.geometry;\n    var volumePositions = geometry.attributes.position.array;\n    var volumeNormals = geometry.attributes.normal.array;\n    var assocVertex = geometry.mappedAssociation[node];\n\n    for (var k = 0; k < assocVertex.length; k++) {\n      var indexVertex = assocVertex[k];\n      volumePositions[indexVertex] = p.x;\n      volumeNormals[indexVertex] = n.x;\n      ++indexVertex;\n      volumePositions[indexVertex] = p.y;\n      volumeNormals[indexVertex] = n.y;\n      ++indexVertex;\n      volumePositions[indexVertex] = p.z;\n      volumeNormals[indexVertex] = n.z;\n    }\n  };\n\n  VisualWorld.prototype.multyNodePositionPostCallback = function multyNodePositionPostCallback() {\n    var geometry = this.geometry;\n    geometry.attributes.position.needsUpdate = true;\n    geometry.attributes.normal.needsUpdate = true;\n  };\n\n  VisualWorld.prototype.pathPositionCallback = function pathPositionCallback(node, p) {\n    var positions = this.geometry.attributes.position.array;\n    var i = 3 * node;\n    positions[i++] = p.x;\n    positions[i++] = p.y;\n    positions[i] = p.z;\n  };\n\n  VisualWorld.prototype.pathPositionPostCallback = function pathPositionPostCallback() {\n    var geometry = this.geometry;\n    geometry.computeVertexNormals();\n    geometry.attributes.position.needsUpdate = true;\n    geometry.attributes.normal.needsUpdate = true;\n  };\n\n  return VisualWorld;\n}(_libs.THREE.EventDispatcher);\n\nexports.default = VisualWorld;\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _Controller2 = __webpack_require__(15);\n\nvar _Controller3 = _interopRequireDefault(_Controller2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar WidgetController = function (_Controller) {\n  _inherits(WidgetController, _Controller);\n\n  function WidgetController(view) {\n    _classCallCheck(this, WidgetController);\n\n    var _this = _possibleConstructorReturn(this, _Controller.call(this));\n\n    _this.view = view;\n    _this.visible = false;\n    return _this;\n  }\n\n  WidgetController.prototype.togle = function togle() {\n    this.visible = !this.visible;\n    this.fireChange();\n  };\n\n  WidgetController.prototype.hide = function hide() {\n    this.visible = false;\n    this.fireChange();\n  };\n\n  WidgetController.prototype.fireChange = function fireChange() {\n    if (this.onChange) {\n      this.onChange();\n    }\n    this.updateView();\n  };\n\n  WidgetController.prototype.updateView = function updateView() {\n    if (this.view) {\n      this.view.setState('widFloatWnd', {\n        enable: true,\n        visible: this.visible,\n        active: false\n      });\n    }\n  };\n\n  return WidgetController;\n}(_Controller3.default);\n\nexports.default = WidgetController;\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _Target2 = __webpack_require__(21);\n\nvar _Target3 = _interopRequireDefault(_Target2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar CircleTarget = function (_Target) {\n  _inherits(CircleTarget, _Target);\n\n  function CircleTarget(x, y, r) {\n    _classCallCheck(this, CircleTarget);\n\n    var _this = _possibleConstructorReturn(this, _Target.call(this));\n\n    _this.p = {\n      x: x,\n      y: y,\n      r: r\n    };\n    return _this;\n  }\n\n  CircleTarget.prototype.testIntersection = function testIntersection(e, data) {\n    var res = void 0;\n    var x = data.x,\n        y = data.y,\n        p = this.p;\n\n    if ((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y) <= p.r * p.r) {\n      res = {\n        target: this,\n        data: data\n      };\n    }\n    return res;\n  };\n\n  return CircleTarget;\n}(_Target3.default);\n\nexports.default = CircleTarget;\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\"use strict\";\n'use strict';\n\nexports.__esModule = true;\n\nvar _Target2 = __webpack_require__(21);\n\nvar _Target3 = _interopRequireDefault(_Target2);\n\nvar _BaseMathUtils = __webpack_require__(2);\n\nvar _BaseMathUtils2 = _interopRequireDefault(_BaseMathUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar PolyTarget = function (_Target) {\n  _inherits(PolyTarget, _Target);\n\n  function PolyTarget(poly) {\n    _classCallCheck(this, PolyTarget);\n\n    var _this = _possibleConstructorReturn(this, _Target.call(this));\n\n    _this.poly = poly;\n    return _this;\n  }\n\n  PolyTarget.prototype.testIntersection = function testIntersection(e, p) {\n    return _BaseMathUtils2.default.isInsidePoly(this.poly, p) ? {\n      target: this,\n      data: p\n    } : undefined;\n  };\n\n  return PolyTarget;\n}(_Target3.default);\n\nexports.default = PolyTarget;\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){ true?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n/*** IMPORTS FROM imports-loader ***/\nvar define = false;\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof define === 'function' && define.amd ) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (true) {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\n\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n__webpack_require__(23);\nmodule.exports = __webpack_require__(22);\n\n\n/***/ }\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNzI0ZTU4ZGY1OGM2NWM0ODA4YjQiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2xpYnMuanMiLCJ3ZWJwYWNrOi8vLy4vanMvbGlicy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9CYXNlTWF0aFV0aWxzLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL01hdGhVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9VdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9JbWFnZUJhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvR3JhcGhVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9JbWFnZUZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9Cb29rUHJvcHNCdWlsZGVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvU2hlZXRCbG9jay5qcyIsIndlYnBhY2s6Ly8vLi9qcy9wcm9wcy9ib29rLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0NTUzNEUmVuZGVyZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQ1NTTGF5ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQ29udHJvbGxlci5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9DdXN0b21FdmVudENvbnZlcnRlci5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9GaW5kZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvUGRmLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy90YXJnZXRzL1RhcmdldC5qcyIsIndlYnBhY2s6Ly8vLi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9BdXRvTmF2aWdhdG9yLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvQmluZGVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvQm9vay5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL0Jvb2tDb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvQm9va1ByaW50ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9Cb29rVmlldy5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL0NsYkJvb2tQcm9wc0J1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9Db3Zlci5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL0Nzc0xheWVyc01hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9QYWdlTWFuYWdlci5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL1BkZkJvb2tQcm9wc0J1aWxkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9QZGZMaW5rc0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9TZWFyY2hFbmdpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vanMvY2xhc3Nlcy9TaGVldENzc0xheWVyLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvU2hlZXRQaHlzaWNzLmpzIiwid2VicGFjazovLy8uL2pzL2NsYXNzZXMvU291bmRzRW52aXJvbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9qcy9jbGFzc2VzL1RvY0NvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kZWxzL3NoZWV0QmxvY2suanMiLCJ3ZWJwYWNrOi8vLy4vanMvcHJvcHMvYm9va0NvbnRyb2xsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvQmxhbmtJbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9Cb29rbWFya3MuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRGV0ZWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRG9jTW91c2VTaW11bGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRG9tMkltYWdlLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0RyYWcuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvRXZlbnRzVG9BY3Rpb25zLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0Z1bGxTY3JlZW4uanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvSW50ZXJhY3RpdmVJbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9Mb2FkaW5nQW5pbWF0aW9uLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL0xvYWRpbmdDb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL01vdXNlRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvT2JqZWN0M0RXYXRjaGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL09yYml0LmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1BkZkltYWdlLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1NlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9TdGF0aWNJbWFnZS5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9UZXh0dXJlQW5pbWF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVNb3VzZUV2ZW50Q29udmVydGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlVG91Y2hFdmVudENvbnZlcnRlci5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9UaHVtYm5haWxzLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL1RvdWNoRXZlbnRDb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vLi4vY29tbW9uL2NsYXNzZXMvVmlldy5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9WaXN1YWxXb3JsZC5qcyIsIndlYnBhY2s6Ly8vLi8uLi9jb21tb24vY2xhc3Nlcy9XaWRnZXRDb250cm9sbGVyLmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL3RhcmdldHMvQ2lyY2xlVGFyZ2V0LmpzIiwid2VicGFjazovLy8uLy4uL2NvbW1vbi9jbGFzc2VzL3RhcmdldHMvUG9seVRhcmdldC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N0YXRzLmpzL2J1aWxkL3N0YXRzLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2pxdWVyeS1tb3VzZXdoZWVsL2pxdWVyeS5tb3VzZXdoZWVsLmpzIl0sIm5hbWVzIjpbIl8kIiwid2luZG93IiwialF1ZXJ5IiwicmVxdWlyZSIsIl9odG1sMmNhbnZhcyIsImh0bWwyY2FudmFzIiwiX1RIUkVFIiwiVEhSRUUiLCJfUmVhY3QiLCJSZWFjdCIsIl9SZWFjdERPTSIsIlJlYWN0RE9NIiwiX1BERkpTIiwiUERGSlMiLCJfdHIiLCJzIiwiaWJlcmV6YW5za3kiLCJ0ciIsIiQiLCJGQjNEX0xPQ0FMRSIsImRpY3Rpb25hcnkiLCJCYXNlTWF0aFV0aWxzIiwic3VtMSIsImthIiwiYSIsImtiIiwiYiIsInN1bTIiLCJzdW0zIiwic3VtNCIsInJrNCIsImR5IiwidCIsImR0IiwieSIsInN1bSIsImxlbmd0aCIsImsxIiwiazIiLCJrMyIsIms0IiwiZXh0cmFwb2xhdGVMaW5lYXIiLCJ4IiwieGkiLCJpbnRlcnBvbGF0ZUxpbmVhciIsInlpIiwicmV2ZXJzZSIsImNhbGNTY2FsZSIsInNyY1ciLCJzcmNIIiwiZHN0VyIsImRzdEgiLCJNYXRoIiwibWluIiwibXVsTSIsInIiLCJpIiwicHVzaCIsImoiLCJrIiwidHJhbnNNIiwibSIsIm1hdCIsImRhdGEiLCJkaXNwIiwiTSIsInByZWRpY3QiLCJudW0iLCJsIiwiRCIsImFtIiwiYm0iLCJ0YSIsImQiLCJwIiwidiIsInJvdW5kIiwiaW5kZXhPZiIsImdldFVuaXF1ZSIsImNlaWwiLCJyYW5kb20iLCJzZXRTcGxpbmVQb2ludHMiLCJzcGxpbmUiLCJwcyIsInBvaW50cyIsImNvbnNvbGUiLCJ3YXJuIiwic2V0IiwieiIsIm1hcGwyTCIsImxzIiwibGVuIiwibiIsImYiLCJkTCIsIkwiLCJhYnMiLCJkZXQyIiwiYyIsInNvbHZlMkxpbiIsImExIiwiYjEiLCJhMiIsImIyIiwicmVzIiwiZXBzIiwiZHgiLCJpc0luc2lkZVBvbHkiLCJkb25lIiwiY3QiLCJ2MmRpc3QiLCJucCIsInJuIiwicDAiLCJwMSIsImlwIiwibWF4IiwidG4iLCJpc0luc2lkZUNvbnZQb2x5Iiwic2ciLCJ2MmxlbiIsInYyIiwic3FydCIsInYyMSIsInYyMiIsImNvbXB1dGVTcXVhcmUiLCJjb21wdXRlSW50ZXJwQ29lZnMiLCJ0cmkiLCJjb2VmcyIsIk1hdGhVdGlscyIsInNwbGl0U3BsaW5lIiwiTiIsIm8iLCJkbCIsImdldFBvaW50IiwidjEiLCJkaXN0YW5jZVRvIiwiY29weSIsImdldExpbmVhckluZGVjZXMiLCJkZWwiLCJkRGVsIiwicmVmaW5lUG9seSIsInBvbHkiLCJtYXhEbCIsIlZlY3RvcjIiLCJWZWN0b3IzIiwiVXRpbHMiLCJub3JtYWxpemVVcmwiLCJ1cmwiLCJzcGxpdCIsInJlcGxhY2UiLCJiYXNlIiwibG9jYXRpb24iLCJocmVmIiwiam9pbiIsImV4dGVuZHMiLCJkZXIiLCJuYW1lIiwiaGFzT3duUHJvcGVydHkiLCJkZWZhdWx0Q21wIiwibG93ZXJCb3VuZCIsImNtcCIsImgiLCJtaWQiLCJmbG9vciIsIkltYWdlQmFzZSIsImNvbnRleHQiLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwid25kIiwiZG9jIiwiZWxlbWVudCIsImJvZHkiLCJyZW5kZXJDYW52YXMiLCJjdHgiLCJyZW5kZXJDYW52YXNDdHgiLCJyZXNXIiwicmVzSCIsInNldFJlc29sdXRpb24iLCJkaXNwb3NlIiwicmVuZGVyQmxhbmtQYWdlIiwiYmVnaW5QYXRoIiwiZmlsbFN0eWxlIiwiY29sb3IyUmdiYSIsInJlY3QiLCJmaWxsIiwicmVuZGVySW1hZ2UiLCJpbWFnZSIsInB1c2hDdHgiLCJkcmF3SW1hZ2UiLCJwb3BDdHgiLCJub3JtVG9Db252IiwicmVuZGVySGl0IiwibW92ZVRvIiwibGluZVRvIiwiY2xvc2VQYXRoIiwic2F2ZSIsInNjYWxlIiwicmVzdG9yZSIsInJlbmRlck5vdEZvdW5kUGFnZSIsImZpbmlzaFJlbmRlciIsIm9uQ2hhbmdlIiwiZmluaXNoTG9hZCIsIm9uTG9hZCIsInN0YXJ0UmVuZGVyIiwiZ2V0U2ltdWxhdGVkRG9jIiwidW5kZWZpbmVkIiwiZ2V0Q29udGV4dCIsIkV2ZW50Q29udmVydGVyIiwiZW5hYmxlZCIsInNldEVuYWJsZSIsInZsIiwibUNhcE9iamVjdCIsIm5vdGlmeSIsIkV2ZW50IiwibUhvdk9iamVjdCIsImdldENhbGxiYWNrIiwib2JqZWN0IiwiZSIsInR5cGUiLCJjYWxsYmFjayIsInByb3BzIiwidmlldyIsImpFIiwiY29udmVydCIsImZpbHRlciIsImdldE9iamVjdCIsImNvbnZlcnRUb3VjaCIsImNvbnZlcnRNb3VzZSIsInRDYXBPYmplY3QiLCJ0ZXN0IiwiR3JhcGhVdGlscyIsImludGVycG9sYXRlMDEiLCJ5MSIsInkyIiwiZ2V0Q29sb3JCeXRlcyIsImludmVyc2VDb2xvciIsImJzIiwiaWJzIiwibmJzIiwiYnl0ZXMyQ29sb3IiLCJieXRlczJSZ2JhIiwiSW1hZ2VGYWN0b3J5IiwiY2FjaGUiLCJidWlsZCIsImluZm8iLCJ3aWR0aFRleGVscyIsImhlaWdodFRleGVscyIsImluamVjdG9yIiwic3JjIiwiQm9va1Byb3BzQnVpbGRlciIsIm9uUmVhZHkiLCJkZWZhdWx0cyIsImNhbGNTaXplIiwiY2FsY1RleGVscyIsInNoZWV0IiwiY2FsY1Byb3BzIiwiY292ZXIiLCJwYWdlIiwiY2FsY1NoZWV0cyIsInBhZ2VzIiwic2hlZXRzIiwiZ2V0U2hlZXRzIiwiZ2V0UHJvcHMiLCJnZXRQYWdlQ2FsbGJhY2siLCJiaW5kcyIsInBhZ2VDYWxsYmFjayIsInJlYWR5IiwiU2hlZXRCbG9jayIsInZpc3VhbCIsImZpcnN0IiwibGFzdCIsImFuZ2xlIiwic3RhdGUiLCJsb2FkZWRQb2ludHMiLCJsb2FkUG9pbnRzIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsInNoYXBlIiwicFNwbGluZSIsIlNwbGluZSIsImludGVycG9sYXRpb25Qb2ludHMiLCJpU3BsaW5lIiwicmVzWCIsImFTcGxpbmVzIiwiZ2VvbWV0cnkiLCJjbG9uZSIsInNpZGVGYWNlcyIsImZhY2VzIiwic2lkZVRleHR1cmUiLCJUZXh0dXJlIiwid3JhcFQiLCJSZXBlYXRXcmFwcGluZyIsInJlcGVhdCIsIm5lZWRzVXBkYXRlIiwibWF0ZXJpYWxzIiwiTWVzaFBob25nTWF0ZXJpYWwiLCJzZXRUZXh0dXJlIiwibWVzaCIsIk1lc2giLCJNZXNoRmFjZU1hdGVyaWFsIiwiY2FzdFNoYWRvdyIsInJlY2VpdmVTaGFkb3ciLCJ0aHJlZSIsInVzZXJEYXRhIiwic2VsZiIsIm1hcmtlcnMiLCJtYXJrZXIiLCJ1c2UiLCJ2ZXJ0aWNlcyIsImlzIiwiQXJyYXkiLCJhcHBseSIsIl8iLCJjcmVhdGVNYXJrZXIiLCJzaXplIiwidmVydGV4IiwiYWRkIiwiY29ybmVyIiwibWF4RGlzdGFuY2UiLCJPWiIsImF4aXMiLCJnZXRTaXplIiwiZ2V0VG9wQ2VybmVycyIsIm9mZiIsIlBJIiwicmVzWiIsImdldFRvcFNpemUiLCJ2cyIsImdldFRvcFdvcmxkUm90YXRpb24iLCJxIiwiZ2V0VG9wV29ybGRQb3NpdGlvbiIsInZpIiwibG9jYWxUb1dvcmxkIiwiZ2V0SW50ZXJwb2xhdGlvblBvaW50cyIsImluZHMiLCJtb2QiLCJLIiwid2F2ZSIsImNsb3NlZEFuZ2xlIiwiYmluZGVyVHVybiIsIm9wZW5lZEFuZ2xlIiwiY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMiLCJmbGF0SW50ZXJwb2xhdGlvbkluZGVjZXMiLCJnZXRQb2ludHNBdEFuZ2xlIiwib3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMiLCJobCIsImhyIiwib2Zmc2V0IiwiZGVwdGgiLCJpbkFuZ2xlIiwiaEFuZ2xlIiwiZ2V0UG9pbnRzQXRBbmdsZUFuZEhzIiwibGVmdCIsInJpZ2h0IiwiaW52ZXJzZSIsInNldFBvaW50cyIsInlzIiwicmVzWSIsInBsYW5lIiwiUGxhbmUiLCJub3JtYWwiLCJwbGFuZU9mZnNldCIsImZsZXhpYmxlQ29ybmVyIiwicHJvaiIsInNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50Iiwibm9ybWFsaXplIiwicHJvamVjdFBvaW50Iiwic3ViIiwiZGlzdGFuY2UiLCJkMkFuZ2xlIiwiY29ybmVyRGV2aWF0aW9uIiwiZXhwIiwiYmVuZGluZyIsImFwcGx5QXhpc0FuZ2xlIiwicG9pbnQiLCJwb3NpdGlvbiIsImNvbXB1dGVWZXJ0ZXhOb3JtYWxzIiwiY29tcHV0ZUJvdW5kaW5nU3BoZXJlIiwidmVydGljZXNOZWVkVXBkYXRlIiwibWFya3VwIiwiY29tcHV0ZVZlcnRpY2VzIiwiZ2V0UG9pbnRzQXRIcyIsImhzIiwiYmwiLCJwMiIsImRwIiwibG4iLCJzcCIsInNpbiIsImNvcyIsIm5wcyIsImFuZ2xlcyIsInhwcyIsInlwcyIsImludGVycG9sYXRlIiwiZ3Jhdml0eSIsImNhY2hlZFBhZ2VzIiwicmVuZGVySW5hY3RpdmVQYWdlcyIsInJlbmRlckluYWN0aXZlUGFnZXNPbk1vYmlsZSIsInJlbmRlcldoaWxlRmxpcHBpbmciLCJwYWdlc0ZvclByZWRpY3RpbmciLCJwcmVsb2FkUGFnZXMiLCJydGwiLCJzdGFydFZlbG9jaXR5IiwiZmxleGliaWxpdHkiLCJiaW5kZXJUZXh0dXJlIiwicGFkZGluZyIsIm1hc3MiLCJjc3NMYXllclByb3BzIiwiQ1NTM0RPYmplY3QiLCJzdHlsZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJPYmplY3QzRCIsIkNTUzNEU3ByaXRlIiwiQ1NTM0RSZW5kZXJlciIsIl93aWR0aCIsIl9oZWlnaHQiLCJfd2lkdGhIYWxmIiwiX2hlaWdodEhhbGYiLCJtYXRyaXgiLCJNYXRyaXg0IiwiY2FtZXJhIiwiZm92Iiwib2JqZWN0cyIsImRvbUVsZW1lbnQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJvdmVyZmxvdyIsImNhbWVyYUVsZW1lbnQiLCJXZWJraXRUcmFuc2Zvcm1TdHlsZSIsIk1velRyYW5zZm9ybVN0eWxlIiwidHJhbnNmb3JtU3R5bGUiLCJhcHBlbmRDaGlsZCIsImlzSUUiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJzZXRDbGVhckNvbG9yIiwic2V0U2l6ZSIsImVwc2lsb24iLCJ2YWx1ZSIsImdldENhbWVyYUNTU01hdHJpeCIsImVsZW1lbnRzIiwiZ2V0T2JqZWN0Q1NTTWF0cml4IiwiY2FtZXJhQ1NTTWF0cml4IiwibWF0cml4M2QiLCJyZW5kZXJPYmplY3QiLCJtYXRyaXhXb3JsZEludmVyc2UiLCJ0cmFuc3Bvc2UiLCJjb3B5UG9zaXRpb24iLCJtYXRyaXhXb3JsZCIsImNhY2hlZFN0eWxlIiwiaWQiLCJXZWJraXRUcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm0iLCJkaXN0YW5jZVRvQ2FtZXJhU3F1YXJlZCIsImdldERpc3RhbmNlVG9TcXVhcmVkIiwiY2hpbGRyZW4iLCJvYmplY3QxIiwib2JqZWN0MiIsInNldEZyb21NYXRyaXhQb3NpdGlvbiIsImRpc3RhbmNlVG9TcXVhcmVkIiwiek9yZGVyIiwic2NlbmUiLCJvcmRlciIsInNvcnQiLCJ6TWF4IiwidHJhdmVyc2UiLCJpbmRleCIsInpJbmRleCIsInJlbmRlciIsInByb2plY3Rpb25NYXRyaXgiLCJXZWJraXRQZXJzcGVjdGl2ZSIsIk1velBlcnNwZWN0aXZlIiwicGVyc3BlY3RpdmUiLCJ1cGRhdGVNYXRyaXhXb3JsZCIsInBhcmVudCIsIl9DU1MzRE9iamVjdCIsIl9DU1MzRFNwcml0ZSIsIkNTU0xheWVyIiwiaW5pdCIsImRlbGF5IiwiYXBwZW5kVG8iLCJoZWFkIiwicmVtb3ZlIiwiakNvbnRhaW5lciIsIndpZHRoUHhzIiwiaGVpZ2h0UHhzIiwic2V0RGF0YSIsImNhbGxJbnRlcm5hbCIsImVycm9yIiwiY2xlYXJJbnRlcm5hbHMiLCJjc3MiLCJodG1sIiwianMiLCJldmFsIiwicGVuZGVkQ2FsbCIsImNsYiIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJzZXRUaW1lb3V0IiwiaXNIaWRkZW4iLCJoYXNDbGFzcyIsImhpZGUiLCJhZGRDbGFzcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2hvdyIsInJlbW92ZUNsYXNzIiwiQ2FjaGUiLCJtYXhTaXplIiwiSW5maW5pdHkiLCJzaXplb2YiLCJjb3VudFNpemVvZiIsIm9zIiwiTWFwIiwiZm9yRWFjaCIsImdldCIsImxvY2tlZCIsImRlbGV0ZSIsImZyZWVTcGFjZSIsImFyciIsImtleSIsInJlY3Vyc2lvblNpemVvZiIsImdldFRpbWVzdGFtcCIsInB1dCIsIkNvbnRyb2xsZXIiLCJoYW5kbGVEZWZhdWx0IiwiZGlzcGF0Y2hBc3luYyIsInRoZW4iLCJkaXNwYXRjaEV2ZW50IiwiRXZlbnREaXNwYXRjaGVyIiwiQ3VzdG9tRXZlbnRDb252ZXJ0ZXIiLCJjdXN0b21UZXN0IiwiZURvYyIsImN1c3RvbXMiLCJ0YXJnZXQiLCJhZGRDdXN0b20iLCJjdXN0b20iLCJ0ZXN0SW50ZXJzZWN0aW9uIiwiRmluZGVyIiwiaXNEZWxpbWV0ciIsIkRFTElNSVRFUiIsIm1lcmdlIiwiYXMiLCJzdHJzIiwiY2hhckF0Iiwic3RyIiwiYWRkSGl0cyIsImNoYXJzIiwicGF0dGVybiIsImRlbGltZXRlciIsImhpdHMiLCJhZGRDb250ZXh0IiwiZGVscyIsImNvbnRleHRMZW5ndGgiLCJwcmV2RGVscyIsImNvbnRleHRzIiwic3Vic3RyIiwiZ2V0SGl0cyIsImdldENvbnRleHRzIiwidG9Mb3dlckNhc2UiLCJsc3RyIiwid29ya2VyU3JjIiwiUERGSlNfTE9DQUxFIiwicGRmSnNXb3JrZXIiLCJjTWFwVXJsIiwicGRmSnNDTWFwVXJsIiwiY01hcFBhY2tlZCIsIlBkZiIsImxvYWRpbmdQcm9ncmVzcyIsImhhbmRsZXJRdWV1ZSIsInByb2dyZXNEYXRhIiwibG9hZGVkIiwidG90YWwiLCJnZXREb2N1bWVudCIsInJhbmdlQ2h1bmtTaXplIiwiY3VyIiwib2xkIiwiaXNOYU4iLCJoYW5kbGVyIiwibnVtUGFnZXMiLCJhbGwiLCJnZXRQYWdlIiwiZG91YmxlZFBhZ2VzIiwiZ2V0UGFnZVNpemUiLCJnZXRQYWdlVHlwZSIsImdldFBhZ2VzTnVtIiwic3BsaWNlIiwic2V0TG9hZGluZ1Byb2dyZXNzQ2xiIiwiZ2V0SGFuZGxlciIsIlRocmVlRXZlbnRDb252ZXJ0ZXJGcyIsIm9iamVjdHNUZXN0Iiwib2JqZWN0c0FuZEZhY2VzVGVzdCIsImZhY2UiLCJtYXRlcmlhbEluZGV4IiwidmlzdWFsV29ybGQiLCJjb29yZHMiLCJyYXljYXN0ZXIiLCJ0aHJlZXMiLCJhZGRUaHJlZSIsInJlbW92ZVRocmVlIiwic2V0Q29vcmRzRnJvbUV2ZW50Iiwic2V0RnJvbUNhbWVyYSIsImludGVyc2VjdHMiLCJpbnRlcnNlY3RPYmplY3RzIiwiVGhyZWVVdGlscyIsInZlcnRpY2VzMlVWcyIsImluZGVjZXMiLCJjb252ZXJDbGIiLCJ2aXMiLCJjb21wdXRlRmFjZVZlcnRleFV2cyIsInV2cyIsInV2c2kiLCJmYWNlVmVydGV4VXZzIiwiU3BoZXJlR2VvbWV0cnkiLCJmaW5kVXZUcmlzIiwiZm91bmQiLCJmaW5kSW50ZXJuYWxWZXJ0aWNlcyIsInZlcnRleE5vcm1hbHMiLCJ2YWx1ZXMiLCJUYXJnZXQiLCJmbiIsIkZsaXBCb29rIiwib3B0aW9ucyIsInBkZkxpbmtzSGFuZGxlciIsInNvdW5kcyIsInRvY0N0cmwiLCJ0aHVtYm5haWxzIiwiYm9va21hcmtzIiwiY3RybCIsImJvb2tQcmludGVyIiwiYm9vayIsInByb3BzQnVpbGRlciIsImJvb2tCdWlsZGVyIiwicGVuZGluZ0Rpc3Bvc2UiLCJ3ZWJnbCIsImFkZEdldFdlYkdMTWVzc2FnZSIsImdldFZpZXciLCJsb2FkaW5nQ3RybCIsInByb2dyZXNzIiwiZ2V0Q29udGFpbmVyIiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwicHJvcGVydGllc0NhbGxiYWNrIiwidGVtcGxhdGUiLCJwcmludFN0eWxlIiwiY29udHJvbHNQcm9wcyIsInNldEluamVjdG9yIiwidyIsImJvb2tDdHJsIiwiYWRkSGFuZGxlciIsInNldFByaW50ZXIiLCJzZWFyY2giLCJnZXRTZWFyY2hWaWV3IiwiZ2V0UGFnZXMiLCJvblF1ZXJ5Iiwic2V0UXVlcnkiLCJiaW5kIiwic2V0UmVzdWx0cyIsInJlc3VsdHMiLCJsYXN0UGFnZSIsImdldFRodW1ibmFpbHNWaWV3Iiwia1d0b0giLCJzZXRUaHVtYm5haWxzIiwic2V0U2VhcmNoIiwic2V0VG9jQ3RybCIsImhhbmRsZUV2ZW50IiwiZ2V0T3V0bGluZSIsIm91dGxpbmUiLCJnZXRCb29rbWFya3NWaWV3Iiwic2V0Qm9va21hcmtzIiwicGRmTGlua3MiLCJzZXRIYW5kbGVyIiwic2V0U291bmRzIiwic3Vic2NyaWJlRmxpcHMiLCJhdXRvTmF2aWdhdGlvbiIsInBkZiIsInNldFByb2dyZXNzIiwiY29udGFpbmVycyIsImF0dHIiLCJwcm90b3R5cGUiLCJUeXBlRXJyb3IiLCJPIiwic3RhcnQiLCJhcmd1bWVudHMiLCJyZWxhdGl2ZVN0YXJ0IiwiZW5kIiwicmVsYXRpdmVFbmQiLCJmaW5hbCIsImZpbmQiLCJkZWZpbmVQcm9wZXJ0eSIsInByZWRpY2F0ZSIsImxpc3QiLCJ0aGlzQXJnIiwiY2FsbCIsImZpbmRJbmRleCIsIkF1dG9OYXZpZ2F0b3IiLCJ1cmxQYXJhbSIsIm5hdmlnYXRlcyIsImZiM2QiLCJpbnN0YW5jZXMiLCJnb1RvUGFnZSIsImdldFBhZ2VOdW1iZXIiLCJnZXRQYXJhbWV0ZXJCeU5hbWUiLCJyZWdleCIsIlJlZ0V4cCIsImV4ZWMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJudW1iZXIiLCJwYXJzZUludCIsIkJpbmRlciIsImJhY2tTaXplIiwiYmFja0ciLCJCb3hHZW9tZXRyeSIsImJhY2tNIiwidGV4dHVyZUxvYWRlciIsImxvYWQiLCJ0ZXh0dXJlIiwic2V0SGV4IiwibWluRmlsdGVyIiwiTGluZWFyRmlsdGVyIiwiYmFjayIsImJhY2tSVCIsImJhY2tSUiIsImJhY2tMVCIsImJhY2tMUiIsImxlZnRQaXZvdCIsInJpZ2h0UGl2b3QiLCJ0cjEiLCJxdWF0ZXJuaW9uIiwic2V0RnJvbUF4aXNBbmdsZSIsInRyMiIsInNldExlZnQiLCJzZXRSaWdodCIsImpvaW5MZWZ0Q292ZXIiLCJkaXNjb25uZWN0TGVmdENvdmVyIiwiam9pblJpZ2h0Q292ZXIiLCJkaXNjb25uZWN0UmlnaHRDb3ZlciIsIkJvb2siLCJhcHBlbmQiLCJtb3VzZUNvbnRyb2xsZXIiLCJwcmVwYXJlUHJvcHMiLCJ6b29tIiwic2luZ2xlUGFnZSIsImF1dG9SZXNvbHV0aW9uIiwiZW5hYmxlIiwicGFnZU1hbmFnZXIiLCJsYXllck1hbmFnZXIiLCJzZWFyY2hFbmdpbmUiLCJvblBhZ2VIaXRzQ2hhbmdlZCIsInF1ZXJ5IiwicmVmcmVzaFBhZ2VRdWVyeSIsImJpbmRlciIsImxlZnRDb3ZlciIsInNldExlZnRDb3ZlclRleHR1cmUiLCJzdWJzY3JpYmVTaGVldEJsb2NrIiwicmlnaHRDb3ZlciIsInNldFJpZ2h0Q292ZXJUZXh0dXJlIiwidGhyZWVTaGVldEJsb2NrcyIsInNoZWV0QmxvY2tzIiwiYWRkU2hlZXRCbG9jayIsInNldFBhZ2VUZXh0dXJlIiwibGFzdE1vdXNlUG9zIiwic2hlZXRQaHlzaWNzIiwidXBkYXRlIiwicGFnZVgiLCJwYWdlWSIsImFkZFJlbmRlckNhbGxiYWNrIiwib24iLCJvblBpY2tDYWxsYmFjayIsImRyYWciLCJvbkRyYWdDYWxsYmFjayIsIm9uUmVsZWFzZUNhbGxiYWNrIiwiZHJhZ0FuZ2xlIiwidG1wIiwiYm94cyIsIkJveDMiLCJhZGRPYmplY3QiLCJyZWZyZXNoWm9vbSIsIm5vdGlmeUJlZm9yZUFuaW1hdGlvbiIsIm5vdGlmeUFmdGVyQW5pbWF0aW9uIiwicmVtb3ZlT2JqZWN0IiwicmVtb3ZlUmVuZGVyQ2FsbGJhY2siLCJyZW1vdmVTaGVldEJsb2NrcyIsInJlbW92ZVNoZWV0QmxvY2siLCJzZXRBdXRvUmVzb2x1dGlvbiIsInNldFpvb20iLCJpc1Byb2Nlc3NpbmciLCJzZXRGbGlwUHJvZ3Jlc3NDbGIiLCJmbGlwUHJvZ3Jlc3NDbGIiLCJpc0FjdGl2ZVBhZ2UiLCJnZXRCbG9ja0J5UGFnZSIsImJsb2NrIiwiZ2V0QmxvY2tQYWdlcyIsInJhbmdlIiwiZ2V0VG9wUGFnZXMiLCJnZXRQYWdlU3RhdGUiLCJlbmFibGVMb2FkaW5nQW5pbWF0aW9uIiwiZ2V0TGVmdEZsaXBwaW5nIiwiZ2V0UmlnaHRGbGlwcGluZyIsImdldENsb3NlZEJsb2NrQW5nbGUiLCJwaHlzaWNJZCIsImdldFBhcmFtZXRyIiwiZmxpcExlZnQiLCJwcm9ncmVzc0NsYiIsImNvbm5lY3RQaHlzaWNzIiwic2V0U2hlZXRCbG9ja3MiLCJzcGxpdFNoZWV0QmxvY2siLCJmaW5pc2hBbmltYXRpb25DbGIiLCJmbGlwUmlnaHQiLCJjbGVhckhvdmVySW5mbyIsInR1cm5PbkV2ZW50cyIsImhvdmVySW5mbyIsImZvcmNlIiwiY29ybmVyRm9yY2UiLCJ4U2VnbWVudCIsInNldEZyb21PYmplY3QiLCJ1bmlvbiIsImNvbXB1dGVUYXJnZXQiLCJzZWciLCJ1diIsImNvcm5lclRhcmdldCIsImRyYWdGb3JjZUNsYiIsImdldERyYWdDb3JuZXJGb3JjZUNsYiIsImRyYWdJbmZvIiwidHVybk9mZkV2ZW50cyIsImdldEZsaXBwaW5nIiwiZmxpcCIsImVuYWJsZU1vdXNlIiwiY29ybmVyQ2FsbGJhY2siLCJwZW5kaW5ncyIsImhvdmVyQW5nbGUiLCJob3ZlciIsInBvc3NpYmxlIiwibmV4dEJsb2NrIiwic2V0UGFyYW1ldHIiLCJnZXRUYXJnZXRGb3JjZUNsYiIsImhvdmVyQ29ybmVyRm9yY2VDbGIiLCJjb3JuZXJDbGlja0RhdGEiLCJwb3ciLCJldmVudENvbnZlcnRlciIsIm1vdXNlQ2FsbGJhY2siLCJ0cmFuc2ZlckV2ZW50VG9UZXh0dXJlIiwidG91Y2hDYWxsYmFjayIsIm1vdXNlRXZlbnRzIiwidG91Y2hFdmVudHMiLCJibG9ja3MiLCJtYXRlcmlhbCIsIm1lcmdlU2hlZXRCbG9ja3MiLCJjYWxjQmxvY2tGb3JjZSIsInZlbG9jaXR5IiwiY29ybmVySGVpZ2h0IiwiY2FsY0Jsb2NrQ29ybmVyRm9yY2UiLCJhbmltYXRpb25Ob3RpZmljYXRpb24iLCJyZWplY3QiLCJjb3ZlckhlaWdodCIsInNpbXVsYXRlQ2xiIiwicmVtb3ZlQ2xiIiwiYW5nbCIsImNoIiwiY2F0Y2giLCJsYXN0VCIsInRyaWdnZXIiLCJzaW11bGF0ZSIsImxlZnRTaXplIiwibmV3QmxvY2siLCJmaXJzdEJsb2NrIiwibGFzdEJsb2NrIiwiY3JlYXRlU2lkZVRleHR1cmUiLCJqQyIsIm1lcmdlUHJvcHMiLCJzZWNvbmQiLCJCb29rQ29udHJvbGxlciIsIm5hdmlnYXRpb25Db250cm9scyIsImRldmljZVBpeGVsUmF0aW8iLCJvcmJpdCIsImdldE9yYml0IiwidXBkYXRlVmlld0lmU3RhdGUiLCJiaW5kQWN0aW9ucyIsInNtYXJ0UGFuIiwiYWN0aW9ucyIsImFjdGl2ZSIsImFjdGl2ZUZvck1vYmlsZSIsInN0YXRzIiwibGlnaHRpbmciLCJkZWZhdWx0IiwiYWN0aXZlU2lkZSIsImJvb2tXYXRjaGVyIiwiU3RhdHMiLCJ0b3AiLCJzZXRFeHRyYUxpZ2h0aW5nIiwib25TY3JlZW5Nb2RlQ2hhbmdlZCIsIm9uVXBkYXRlVmlldyIsInVwZGF0ZVZpZXciLCJnZXRQYXJlbnRDb250YWluZXIiLCJjbWRTbWFydFBhbiIsInRlbXBsYXRlT2JqZWN0IiwiYXBwTG9hZGVkIiwibG9hZGluZ0FuaW1hdGlvbiIsInNraW4iLCJpbml0TG9hZGluZ0FuaW1hdGlvbiIsImNvZWZmaWNpZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInZpc2libGUiLCJzZXRTdGF0ZSIsImVuYWJsZU5hdmlnYXRpb24iLCJwcmludGVyIiwic2V0RW5hYmxlZCIsImNhblpvb21JbiIsImNhblpvb21PdXQiLCJjYW5EZWZhdWx0Wm9vbSIsInNldEJvb2tab29tIiwiY21kWm9vbUluIiwiZGVsdGEiLCJ6b29tSW4iLCJjbWRab29tT3V0Iiwiem9vbU91dCIsImNtZERlZmF1bHRab29tIiwiY21kVG9jIiwidG9nbGUiLCJjbWRGYXN0QmFja3dhcmQiLCJzdGFydEZsaXAiLCJjbWRCYWNrd2FyZCIsImNtZEZvcndhcmQiLCJjbWRGYXN0Rm9yd2FyZCIsImNtZFNhdmUiLCJvcGVuIiwiZG93bmxvYWRVUkwiLCJjbWRQcmludCIsInByaW50IiwiY21kRnVsbFNjcmVlbiIsImFjdGl2YXRlZCIsInJlcXVlc3QiLCJjYW5jZWwiLCJtaW5BemltdXRoQW5nbGUiLCJtYXhBemltdXRoQW5nbGUiLCJtaW5Qb2xhckFuZ2xlIiwibWF4UG9sYXJBbmdsZSIsImNtZFNpbmdsZVBhZ2UiLCJjbWRTb3VuZHMiLCJjbWRTdGF0cyIsImNtZExpZ2h0aW5nVXAiLCJjbWRMaWdodGluZ0Rvd24iLCJwYWdlTnVtIiwiY3VycmVudCIsImZsaXBzIiwiY292cyIsImN2Iiwic2V0Q2xiIiwiZmwiLCJ0aW1lIiwiZmxpcFJlcyIsImVuZEZsaXAiLCJnZXRQYWdlRm9yR1VJIiwiaW5wUGFnZSIsInVwZGF0ZVZpZXdTdGF0ZSIsInZpZXdTdGF0ZSIsImF2YWlsYWJsZSIsImZsaXBwZXJzRW5hYmxlIiwiZ2V0QWN0aW9ucyIsImlzU3dpcHBpbmciLCJ0b3VjaENtZFN3aXBlIiwiY29kZSIsImNtZHMiLCJhY3RpdmF0ZSIsImNtZFBhbkxlZnQiLCJwYW4iLCJzcGVlZCIsImNtZFBhblJpZ2h0IiwiY21kUGFuVXAiLCJjbWRQYW5Eb3duIiwibW91c2VDbWRSb3RhdGUiLCJyb3RhdGUiLCJtb3VzZUNtZERyYWdab29tIiwibW91c2VDbWRQYW4iLCJtb3VzZUNtZFdoZWVsWm9vbSIsInByZXZlbnREZWZhdWx0IiwiZGVsdGFZIiwidG91Y2hDbWRSb3RhdGUiLCJ0b3VjaENtZFpvb20iLCJ0b3VjaENtZFBhbiIsInRvdWNoIiwidG91Y2hlcyIsIm9yaWdpbmFsRXZlbnQiLCJzd2lwZURhdGEiLCJoYW5kbGVkIiwieDAiLCJ5MCIsIndpZFNldHRpbmdzIiwiZVRvQSIsImFkZEFjdGlvbiIsIm1vdXNlQnV0dG9ucyIsIlJpZ2h0IiwiYWN0aW9uIiwiZmxhZ3MiLCJzZXRBY3Rpb25zIiwibGV2ZWxzIiwiQm9va1ByaW50ZXIiLCJzdHlsZVNoZWV0IiwicGRmU3JjIiwiY2FuY2VsZWQiLCJmcmFtZSIsInByaW50V25kIiwiY2FsbE1hbnVhbGx5IiwidXNlSUZyYW1lIiwiY29udGVudFdpbmRvdyIsInJlbmRlckNvbnRlbnQiLCJjb250ZW50IiwicHJpbnREb2MiLCJ3cml0ZSIsImNsb3NlIiwib25Qcm9ncmVzcyIsIlNldCIsInJlbmRlckh0bWwiLCJyZW5kZXJIZWFkIiwid3JhcCIsImxpbmtzIiwibWF0Y2giLCJsaW5rIiwiZmFpbCIsInJlc3BvbnNlVGV4dCIsImRlZmF1bHRTdHlsZVNoZWV0IiwiaXNDaHJvbWl1bSIsImNocm9tZSIsIndpbk5hdiIsInZlbmRvck5hbWUiLCJ2ZW5kb3IiLCJpc0lFZWRnZSIsImlzSU9TQ2hyb21lIiwiQm9va1ZpZXciLCJjb250YWluZXIiLCJpbml0VmlldyIsImJvb2ttYXJrc1ZpZXciLCJ0aHVtYm5haWxzVmlldyIsInNlYXJjaFZpZXciLCJnZXRIYW5kbGVycyIsImhhbmRsZXJzIiwiY2FsbExhdGVyIiwiUEFHRV9IQU5ETEVSX0RFTEFZIiwib25JdGVtU3RhdGVDaGFuZ2VkIiwicGFyZW50Q29udGFpbmVyIiwiZ2V0Rm9ybXMiLCJnZXRMaW5rcyIsImdldFdpZGdldHMiLCJnZXRJbnB1dHMiLCJnZXRUZXh0cyIsImdldFRlbXBsYXRlIiwic3R5bGVzIiwicmVsIiwic2NyaXB0IiwiQ2xiQm9va1Byb3BzQnVpbGRlciIsImltYWdlRmFjdG9yeSIsIkNvdmVyIiwiQ3NzTGF5ZXJzTWFuYWdlciIsIndyYXBwZXJzIiwiZ2V0QWN0aXZlcyIsImxheWVycyIsImhpZGRlbiIsImdldExheWVycyIsInNsIiwid2FpdCIsIlBhZ2VNYW5hZ2VyIiwicGFnZVF1ZXJ5IiwicGFnZUNhY2hlIiwicmVzb3VyY2VzQ2FjaGUiLCJjYW52YXMiLCJsb2FkaW5ncyIsInJlbmRlclF1ZXVlIiwicGFnZVJlcXVlc3RzIiwicHJlZGljdGVkUmVxdWVzdHMiLCJ0bXBNYXRlcmlhbCIsIk1lc2hCYXNpY01hdGVyaWFsIiwiUGxhbmVHZW9tZXRyeSIsImxvYWRpbmciLCJjcmVhdGVMb2FkaW5nVGV4dHVyZSIsInVwZGF0ZVJlbmRlclF1ZXVlIiwic3ByaXRlVGlsZXMiLCJhbmltYXRpb24iLCJhbmltYXRvciIsImNyZWF0ZVNwcml0ZSIsImlzQ292ZXIiLCJpc01vYmlsZSIsInNldHVwTWF0ZXJpYWwiLCJpc0FjdGl2ZSIsInJlbW92ZUZyb21Mb2FkaW5ncyIsInJlbW92ZUZyb21SZW5kZXJRdWV1ZSIsIndyYXBwZXIiLCJwdXNoSW5SZW5kZXJRdWV1ZSIsImVzIiwiY3NzTGF5ZXJzTG9hZGVyIiwiYXJncyIsInJlc29sdmVQZW5kaW5ncyIsInJ0bFBhZ2VOIiwicGkiLCJpc1RvcCIsInNldE1hdGVyaWFsIiwiY2FsY1Jlc29sdXRpb24iLCJpbnRlcmFjdGl2ZSIsIkNvbG9yIiwib25VcGRhdGUiLCJyZW5kZXJpbmciLCJpc1NpbmdsZVBhZ2UiLCJ0cmFuc2ZlckV2ZW50cyIsIm1vdXNldXAiLCJtb3VzZW91dCIsImVudCIsInRvT2JqZWN0IiwiZ2V0T3JMb2FkVGV4dHVyZU9iamVjdCIsInRvRG9jIiwibG9hZFByZWRpY3RlZFBhZ2VzIiwiYWRkUGFnZVJlcXVlc3QiLCJzaGlmdCIsIm9iIiwiUGRmQm9va1Byb3BzQnVpbGRlciIsInBhZ2VEZXNjcmlwdGlvbiIsIlBkZkxpbmtzSGFuZGxlciIsImN1cnNvcnMiLCJkZWZhdWx0SGFuZGxlciIsImRlc3RpbmF0aW9uIiwiY2FsbEhhbmRsZXJzIiwiZXZlbnQiLCJhbm5vIiwiYW5ub3RhdGlvbiIsInBvcCIsImRlc3QiLCJkZXN0UHJvbWlzZSIsImdldERlc3RpbmF0aW9uIiwiZ2V0UGFnZUluZGV4IiwiU2VhcmNoRW5naW5lIiwicHJvY2VzcyIsInN0YW1wIiwibmV4dCIsImdldFRleHRDb250ZW50IiwidGV4dENvbnRlbnQiLCJpdGVtcyIsIml0ZW0iLCJTaGVldENzc0xheWVyIiwibGF5ZXIiLCJhZGRDc3NPYmplY3QiLCJyZW1vdmVDc3NPYmplY3QiLCJyb3RhdGlvbiIsIlNoZWV0UGh5c2ljcyIsInRhcmdldEZvcmNlQ2xiIiwiZyIsInRsIiwidGFyZ2V0QW5nbGUiLCJmbGJ0IiwiZHJhZ0Nvcm5lckZvcmNlQ2xiIiwiZnBzIiwic3RhcnREdCIsIm1hcmdpbiIsImluZk0iLCJhdHRlbXB0cyIsIm1heEl0ZXJhdGlvbnMiLCJmb3JjZUNsYiIsImNvcm5lckZvcmNlQ2xiIiwibm8iLCJjZiIsImdldFBhcmFtZXRyTWFwIiwiVCIsImF0dGVtcHQiLCJpdCIsIm5vcyIsImludGVncmF0ZSIsImNpIiwiZmluZENvbGxpc2lvbnMiLCJzY29zIiwic29sdmVDb2xsaXNpb24iLCJncyIsImkwIiwiZmluZEFuZFNvbHZlQ29ybmVyQ29sbGlzaW9ucyIsInJlbW92ZVN0YXRpY3MiLCJhbCIsImRDaCIsImR2IiwibW0iLCJhdiIsImJ2IiwiaXNDb2xsaXNpb24iLCJTb3VuZHNFbnZpcm9tZW50IiwiYXVkaW8iLCJBdWRpbyIsInBsYXkiLCJwYXVzZSIsImN1cnJlbnRUaW1lIiwiZW1pdHRlciIsIlRvY0NvbnRyb2xsZXIiLCJ0YWIiLCJvbk5hdmlnYXRlIiwibmF2aWdhdGVUaHVtYm5haWxzIiwiZmlyZUNoYW5nZSIsIm5hdmlnYXRlU2VhcmNoIiwibmF2aWdhdGVCb29rbWFya3MiLCJpc0Jvb2ttYXJrcyIsImNtZEJvb2ttYXJrcyIsImNtZFRodW1ibmFpbHMiLCJjbWRTZWFyY2giLCJjbWRDbG9zZVRvYyIsImZyb250R2VvbWV0cnkiLCJ0cmFuc2xhdGUiLCJiYWNrR2VvbWV0cnkiLCJyb3RhdGVZIiwibGVmdEdlb21ldHJ5IiwicmlnaHRHZW9tZXRyeSIsInRvcEdlb21ldHJ5Iiwicm90YXRlWCIsImJvdHRvbUdlb21ldHJ5IiwiR2VvbWV0cnkiLCJhZGRGYWNlcyIsImZzIiwiRmFjZTMiLCJtYXBWZXJ0aWNlcyIsImRzdCIsImVxIiwiZnJvbnRNYXAiLCJiYWNrTWFwIiwibGVmdE1hcCIsInJpZ2h0TWFwIiwiTGVmdCIsIk1pZGRsZSIsIkJsYW5rSW1hZ2UiLCJCb29rbWFya3MiLCJnZXRUaXRsZSIsInRpdGxlIiwiZ2V0SXRlbXMiLCJub2RlcyIsIm1hcE5vZGVzIiwibGkiLCJjbWQiLCJub2RlIiwibWluaW1pemVkIiwicmVuZGVyTm9kZSIsInJlbmRlck5vZGVzIiwiZXhwYW5kIiwibWluaW1pemUiLCJsZXZlbCIsIkRldGVjdG9yIiwiZ2V0V2ViR0xFcnJvck1lc3NhZ2UiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwidGV4dEFsaWduIiwiYmFja2dyb3VuZCIsImlubmVySFRNTCIsIldlYkdMUmVuZGVyaW5nQ29udGV4dCIsInBhcmFtZXRlcnMiLCJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQiLCJ3b3JrZXJzIiwiV29ya2VyIiwiZmlsZWFwaSIsIkZpbGUiLCJGaWxlUmVhZGVyIiwiRmlsZUxpc3QiLCJCbG9iIiwiRG9jTW91c2VTaW11bGF0b3IiLCJqRnJhbWUiLCJiRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsInJlc2VuZFByb3BlcnRpZXMiLCJnZXREZWZhdWx0UmVzZW5kUHJvcGVydGllcyIsInVuZGVmaW5lZFByb3BlcnRpZXMiLCJnZXREZWZhdWx0VW5kZWZpbmVkUHJvcGVydGllcyIsIm9uRG9jQ2hhbmdlQ2xicyIsInRlcm1zIiwiSE9WRVIiLCJBQ1RJVkUiLCJzdHlsZVNoZWV0cyIsInNzIiwiY3NzUnVsZXMiLCJjc3NUZXh0IiwidGVybSIsInNlbGVjdG9yVGV4dCIsImNvbnZlcnRDb29yZHMiLCJqRWxlbWVudCIsInRyaWdnZXJFdmVudCIsImFkdmFuY2VkUHJvcHMiLCJ0aW1lU3RhbXAiLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsImVudGVyRWxlbWVudCIsImxlYXZlRWxlbWVudCIsImFjdGl2YXRlRWxlbWVudCIsImRlYWN0aXZhdGVFbGVtZW50IiwiYWRkRG9jQ2hhbmdlQ2xiIiwiZWxlbWVudEZyb21Qb2ludCIsImNoaWxkTm9kZXMiLCJjaGlsZCIsIkVsZW1lbnQiLCJnZXRFbGVtZW50Iiwib2ZmMCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImNhcEVsZW1lbnQiLCJsZWF2ZWQiLCJob3ZFbGVtZW50IiwicmVsYXRlZFRhcmdldCIsIkRvbTJJbWFnZSIsInV0aWwiLCJuZXdVdGlsIiwiaW5saW5lciIsIm5ld0lubGluZXIiLCJmb250RmFjZXMiLCJuZXdGb250RmFjZXMiLCJpbWFnZXMiLCJuZXdJbWFnZXMiLCJ0b1N2ZyIsInRvUG5nIiwidG9KcGVnIiwidG9CbG9iIiwidG9QaXhlbERhdGEiLCJpbXBsIiwiY2xvbmVOb2RlIiwiZW1iZWRGb250cyIsImlubGluZUltYWdlcyIsImFwcGx5T3B0aW9ucyIsIm1ha2VTdmdEYXRhVXJpIiwiYmdjb2xvciIsImJhY2tncm91bmRDb2xvciIsInByb3BlcnR5IiwiZHJhdyIsImdldEltYWdlRGF0YSIsInRvRGF0YVVSTCIsInF1YWxpdHkiLCJjYW52YXNUb0Jsb2IiLCJkb21Ob2RlIiwibWFrZUltYWdlIiwibmV3Q2FudmFzIiwiZmlsbFJlY3QiLCJyb290IiwibWFrZU5vZGVDb3B5IiwiY2xvbmVDaGlsZHJlbiIsInByb2Nlc3NDbG9uZSIsImlzQ2FudmFzIiwib3JpZ2luYWwiLCJjbG9uZUNoaWxkcmVuSW5PcmRlciIsImFzQXJyYXkiLCJjaGlsZENsb25lIiwiaXNFbGVtZW50IiwiY2xvbmVTdHlsZSIsImNsb25lUHNldWRvRWxlbWVudHMiLCJjb3B5VXNlcklucHV0IiwiZml4U3ZnIiwiY29weVN0eWxlIiwic291cmNlIiwiY29weVByb3BlcnRpZXMiLCJzZXRQcm9wZXJ0eSIsImdldFByb3BlcnR5UHJpb3JpdHkiLCJjbG9uZVBzZXVkb0VsZW1lbnQiLCJjbGFzc05hbWUiLCJ1aWQiLCJzdHlsZUVsZW1lbnQiLCJmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUiLCJzZWxlY3RvciIsImZvcm1hdENzc1RleHQiLCJmb3JtYXRDc3NQcm9wZXJ0aWVzIiwiY3JlYXRlVGV4dE5vZGUiLCJmb3JtYXRQcm9wZXJ0eSIsImlzVGV4dEFyZWEiLCJpc0lucHV0Iiwic2V0QXR0cmlidXRlIiwiaXNTVkciLCJpc1NWR1JlY3QiLCJhdHRyaWJ1dGUiLCJnZXRBdHRyaWJ1dGUiLCJyZXNvbHZlQWxsIiwic3R5bGVOb2RlIiwiaW5saW5lQWxsIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZXNjYXBlWGh0bWwiLCJ4aHRtbCIsImVzY2FwZSIsInBhcnNlRXh0ZW5zaW9uIiwibWltZVR5cGUiLCJkYXRhQXNVcmwiLCJpc0RhdGFVcmwiLCJyZXNvbHZlVXJsIiwiZ2V0QW5kRW5jb2RlIiwiaXNJbWFnZSIsIm1pbWVzIiwiV09GRiIsIkpQRUciLCJleHRlbnNpb24iLCJiaW5hcnlTdHJpbmciLCJhdG9iIiwiYmluYXJ5QXJyYXkiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsImJhc2VVcmwiLCJpbXBsZW1lbnRhdGlvbiIsImNyZWF0ZUhUTUxEb2N1bWVudCIsImZvdXJSYW5kb21DaGFycyIsInRvU3RyaW5nIiwic2xpY2UiLCJ1cmkiLCJJbWFnZSIsIm9ubG9hZCIsIm9uZXJyb3IiLCJUSU1FT1VUIiwiWE1MSHR0cFJlcXVlc3QiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0IiwicmVzcG9uc2VUeXBlIiwic2VuZCIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJlbmNvZGVyIiwib25sb2FkZW5kIiwicmVzdWx0IiwicmVhZEFzRGF0YVVSTCIsInJlc3BvbnNlIiwibWVzc2FnZSIsInN0cmluZyIsIm1zIiwiYXJnIiwiYXJyYXlMaWtlIiwiYXJyYXkiLCJsZWZ0Qm9yZGVyIiwicHgiLCJyaWdodEJvcmRlciIsInNjcm9sbFdpZHRoIiwidG9wQm9yZGVyIiwiYm90dG9tQm9yZGVyIiwic2Nyb2xsSGVpZ2h0Iiwic3R5bGVQcm9wZXJ0eSIsInBhcnNlRmxvYXQiLCJIVE1MQ2FudmFzRWxlbWVudCIsIkhUTUxUZXh0QXJlYUVsZW1lbnQiLCJIVE1MSW5wdXRFbGVtZW50IiwiU1ZHRWxlbWVudCIsIlNWR1JlY3RFbGVtZW50IiwiSFRNTEltYWdlRWxlbWVudCIsIlVSTF9SRUdFWCIsInNob3VsZFByb2Nlc3MiLCJyZWFkVXJscyIsImlubGluZSIsImRhdGFVcmwiLCJ1cmxBc1JlZ2V4Iiwibm90aGluZ1RvSW5saW5lIiwidXJscyIsInJlYWRBbGwiLCJ3ZWJGb250cyIsIndlYkZvbnQiLCJjc3NTdHJpbmdzIiwiZ2V0Q3NzUnVsZXMiLCJzZWxlY3RXZWJGb250UnVsZXMiLCJydWxlcyIsIm5ld1dlYkZvbnQiLCJydWxlIiwiQ1NTUnVsZSIsIkZPTlRfRkFDRV9SVUxFIiwibG9nIiwid2ViRm9udFJ1bGUiLCJwYXJlbnRTdHlsZVNoZWV0IiwibmV3SW1hZ2UiLCJpbmxpbmVCYWNrZ3JvdW5kIiwiaW5saW5lZCIsIkRyYWciLCJpbnRlcnNlY3Rpb24iLCJzZWxlY3RlZCIsImNvbnRyb2xzU3RhdGUiLCJnZXRDb250cm9sc1N0YXRlIiwib25Nb3VzZU1vdmUiLCJvbk1vdXNlRG93biIsIm9uTW91c2VVcCIsInJheSIsIm9yaWdpbiIsInNldENvbnRyb2xzU3RhdGUiLCJnZXRXb3JsZERpcmVjdGlvbiIsImludGVyc2VjdFBsYW5lIiwiRXZlbnRzVG9BY3Rpb25zIiwiZ2V0RXZlbnRGbGFncyIsImN0cmxLZXkiLCJzaGlmdEtleSIsImFsdEtleSIsImdldFBvc2l0aW9uIiwiY29udGV4dE1lbnUiLCJtb3VzZURvd24iLCJtb3VzZU1vdmUiLCJtb3VzZVVwIiwibW91c2VXaGVlbCIsIm1vdXNlTW92ZURvYyIsIm1vdXNlVXBEb2MiLCJjbGljayIsImRibGNsaWNrIiwidG91Y2hTdGFydCIsInRvdWNoTW92ZSIsInRvdWNoRW5kIiwia2V5RG93biIsImtleVByZXNzIiwia2V5VXAiLCJmaXJlQWN0aW9ucyIsImJ1dHRvbiIsInBpY2tlZCIsImNsaWNrcyIsInRvdWNoUGljayIsInRvdWNoUGlja2VkIiwicG9zIiwia2V5Q29kZSIsIm1vZEtleXMiLCJDdHJsIiwiU2hpZnQiLCJBbHQiLCJGdWxsU2NyZWVuIiwiX2hhc1dlYmtpdEZ1bGxTY3JlZW4iLCJfaGFzTW96RnVsbFNjcmVlbiIsIl9oYXNNc0Z1bGxzY3JlZW4iLCJ3ZWJraXRJc0Z1bGxTY3JlZW4iLCJtb3pGdWxsU2NyZWVuIiwibXNGdWxsc2NyZWVuRWxlbWVudCIsImFzc2VydCIsIndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuIiwibW96UmVxdWVzdEZ1bGxTY3JlZW4iLCJtc1JlcXVlc3RGdWxsc2NyZWVuIiwid2Via2l0Q2FuY2VsRnVsbFNjcmVlbiIsIm1vekNhbmNlbEZ1bGxTY3JlZW4iLCJtc0V4aXRGdWxsc2NyZWVuIiwiZG9jdW1lbnRFbGVtZW50IiwiSW50ZXJhY3RpdmVJbWFnZSIsImlJZCIsImhhc0ZlYXR1cmUiLCJpbWFnZUxvYWQiLCJzdmdSZW5kZXIiLCJmcmFtZUxvYWQiLCJzaW11bGF0b3IiLCJMb2FkaW5nQW5pbWF0aW9uIiwiY2FsY1RpbWVUbyIsInVwZGF0ZUludGVydmFsIiwiY2xlYXJSZWN0Iiwic2hhZG93Qmx1ciIsInNoYWRvd0NvbG9yIiwic2hhZG93T2Zmc2V0WCIsInNoYWRvd09mZnNldFkiLCJmb250IiwidGV4dEJhc2VsaW5lIiwiZmlsbFRleHQiLCJkYSIsIl9hIiwiX3IiLCJjeCIsImN5IiwibngiLCJueSIsImFyYyIsImdldEltYWdlIiwic2lnbiIsIkxvYWRpbmdDb250cm9sbGVyIiwic2hvd1Byb2dyZXNzIiwibG9hZGluZ01zZyIsImdldExvYWRpbmdNc2ciLCJkZWZhdWx0TG9hZGluZ01zZyIsIk1vdXNlRXZlbnRDb252ZXJ0ZXIiLCJPYmplY3QzRFdhdGNoZXIiLCJib3VuZEJveENsYiIsInRlc3RTY2FsZSIsImVsZW1lbnRTaXplIiwidngiLCJ2eSIsImJveCIsImNvbXB1dGVDbGllbnRCb3VuZEJveCIsIm1vdmVQYW4iLCJ2VG9DYW1lcmEiLCJwcm9qZWN0IiwieHMiLCJ6cyIsInNldE9iamVjdCIsImNvbXB1dGVDb3JyIiwiY29yciIsImdldFNjYWxlIiwiS3giLCJLeSIsImNlbnRlclZpZXciLCJzZXRTY2FsZSIsInRmIiwiWSIsInZkIiwiT3JiaXQiLCJtaW5EaXN0YW5jZSIsIm1pblpvb20iLCJtYXhab29tIiwiZW5hYmxlRGFtcGluZyIsImRhbXBpbmdGYWN0b3IiLCJlbmFibGVab29tIiwiem9vbVNwZWVkIiwiZW5hYmxlUm90YXRlIiwicm90YXRlU3BlZWQiLCJlbmFibGVQYW4iLCJhdXRvUm90YXRlIiwiYXV0b1JvdGF0ZVNwZWVkIiwidGFyZ2V0MCIsInBvc2l0aW9uMCIsInpvb20wIiwiZ2V0UG9sYXJBbmdsZSIsInNwaGVyaWNhbCIsInBoaSIsImdldEF6aW11dGhhbEFuZ2xlIiwidGhldGEiLCJyZXNldCIsInNjb3BlIiwidXBkYXRlUHJvamVjdGlvbk1hdHJpeCIsImNoYW5nZUV2ZW50IiwiX3NwZWVkIiwiZG9sbHlJbiIsImdldFpvb21TY2FsZSIsImRvbGx5T3V0IiwibmV3U2NhbGUiLCJxdWF0IiwiUXVhdGVybmlvbiIsInNldEZyb21Vbml0VmVjdG9ycyIsInVwIiwicXVhdEludmVyc2UiLCJsYXN0UG9zaXRpb24iLCJsYXN0UXVhdGVybmlvbiIsImFwcGx5UXVhdGVybmlvbiIsInNldEZyb21WZWN0b3IzIiwicm90YXRlTGVmdCIsImdldEF1dG9Sb3RhdGlvbkFuZ2xlIiwic3BoZXJpY2FsRGVsdGEiLCJtYWtlU2FmZSIsInJhZGl1cyIsInBhbk9mZnNldCIsInNldEZyb21TcGhlcmljYWwiLCJsb29rQXQiLCJ6b29tQ2hhbmdlZCIsIkVQUyIsImRvdCIsIlNwaGVyaWNhbCIsInJvdGF0ZVVwIiwicGFuTGVmdCIsIm9iamVjdE1hdHJpeCIsInNldEZyb21NYXRyaXhDb2x1bW4iLCJtdWx0aXBseVNjYWxhciIsInBhblVwIiwiZGVsdGFYIiwiUGVyc3BlY3RpdmVDYW1lcmEiLCJ0YXJnZXREaXN0YW5jZSIsInRhbiIsImNsaWVudEhlaWdodCIsIk9ydGhvZ3JhcGhpY0NhbWVyYSIsImNsaWVudFdpZHRoIiwiYm90dG9tIiwiZG9sbHlTY2FsZSIsIm9mZnNldERvbGx5Iiwid2hlZWxEb2xseSIsIlBkZkltYWdlIiwibTAwIiwibTAxIiwibTAyIiwibTEwIiwibTExIiwibTEyIiwibTIwIiwibTIxIiwibTIyIiwidHJpbSIsInNldEhpdHMiLCJyZWN0U2l6ZSIsImNyZWF0ZVBvbHkiLCJzZXRBbm5vdGF0aW9ucyIsImFubm9zIiwidmlld3BvcnQiLCJ0YXJnZXRzIiwic3VidHlwZSIsImFQb3MiLCJhU3oiLCJhbm5vQ2xiIiwiZmluZGVyIiwicmVuZGVySGl0cyIsInRlc3RTeiIsInRleHREaXYiLCJiYXNlT2Zmc2V0IiwiaGl0IiwiVXRpbCIsImZvbnROYW1lIiwiYXRhbjIiLCJ2ZXJ0aWNhbCIsImZvbnRIZWlnaHQiLCJmb250QXNjZW50IiwiYXNjZW50IiwiZGVzY2VudCIsInRlc3RTcGFuIiwiaXdpZHRoIiwicmVsYXRpdmVPZmZzZXQiLCJjYWxjVmlld3BvcnQiLCJnZXRWaWV3cG9ydCIsIm9mZnNldFgiLCJnZXRBbm5vdGF0aW9ucyIsImNhbnZhc0NvbnRleHQiLCJTZWFyY2giLCJwcmV2UmVzdWx0cyIsIm5hdmlnYXRlIiwiZG9RdWVyeSIsInF1ZXJ5U3RhbXAiLCJodG1scyIsIlN0YXRpY0ltYWdlIiwiY3Jvc3NPcmlnaW4iLCJpbWFnZUVycm9yIiwiVGV4dHVyZUFuaW1hdG9yIiwiaW1nIiwidGlsZXNIb3JpeiIsInRpbGVzVmVydCIsIm51bVRpbGVzIiwidGlsZURpc3BEdXJhdGlvbiIsInRpbGVzSG9yaXpvbnRhbCIsInRpbGVzVmVydGljYWwiLCJudW1iZXJPZlRpbGVzIiwidGlsZURpc3BsYXlEdXJhdGlvbiIsImN1cnJlbnREaXNwbGF5VGltZSIsImN1cnJlbnRUaWxlIiwibWlsbGlTZWMiLCJjdXJyZW50Q29sdW1uIiwiY3VycmVudFJvdyIsIlRocmVlTW91c2VFdmVudENvbnZlcnRlciIsIlRocmVlVG91Y2hFdmVudENvbnZlcnRlciIsImxhc3RUb3VjaGVzIiwiVGh1bWJuYWlscyIsInRodW1ibmFpbHNDbGIiLCJoZWFkaW5nIiwidGh1bWJuYWlsIiwiZGF0YVRodW1ibmFpbCIsInNldEltYWdlIiwiZ2V0QWN0aXZlIiwic2Nyb2xsVG9wIiwiYnVpbHQiLCJUb3VjaENvbnZlcnRlciIsIlZpZXciLCJjbGFzc1Byb3BlcnR5IiwiYXR0cmlidXRlUHJvcGVydHkiLCJhdHRyaWJ1dGVOYW1lIiwicmVtb3ZlQXR0ciIsImhhbmRsZUxpbmtFdmVudCIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVGb3JtRXZlbnQiLCJnZXRUaW1lIiwicGVuZGluZyIsImxvYWRGaWxlcyIsImZpbGVzIiwidGFza3MiLCJ1cmxSZXNvbHZlciIsImxhc3RJbmRleE9mIiwicGFydHMiLCJwYXJ0Iiwib2JqVG9BdHRyc1N0ciIsImNoZWNrSWZyYW1lU2l6ZSIsIm9uUmVzaXplIiwiczAiLCJzMSIsImZpcmVMaW5rc09uTG9hZEV2ZW50IiwibGlua0xvYWRlZCIsImpMaW5rIiwiakxpbmtzIiwiaXNJT1MiLCJNU1N0cmVhbSIsInN0b3AiLCJ0ZXh0Q3NzIiwicjEiLCJsaW5rQ29udHJvbHMiLCJ3aWRnZXRDb250cm9scyIsImlucHV0Q29udHJvbHMiLCJmb3JtQ29udHJvbHMiLCJ0ZXh0Q29udHJvbHMiLCJzdGF0ZVNldHRlcnMiLCJzZXR0ZXIiLCJzZXRMaW5rQ29udHJvbFN0YXRlIiwic2V0V2lkZ2V0Q29udHJvbFN0YXRlIiwic2V0SW5wdXRDb250cm9sU3RhdGUiLCJzZXRUZXh0Q29udHJvbFN0YXRlIiwic2V0Q29udHJvbFN0YXRlIiwic3RhdGVIYW5kbGVycyIsInN0IiwibGlua1N0YXRlSGFuZGxlcnMiLCJ3aWRnZXRTdGF0ZUhhbmRsZXJzIiwiaW5wdXRTdGF0ZUhhbmRsZXJzIiwidGV4dFN0YXRlSGFuZGxlcnMiLCJ0ZXh0IiwiVmlzdWFsV29ybGQiLCJ1c2VIZWxwZXJzIiwicmVuZGVyQ2FsbGJhY2tzIiwiY2xvY2siLCJDbG9jayIsIlJheWNhc3RlciIsIlNjZW5lIiwiY3NzU2NlbmUiLCJyZW5kZXJlciIsIldlYkdMUmVuZGVyZXIiLCJhbHBoYSIsImFudGlhbGlhcyIsInNldFBpeGVsUmF0aW8iLCJjc3NSZW5kZXJlciIsImNvbnRyb2xzIiwidG1wVmVjdG9yIiwiVGV4dHVyZUxvYWRlciIsIkFtYmllbnRMaWdodCIsImxpZ2h0IiwiRGlyZWN0aW9uYWxMaWdodCIsIkF4aXNIZWxwZXIiLCJvbldpbmRvd1Jlc2l6ZSIsImFuaW1hdGUiLCJmaWx0ZXJEYXRhIiwidHlwZXMiLCJjb250YWlucyIsImludGVuc2l0eSIsInVwZGF0ZUNhbWVyYSIsImFzcGVjdCIsInVwZGF0ZVJlbmRlcmVyIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZGVsdGFUaW1lIiwiZ2V0RGVsdGEiLCJwcm9jZXNzR2VvbWV0cnkiLCJidWZHZW9tZXRyeSIsImZyb21CdWZmZXJHZW9tZXRyeSIsIm1lcmdlVmVydGljZXMiLCJpbmRleGVkQnVmZmVyR2VvbSIsImNyZWF0ZUluZGV4ZWRCdWZmZXJHZW9tZXRyeUZyb21HZW9tZXRyeSIsIm1hcEluZGljZXMiLCJudW1WZXJ0aWNlcyIsIm51bUZhY2VzIiwiYnVmZmVyR2VvbSIsIkJ1ZmZlckdlb21ldHJ5IiwiRmxvYXQzMkFycmF5IiwiaW5kaWNlcyIsIlVpbnQzMkFycmF5IiwiVWludDE2QXJyYXkiLCJpMyIsInNldEluZGV4IiwiQnVmZmVyQXR0cmlidXRlIiwiYWRkQXR0cmlidXRlIiwiaXNFcXVhbCIsIngxIiwiejEiLCJ4MiIsInoyIiwiYXR0cmlidXRlcyIsImlkeFZlcnRpY2VzIiwibnVtSWR4VmVydGljZXMiLCJtYXBwZWRWZXJ0aWNlcyIsIm1hcHBlZEluZGljZXMiLCJtYXBwZWRBc3NvY2lhdGlvbiIsImFzc29jaWF0aW9uIiwiajMiLCJvbmVOb2RlUG9zaXRpb25DYWxsYmFjayIsIm11bHR5Tm9kZVBvc2l0aW9uQ2FsbGJhY2siLCJ2b2x1bWVQb3NpdGlvbnMiLCJ2b2x1bWVOb3JtYWxzIiwiYXNzb2NWZXJ0ZXgiLCJpbmRleFZlcnRleCIsIm11bHR5Tm9kZVBvc2l0aW9uUG9zdENhbGxiYWNrIiwicGF0aFBvc2l0aW9uQ2FsbGJhY2siLCJwb3NpdGlvbnMiLCJwYXRoUG9zaXRpb25Qb3N0Q2FsbGJhY2siLCJXaWRnZXRDb250cm9sbGVyIiwiQ2lyY2xlVGFyZ2V0IiwiUG9seVRhcmdldCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVy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QSxDQUFDIiwiZmlsZSI6ImpzL2Rpc3QvM2RmbGlwYm9vay5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDcyKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCA3MjRlNThkZjU4YzY1YzQ4MDhiNCIsImNvbnN0IF8kID0gR0xPQkFMX0xJQlMualF1ZXJ5PyB3aW5kb3cualF1ZXJ5OiByZXF1aXJlKCdqcXVlcnknKSxcclxuICAgICAgX2h0bWwyY2FudmFzID0gR0xPQkFMX0xJQlMuaHRtbDJjYW52YXM/IHdpbmRvdy5odG1sMmNhbnZhczogcmVxdWlyZSgnaHRtbDJjYW52YXMnKSxcclxuICAgICAgX1RIUkVFID0gR0xPQkFMX0xJQlMuVEhSRUU/IHdpbmRvdy5USFJFRTogcmVxdWlyZSgndGhyZWUnKSxcclxuICAgICAgX1JlYWN0ID0gR0xPQkFMX0xJQlMuUmVhY3Q/IHdpbmRvdy5SZWFjdDogcmVxdWlyZSgncmVhY3QnKSxcclxuICAgICAgX1JlYWN0RE9NID0gR0xPQkFMX0xJQlMuUmVhY3Q/IHdpbmRvdy5SZWFjdERPTTogcmVxdWlyZSgncmVhY3QtZG9tJyksXHJcbiAgICAgIF9QREZKUyA9IEdMT0JBTF9MSUJTLlBERkpTPyB3aW5kb3cuUERGSlM6IHJlcXVpcmUoJ3BkZmpzJyksXHJcbiAgICAgIF90ciA9IChzKT0+ICh3aW5kb3cuaWJlcmV6YW5za3kgfHwge30pLnRyICYmIHdpbmRvdy5pYmVyZXphbnNreS50cihzKSB8fCBzO1xyXG5cclxuZXhwb3J0IHtcclxuICBfJCBhcyAkLFxyXG4gIF9odG1sMmNhbnZhcyBhcyBodG1sMmNhbnZhcyxcclxuICBfVEhSRUUgYXMgVEhSRUUsXHJcbiAgX1JlYWN0IGFzIFJlYWN0LFxyXG4gIF9SZWFjdERPTSBhcyBSZWFjdERPTSxcclxuICBfUERGSlMgYXMgUERGSlMsXHJcbiAgX3RyIGFzIHRyXHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9saWJzLmpzIiwiY29uc3QgXyQgPSBHTE9CQUxfTElCUy5qUXVlcnk/IHdpbmRvdy5qUXVlcnk6IHJlcXVpcmUoJ2pxdWVyeScpLFxyXG4gICAgICBfaHRtbDJjYW52YXMgPSBHTE9CQUxfTElCUy5odG1sMmNhbnZhcz8gd2luZG93Lmh0bWwyY2FudmFzOiByZXF1aXJlKCdodG1sMmNhbnZhcycpLFxyXG4gICAgICBfVEhSRUUgPSBHTE9CQUxfTElCUy5USFJFRT8gd2luZG93LlRIUkVFOiByZXF1aXJlKCd0aHJlZScpLFxyXG4gICAgICBfUERGSlMgPSBHTE9CQUxfTElCUy5QREZKUz8gd2luZG93LlBERkpTOiByZXF1aXJlKCdwZGZqcycpLFxyXG4gICAgICBfdHIgPSAocyk9PiAod2luZG93LmliZXJlemFuc2t5IHx8IHt9KS50ciAmJiB3aW5kb3cuaWJlcmV6YW5za3kudHIocykgfHwgcztcclxuXHJcbmlmKHdpbmRvdy5GQjNEX0xPQ0FMRSkge1xyXG4gIHdpbmRvdy5pYmVyZXphbnNreSA9IHtcclxuICAgIC4uLndpbmRvdy5pYmVyZXphbnNreSxcclxuICAgIHRyOiAocyk9PiAoRkIzRF9MT0NBTEUuZGljdGlvbmFyeSB8fCB7fSlbc10gfHwgc1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgXyQgYXMgJCxcclxuICBfaHRtbDJjYW52YXMgYXMgaHRtbDJjYW52YXMsXHJcbiAgX1RIUkVFIGFzIFRIUkVFLFxyXG4gIF9QREZKUyBhcyBQREZKUyxcclxuICBfdHIgYXMgdHJcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvbGlicy5qcyIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIEJhc2VNYXRoVXRpbHMge1xyXG4gIHN0YXRpYyBzdW0gPSBbQmFzZU1hdGhVdGlscy5zdW0xLCBCYXNlTWF0aFV0aWxzLnN1bTIsIEJhc2VNYXRoVXRpbHMuc3VtMywgQmFzZU1hdGhVdGlscy5zdW00XTtcclxuICBzdGF0aWMgZXBzID0gMWUtNDtcclxuXHJcbiAgc3RhdGljIHN1bTEoa2EsYSxrYixiKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBrYSphWzBdK2tiKmJbMF1cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgc3VtMihrYSxhLGtiLGIpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIGthKmFbMF0ra2IqYlswXSxcclxuICAgICAga2EqYVsxXStrYipiWzFdXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHN1bTMoa2EsYSxrYixiKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBrYSphWzBdK2tiKmJbMF0sXHJcbiAgICAgIGthKmFbMV0ra2IqYlsxXSxcclxuICAgICAga2EqYVsyXStrYipiWzJdXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHN1bTQoa2EsYSxrYixiKSB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBrYSphWzBdK2tiKmJbMF0sXHJcbiAgICAgIGthKmFbMV0ra2IqYlsxXSxcclxuICAgICAga2EqYVsyXStrYipiWzJdLFxyXG4gICAgICBrYSphWzNdK2tiKmJbM11cclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcms0KGR5LCB0LCBkdCwgeSwgc3VtPUJhc2VNYXRoVXRpbHMuc3VtW3kubGVuZ3RoLTFdKSB7XHJcbiAgICBjb25zdCBrMT1keSh0LHkpLFxyXG4gICAgICAgICAgazI9ZHkodCtkdC8yLHN1bSgxLHksZHQvMixrMSkpLFxyXG4gICAgICAgICAgazM9ZHkodCtkdC8yLHN1bSgxLHksZHQvMixrMikpLFxyXG4gICAgICAgICAgazQ9ZHkodCtkdCxzdW0oMSx5LGR0LGszKSk7XHJcbiAgICByZXR1cm4gc3VtKDEseSxkdC82LHN1bSgxLHN1bSgxLGsxLDIsazIpLDEsc3VtKDIsazMsMSxrNCkpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBleHRyYXBvbGF0ZUxpbmVhcih4LHkseGkpIHtcclxuICAgIHJldHVybiB5WzBdKyh5WzFdLXlbMF0pLyh4WzFdLXhbMF0pKih4aS14WzBdKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpbnRlcnBvbGF0ZUxpbmVhcih4LHkseGkpIHtcclxuICAgIGxldCB5aTtcclxuICAgIGlmKHhbMF0+eFsxXSkge1xyXG4gICAgICB4PXgucmV2ZXJzZSgpO1xyXG4gICAgICB5PXkucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG4gICAgaWYoeGk8eFswXSkge1xyXG4gICAgICB5aT15WzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih4aT54WzFdKSB7XHJcbiAgICAgIHlpPXlbMV07XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgeWk9QmFzZU1hdGhVdGlscy5leHRyYXBvbGF0ZUxpbmVhcih4LHkseGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHlpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNhbGNTY2FsZShzcmNXLCBzcmNILCBkc3RXLCBkc3RIKSB7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oZHN0Vy9zcmNXLCBkc3RIL3NyY0gpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG11bE0oYSwgYikge1xyXG4gICAgY29uc3Qgcj1bXTtcclxuICAgIGZvcihsZXQgaT0wO2k8YS5sZW5ndGg7KytpKSB7XHJcbiAgICAgIHIucHVzaChbXSk7XHJcbiAgICAgIGZvcihsZXQgaj0wO2o8YlswXS5sZW5ndGg7KytqKSB7XHJcbiAgICAgICAgcltpXVtqXSA9IDA7XHJcbiAgICAgICAgZm9yKGxldCBrPTA7azxiLmxlbmd0aDsrK2spIHtcclxuICAgICAgICAgIHJbaV1bal0rPWFbaV1ba10qYltrXVtqXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRyYW5zTShtKSB7XHJcbiAgICBjb25zdCByPVtdO1xyXG4gICAgZm9yKGxldCBpPTA7aTxtLmxlbmd0aDsrK2kpIHtcclxuICAgICAgZm9yKGxldCBqPTA7ajxtWzBdLmxlbmd0aDsrK2opIHtcclxuICAgICAgICBpZighcltqXSkge1xyXG4gICAgICAgICAgcltqXT1bXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcltqXVtpXT1tW2ldW2pdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBtYXQoZGF0YSkge1xyXG4gICAgbGV0IHM9MDtcclxuICAgIGZvcihsZXQgeCBvZiBkYXRhKSB7XHJcbiAgICAgIHMrPXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcy9kYXRhLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkaXNwKGRhdGEpIHtcclxuICAgIGNvbnN0IE09QmFzZU1hdGhVdGlscy5tYXQoZGF0YSk7XHJcbiAgICBsZXQgcz0wO1xyXG4gICAgZm9yKGxldCB4IG9mIGRhdGEpIHtcclxuICAgICAgcys9KHgtTSkqKHgtTSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcy9kYXRhLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwcmVkaWN0KGRhdGEsIG51bSkge1xyXG4gICAgY29uc3Qgcj1bXSwgbD1kYXRhLmxlbmd0aCwgRD1CYXNlTWF0aFV0aWxzLmRpc3AoZGF0YSk7XHJcbiAgICBpZihEPGwgJiYgbD4xKSB7XHJcbiAgICAgIGNvbnN0IGFtPVtdLCBibT1bXTtcclxuICAgICAgZm9yKGxldCBpPTA7aTxsOysraSkge1xyXG4gICAgICAgIGFtLnB1c2goW2ksMV0pO1xyXG4gICAgICAgIGJtLnB1c2goW2RhdGFbaV1dKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YT1CYXNlTWF0aFV0aWxzLnRyYW5zTShhbSksIGE9QmFzZU1hdGhVdGlscy5tdWxNKHRhLGFtKSwgYj1CYXNlTWF0aFV0aWxzLm11bE0odGEsYm0pLFxyXG4gICAgICBkPShhWzBdWzBdKmFbMV1bMV0tYVsxXVswXSphWzBdWzFdKSxcclxuICAgICAgcD1bXHJcbiAgICAgICAgLShhWzBdWzFdKmJbMV1bMF0tYlswXVswXSphWzFdWzFdKS9kLFxyXG4gICAgICAgIChhWzBdWzBdKmJbMV1bMF0tYVsxXVswXSpiWzBdWzBdKS9kXHJcbiAgICAgIF07XHJcbiAgICAgIGZvcihsZXQgaT0wO2k8bnVtOysraSkge1xyXG4gICAgICAgIGNvbnN0IHYgPSBNYXRoLnJvdW5kKHBbMF0qKGkrbCkrcFsxXSk7XHJcbiAgICAgICAgaWYoci5pbmRleE9mKHYpPT09LTEpIHtcclxuICAgICAgICAgIHIucHVzaCh2KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFVuaXF1ZSgpIHtcclxuICAgIHJldHVybiBNYXRoLmNlaWwoMWU5Kk1hdGgucmFuZG9tKCkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldFNwbGluZVBvaW50cyhzcGxpbmUsIHBzKSB7XHJcbiAgICBpZihzcGxpbmUucG9pbnRzLmxlbmd0aCE9PXBzLngubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybignc2V0U3BsaW5lUG9pbnRzOiBiYWQgcG9pbnRzJyk7XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IGk9MDsgaTxzcGxpbmUucG9pbnRzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHNwbGluZS5wb2ludHNbaV0uc2V0KHBzLnhbaV0sIHBzLnlbaV0sIHBzLno/IHBzLnpbaV06IDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1hcGwyTChscywgbGVuLCBuLCBmKSB7XHJcbiAgICBjb25zdCBkTCA9IGxlbi8obi0xKTtcclxuICAgIGxldCBMPTA7XHJcbiAgICBmb3IobGV0IGk9MCwgZD1sc1swXTsgaTxscy5sZW5ndGgtMSAmJiBMPGxlbiswLjEqZEw7ICsraSwgZCs9bHNbaV0pIHtcclxuICAgICAgaWYoTWF0aC5hYnMoTC1kKTxNYXRoLmFicyhMLWQtbHNbaSsxXSkpIHtcclxuICAgICAgICBmKGksIEwpO1xyXG4gICAgICAgIEwrPWRMO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZihMPGxlbiswLjEqZEwpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdtYXBsMkw6IGxzIGlzIG5vdCBlbm91Z2h0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGV0MihhLGIsYyxkKSB7XHJcbiAgICByZXR1cm4gYSpkLWIqYztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBzb2x2ZTJMaW4oYTEsYjEsYTIsYjIpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBjb25zdCBkPUJhc2VNYXRoVXRpbHMuZGV0MihhMVswXSxhMVsxXSxhMlswXSxhMlsxXSk7XHJcbiAgICBpZihNYXRoLmFicyhkKT5CYXNlTWF0aFV0aWxzLmVwcykge1xyXG4gICAgICBjb25zdCBkeD1CYXNlTWF0aFV0aWxzLmRldDIoYjEsYTFbMV0sYjIsYTJbMV0pLCBkeT1CYXNlTWF0aFV0aWxzLmRldDIoYTFbMF0sYjEsYTJbMF0sYjIpO1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgeDogZHgvZCxcclxuICAgICAgICB5OiBkeS9kXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzSW5zaWRlUG9seShwcywgcCkge1xyXG4gICAgbGV0IGRvbmUgPSBmYWxzZSwgY3Q7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxwcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBpZihCYXNlTWF0aFV0aWxzLnYyZGlzdChwLCBwc1tpXSk8QmFzZU1hdGhVdGlscy5lcHMpIHtcclxuICAgICAgICBjdD0xO1xyXG4gICAgICAgIGRvbmUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB3aGlsZSghZG9uZSkge1xyXG4gICAgICBkb25lID0gdHJ1ZTtcclxuICAgICAgY3QgPSAwO1xyXG4gICAgICBsZXQgbnAgPSB7eDogcC54K01hdGgucmFuZG9tKCktMC41LCB5OiBwLnkrTWF0aC5yYW5kb20oKS0wLjV9LCBybiA9IHt4OiBucC54LXAueCwgeTogbnAueS1wLnl9LCBhMT1bcm4ueSwgLXJuLnhdLCBiMT1wLngqcm4ueS1wLnkqcm4ueDtcclxuICAgICAgZm9yKGxldCBpPTA7IGk8cHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjb25zdCBwMD1wc1tpXSwgcDE9cHNbKGkrMSklcHMubGVuZ3RoXSwgbiA9IHt4OiBwMS54LXAwLngsIHk6IHAxLnktcDAueX0sIGEyPVtuLnksIC1uLnhdLCBiMj1wMC54Km4ueS1wMC55Km4ueCxcclxuICAgICAgICAgIGlwID0gQmFzZU1hdGhVdGlscy5zb2x2ZTJMaW4oYTEsYjEsYTIsYjIpO1xyXG4gICAgICAgIGlmKGlwKSB7XHJcbiAgICAgICAgICBpZihCYXNlTWF0aFV0aWxzLnYyZGlzdChpcCwgcDApPEJhc2VNYXRoVXRpbHMuZXBzIHx8IEJhc2VNYXRoVXRpbHMudjJkaXN0KGlwLCBwMSk8QmFzZU1hdGhVdGlscy5lcHMpIHtcclxuICAgICAgICAgICAgZG9uZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYoaXAueD5NYXRoLm1pbihwMC54LHAxLngpLUJhc2VNYXRoVXRpbHMuZXBzJiZpcC54PE1hdGgubWF4KHAwLngscDEueCkrQmFzZU1hdGhVdGlscy5lcHMgJiZcclxuICAgICAgICAgICAgICAgICAgaXAueT5NYXRoLm1pbihwMC55LHAxLnkpLUJhc2VNYXRoVXRpbHMuZXBzJiZpcC55PE1hdGgubWF4KHAwLnkscDEueSkrQmFzZU1hdGhVdGlscy5lcHMpIHtcclxuICAgICAgICAgICAgaWYoQmFzZU1hdGhVdGlscy52MmRpc3QoaXAsIHApPEJhc2VNYXRoVXRpbHMuZXBzKSB7XHJcbiAgICAgICAgICAgICAgY3Q9MTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zdCB0bj17eDogaXAueC1wLngsIHk6IGlwLnktcC55fTtcclxuICAgICAgICAgICAgICBjdCArPSB0bi54KnJuLngrdG4ueSpybi55PjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjdCUyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGlzSW5zaWRlQ29udlBvbHkocHMsIHApIHtcclxuICAgIGxldCBzZyA9IFswLCAwXTtcclxuICAgIGZvcihsZXQgaT0wOyBpPHBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHAwPXBzW2ldLCBwMT1wc1soaSsxKSVwcy5sZW5ndGhdLCBhPXt4OiBwMC54LXAueCwgeTogcDAueS1wLnl9LCBiPXt4OiBwMS54LXAueCwgeTogcDEueS1wLnl9O1xyXG4gICAgICArK3NnWyhhLngqYi55LWEueSpiLng8MCkrMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gfnNnLmluZGV4T2YocHMubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2Mmxlbih2Mikge1xyXG4gICAgcmV0dXJuIE1hdGguc3FydCh2Mi54KnYyLngrdjIueSp2Mi55KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB2MmRpc3QodjIxLCB2MjIpIHtcclxuICAgIHJldHVybiBCYXNlTWF0aFV0aWxzLnYybGVuKHtcclxuICAgICAgeDogdjIyLngtdjIxLngsXHJcbiAgICAgIHk6IHYyMi55LXYyMS55XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjb21wdXRlU3F1YXJlKHBzKSB7XHJcbiAgICBjb25zdCBhID0gW107XHJcbiAgICBsZXQgcCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxwcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBhLnB1c2goQmFzZU1hdGhVdGlscy52MmRpc3QocHNbaV0sIHBzWyhpKzEpJXBzLmxlbmd0aF0pKTtcclxuICAgICAgcCArPSAwLjUqYVtpXTtcclxuICAgIH1cclxuICAgIHJldHVybiBNYXRoLnNxcnQocCoocC1hWzBdKSoocC1hWzFdKSoocC1hWzJdKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29tcHV0ZUludGVycENvZWZzKHRyaSwgcCkge1xyXG4gICAgY29uc3QgcyA9IEJhc2VNYXRoVXRpbHMuY29tcHV0ZVNxdWFyZSh0cmkpLCBjb2Vmcz1bXSwgbCA9IHRyaS5sZW5ndGg7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxsOyArK2kpIHtcclxuICAgICAgY29lZnNbaV0gPSBCYXNlTWF0aFV0aWxzLmNvbXB1dGVTcXVhcmUoW3AsIHRyaVsoaSsxKSVsXSwgdHJpWyhpKzIpJWxdXSkvcztcclxuICAgIH1cclxuICAgIHJldHVybiBjb2VmcztcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0Jhc2VNYXRoVXRpbHMuanMiLCJpbXBvcnQge1RIUkVFfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEJhc2VNYXRoVXRpbHMgZnJvbSAnLi9CYXNlTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hdGhVdGlscyBleHRlbmRzIEJhc2VNYXRoVXRpbHMge1xyXG4gIHN0YXRpYyB2MSA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcblxyXG4gIHN0YXRpYyBzcGxpdFNwbGluZShzcGxpbmUsIE4pIHtcclxuICAgIGNvbnN0IG8gPSB7bGVuOiAwLCBsczogWzBdfSwgZGw9MS9OO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8PU47ICsraSkge1xyXG4gICAgICBjb25zdCBwID0gc3BsaW5lLmdldFBvaW50KGkqZGwpO1xyXG4gICAgICBpZihpKSB7XHJcbiAgICAgICAgY29uc3QgZCA9IE1hdGhVdGlscy52MS5kaXN0YW5jZVRvKHApO1xyXG4gICAgICAgIG8ubGVuICs9IGQ7XHJcbiAgICAgICAgby5scy5wdXNoKGQpO1xyXG4gICAgICB9XHJcbiAgICAgIE1hdGhVdGlscy52MS5jb3B5KHApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG87XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0TGluZWFySW5kZWNlcyhzcGxpbmUsIG4pIHtcclxuICAgIGNvbnN0IGRlbCA9IDUwMDAsIGREZWwgPSAxL2RlbDtcclxuICAgIGNvbnN0IGxzPVswXTtcclxuICAgIGxldCBsID0gMDtcclxuICAgIGZvcihsZXQgaT0wOyBpPD1kZWw7ICsraSkge1xyXG4gICAgICBjb25zdCBwID0gc3BsaW5lLmdldFBvaW50KGkqZERlbCk7XHJcbiAgICAgIGlmKGkpIHtcclxuICAgICAgICBjb25zdCBkPU1hdGhVdGlscy52MS5kaXN0YW5jZVRvKHApO1xyXG4gICAgICAgIGwgKz0gZDtcclxuICAgICAgICBscy5wdXNoKGQpO1xyXG4gICAgICB9XHJcbiAgICAgIE1hdGhVdGlscy52MS5jb3B5KHApO1xyXG4gICAgfVxyXG4gICAgbHMucHVzaCgxZTcpO1xyXG5cclxuICAgIGNvbnN0IHJlcyA9IFtdLCBkbCA9IGwvKG4tMSk7XHJcbiAgICBmb3IobGV0IGk9MCwgTD0wLCBkPWxzWzBdOyBpPGxzLmxlbmd0aC0xOyArK2ksIGQrPWxzW2ldKSB7XHJcbiAgICAgIGlmKE1hdGguYWJzKEwtZCk8TWF0aC5hYnMoTC1kLWxzW2krMV0pKSB7XHJcbiAgICAgICAgcmVzLnB1c2goaSpkRGVsKTtcclxuICAgICAgICBMKz1kbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVmaW5lUG9seShwb2x5LCBtYXhEbCkge1xyXG4gICAgY29uc3QgcmVzID0gW107XHJcbiAgICBmb3IobGV0IGk9MDsgaTxwb2x5Lmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHAwID0gcG9seVtpXSwgcDEgPSBwb2x5WyhpKzEpJXBvbHkubGVuZ3RoXSwgbCA9IEJhc2VNYXRoVXRpbHMudjJkaXN0KHAwLCBwMSksIG4gPSBNYXRoLmNlaWwobC9tYXhEbCksIGRsID0gbC9uO1xyXG4gICAgICByZXMucHVzaChwMCk7XHJcbiAgICAgIGZvcihsZXQgaj0xOyBqPG47ICsraikge1xyXG4gICAgICAgIHJlcy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IyKFxyXG4gICAgICAgICAgcDAueCtqKmRsKihwMS54LXAwLngpL2wsXHJcbiAgICAgICAgICBwMC55K2oqZGwqKHAxLnktcDAueSkvbFxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvTWF0aFV0aWxzLmpzIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHMge1xyXG5cclxuICBzdGF0aWMgbm9ybWFsaXplVXJsKHVybCkge1xyXG4gICAgZnVuY3Rpb24gc3BsaXQocykge1xyXG4gICAgICByZXR1cm4gcy5yZXBsYWNlKC9cXFxcL2csICcvJykuc3BsaXQoJy8nKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGJhc2UgPSBzcGxpdCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICB1cmwgPSBzcGxpdCh1cmwpO1xyXG4gICAgaWYoYmFzZVsyXT09PXVybFsyXSkge1xyXG4gICAgICB1cmxbMF0gPSBiYXNlWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVybC5qb2luKCcvJyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZXh0ZW5kcyhkZXIsIGJhc2UpIHtcclxuICAgIGZvcihsZXQgbmFtZSBpbiBiYXNlKSB7XHJcbiAgICAgIGlmKCFkZXIuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcclxuICAgICAgICBkZXJbbmFtZV0gPSBiYXNlW25hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGVmYXVsdENtcChhLCBiKSB7XHJcbiAgICByZXR1cm4gYS1iO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGxvd2VyQm91bmQoYSwgeCwgY21wKSB7XHJcbiAgICBjbXAgPSBjbXAgfHwgVXRpbHMuZGVmYXVsdENtcDtcclxuICAgIGxldCBsID0gMCwgaCA9IGEubGVuZ3RoLTE7XHJcbiAgICB3aGlsZShoLWw+MSkge1xyXG4gICAgICBsZXQgbWlkID0gTWF0aC5mbG9vcigobCArIGgpIC8gMik7XHJcbiAgICAgIGlmKGNtcCh4LCBhW21pZF0pPDApIHtcclxuICAgICAgICBoID0gbWlkO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGwgPSBtaWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjbXAoeCwgYVtoXSk+PTA/IGg6IGw7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9VdGlscy5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBHcmFwaFV0aWxzIGZyb20gJy4vR3JhcGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZUJhc2Uge1xyXG5cclxuICBzdGF0aWMgcmVuZGVyQ2FudmFzID0gICQoJzxjYW52YXM+JylbMF07XHJcbiAgc3RhdGljIHJlbmRlckNhbnZhc0N0eCA9IEltYWdlQmFzZS5yZW5kZXJDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpIHtcclxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcbiAgICB0aGlzLnduZCA9IGNvbnRleHQud25kO1xyXG4gICAgdGhpcy5kb2MgPSBjb250ZXh0LmRvYztcclxuICAgIHRoaXMuZWxlbWVudCA9IGNvbnRleHQuZWxlbWVudCB8fCBjb250ZXh0LmRvYy5ib2R5O1xyXG4gICAgdGhpcy5jID0gY29udGV4dC5yZW5kZXJDYW52YXMgfHwgSW1hZ2VCYXNlLnJlbmRlckNhbnZhcztcclxuICAgIHRoaXMuY3R4ID0gY29udGV4dC5yZW5kZXJDYW52YXNDdHggfHwgSW1hZ2VCYXNlLnJlbmRlckNhbnZhc0N0eDtcclxuICAgIHRoaXMucmVzVyA9IHRoaXMud2lkdGggPSB3aWR0aDtcclxuICAgIHRoaXMucmVzSCA9IHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgdGhpcy5jb2xvciA9IGNvbG9yO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVzb2x1dGlvbihyZXMpIHtcclxuICAgIHRoaXMucmVzVyA9IHJlcy53aWR0aDtcclxuICAgIHRoaXMucmVzSCA9IHJlcy5oZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHJlbmRlckJsYW5rUGFnZSgpIHtcclxuICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgdGhpcy5jdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKHRoaXMuY29sb3IsIDEpO1xyXG4gICAgdGhpcy5jdHgucmVjdCgwLCAwLCB0aGlzLmMud2lkdGgsIHRoaXMuYy5oZWlnaHQpO1xyXG4gICAgdGhpcy5jdHguZmlsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySW1hZ2UoaW1hZ2UpIHtcclxuICAgIHRoaXMucHVzaEN0eCgpO1xyXG4gICAgdGhpcy5jdHguZHJhd0ltYWdlKGltYWdlLCAwLCAwKTtcclxuICAgIHRoaXMucG9wQ3R4KCk7XHJcbiAgfVxyXG5cclxuICBub3JtVG9Db252KHApIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IHAueCp0aGlzLmMud2lkdGgsXHJcbiAgICAgIHk6ICgxLXAueSkqdGhpcy5jLmhlaWdodFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbmRlckhpdChwb2x5KSB7XHJcbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcclxuICAgIGN0eC5maWxsU3R5bGUgPSAncmdiYSgyNTUsMjU1LDAsMC40KSc7XHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBsZXQgcCA9IHRoaXMubm9ybVRvQ29udihwb2x5WzBdKTtcclxuICAgIGN0eC5tb3ZlVG8ocC54LCBwLnkpO1xyXG4gICAgZm9yKGxldCBpPTE7IGk8cG9seS5sZW5ndGg7ICsraSkge1xyXG4gICAgICBwID0gdGhpcy5ub3JtVG9Db252KHBvbHlbaV0pO1xyXG4gICAgICBjdHgubGluZVRvKHAueCwgcC55KTtcclxuICAgIH1cclxuICAgIGN0eC5jbG9zZVBhdGgoKTtcclxuICAgIGN0eC5maWxsKCk7XHJcbiAgfVxyXG5cclxuICBwdXNoQ3R4KCkge1xyXG4gICAgaWYodGhpcy5yZXNXIT10aGlzLmMud2lkdGgpIHtcclxuICAgICAgdGhpcy5jLndpZHRoID0gdGhpcy5yZXNXO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5yZXNIIT10aGlzLmMuaGVpZ2h0KSB7XHJcbiAgICAgIHRoaXMuYy5oZWlnaHQgPSB0aGlzLnJlc0g7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN0eC5zYXZlKCk7XHJcbiAgICB0aGlzLmN0eC5zY2FsZSh0aGlzLmMud2lkdGgvdGhpcy53aWR0aCwgdGhpcy5jLmhlaWdodC90aGlzLmhlaWdodCk7XHJcbiAgICByZXR1cm4gdGhpcy5jdHg7XHJcbiAgfVxyXG5cclxuICBwb3BDdHgoKSB7XHJcbiAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJOb3RGb3VuZFBhZ2UoKSB7XHJcbiAgICB0aGlzLnJlbmRlckJsYW5rUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgZmluaXNoUmVuZGVyKCkge1xyXG4gICAgaWYodGhpcy5vbkNoYW5nZSkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuYyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5pc2hMb2FkKCkge1xyXG4gICAgaWYodGhpcy5vbkxvYWQpIHtcclxuICAgICAgdGhpcy5vbkxvYWQoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0UmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTaW11bGF0ZWREb2MoKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvSW1hZ2VCYXNlLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50Q29udmVydGVyIHtcclxuXHJcbiAgLy8gdmlydHVhbHNcclxuICAvLyBnZXRPYmplY3QoZSwgZGF0YSk7XHJcbiAgLy8gZ2V0Q2FsbGJhY2sob2JqZWN0KTtcclxuICAvLyB0ZXN0KG9iamVjdDEsIG9iamVjdDEpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYykge1xyXG4gICAgdGhpcy53bmQgPSB3bmQ7XHJcbiAgICB0aGlzLmRvYyA9IGRvYztcclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBzZXRFbmFibGUodmwpIHtcclxuICAgIGlmKCF2bCkge1xyXG4gICAgICBpZih0aGlzLm1DYXBPYmplY3QpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1DYXBPYmplY3QsICQuRXZlbnQoJ21vdXNldXAnKSwgJ21vdXNldXAnKTtcclxuICAgICAgICB0aGlzLm1DYXBPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5tSG92T2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnkodGhpcy5tSG92T2JqZWN0LCAkLkV2ZW50KCdtb3VzZW91dCcpLCAnbW91c2VvdXQnKTtcclxuICAgICAgICB0aGlzLm1Ib3ZPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlZCA9IHZsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FsbGJhY2sob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgbm90aWZ5KG9iamVjdCwgZSwgdHlwZSkge1xyXG4gICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldENhbGxiYWNrKG9iamVjdCk7XHJcbiAgICBpZihjYWxsYmFjaykge1xyXG4gICAgICBjb25zdCBwcm9wcyA9IHtcclxuICAgICAgICAuLi5lLFxyXG4gICAgICAgIHR5cGUsXHJcbiAgICAgICAgdmlldzogdGhpcy53bmRcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgakUgPSAkLkV2ZW50KHR5cGUsIHByb3BzKTtcclxuICAgICAgY2FsbGJhY2soakUsIG9iamVjdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0KGUsIGRhdGEpIHtcclxuICAgIGlmKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZih0aGlzLmZpbHRlcikge1xyXG4gICAgICBlID0gdGhpcy5maWx0ZXIodGhpcy5lbGVtZW50LCBlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYmplY3QgPSB0aGlzLmdldE9iamVjdChlLCBkYXRhKSxcclxuICAgICAgbm90aWZ5ID0gfmUudHlwZS5pbmRleE9mKCd0b3VjaCcpPyB0aGlzLmNvbnZlcnRUb3VjaChlLCBkYXRhLCBvYmplY3QpOiB0aGlzLmNvbnZlcnRNb3VzZShlLCBkYXRhLCBvYmplY3QpO1xyXG4gICAgaWYobm90aWZ5ICYmIG9iamVjdCkge1xyXG4gICAgICB0aGlzLm5vdGlmeShvYmplY3QsIGUsIGUudHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb252ZXJ0VG91Y2goZSwgZGF0YSwgb2JqZWN0KSB7XHJcbiAgICBsZXQgbm90aWZ5ID0gdHJ1ZTtcclxuICAgIHN3aXRjaChlLnR5cGUpIHtcclxuICAgICAgY2FzZSAndG91Y2hzdGFydCc6IHtcclxuICAgICAgICBpZih0aGlzLnRDYXBPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMudENhcE9iamVjdCwgZSwgJ3RvdWNoZW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudENhcE9iamVjdCA9IG9iamVjdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICd0b3VjaGVuZCc6IHtcclxuICAgICAgICBpZih0aGlzLnRDYXBPYmplY3QgJiYgIXRoaXMudGVzdCh0aGlzLnRDYXBPYmplY3QsIG9iamVjdCkpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMudENhcE9iamVjdCwgZSwgJ3RvdWNoZW5kJyk7XHJcbiAgICAgICAgICBub3RpZnkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihvYmplY3QgJiYgdGhpcy50ZXN0KHRoaXMudENhcE9iamVjdCwgb2JqZWN0KSkge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnkob2JqZWN0LCBlLCAndG91Y2h0YXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50Q2FwT2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3RvdWNodGFwJzoge1xyXG4gICAgICAgIG5vdGlmeSA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm90aWZ5O1xyXG4gIH1cclxuXHJcbiAgY29udmVydE1vdXNlKGUsIGRhdGEsIG9iamVjdCkge1xyXG4gICAgbGV0IG5vdGlmeSA9IHRydWU7XHJcbiAgICBzd2l0Y2goZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ21vdXNlZG93bic6IHtcclxuICAgICAgICBpZih0aGlzLm1DYXBPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMubUNhcE9iamVjdCwgZSwgJ21vdXNldXAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tQ2FwT2JqZWN0ID0gb2JqZWN0O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21vdXNldXAnOiB7XHJcbiAgICAgICAgaWYodGhpcy5tQ2FwT2JqZWN0ICYmICF0aGlzLnRlc3QodGhpcy5tQ2FwT2JqZWN0LCBvYmplY3QpKSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1DYXBPYmplY3QsIGUsICdtb3VzZXVwJyk7XHJcbiAgICAgICAgICBub3RpZnkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnY2xpY2snOiB7XHJcbiAgICAgICAgbm90aWZ5ID0gdGhpcy50ZXN0KHRoaXMubUNhcE9iamVjdCwgb2JqZWN0KTtcclxuICAgICAgICB0aGlzLm1DYXBPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbW91c2VlbnRlcic6XHJcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XHJcbiAgICAgIGNhc2UgJ21vdXNlbW92ZSc6IHtcclxuICAgICAgICBpZighdGhpcy50ZXN0KHRoaXMubUhvdk9iamVjdCwgb2JqZWN0KSAmJiB0aGlzLm1Ib3ZPYmplY3QpIHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5KHRoaXMubUhvdk9iamVjdCwgZSwgJ21vdXNlb3V0Jyk7XHJcbiAgICAgICAgICB0aGlzLm1Ib3ZPYmplY3QgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCF0aGlzLm1Ib3ZPYmplY3QgJiYgb2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeShvYmplY3QsIGUsICdtb3VzZW92ZXInKTtcclxuICAgICAgICAgIHRoaXMubUhvdk9iamVjdCA9IG9iamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm90aWZ5ID0gZS50eXBlID09PSAnbW91c2Vtb3ZlJztcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtb3VzZWxlYXZlJzpcclxuICAgICAgY2FzZSAnbW91c2VvdXQnOiB7XHJcbiAgICAgICAgaWYodGhpcy5tSG92T2JqZWN0KSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeSh0aGlzLm1Ib3ZPYmplY3QsIGUsICdtb3VzZW91dCcpO1xyXG4gICAgICAgICAgdGhpcy5tSG92T2JqZWN0ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBub3RpZnkgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vdGlmeTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0V2ZW50Q29udmVydGVyLmpzIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JhcGhVdGlscyB7XHJcblxyXG4gIHN0YXRpYyBleHRyYXBvbGF0ZUxpbmVhcih4LHkseGkpIHtcclxuICAgIHJldHVybiB5WzBdKyh5WzFdLXlbMF0pLyh4WzFdLXhbMF0pKih4aS14WzBdKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBpbnRlcnBvbGF0ZTAxKHkxLHkyLHQpIHtcclxuICAgIHJldHVybiBHcmFwaFV0aWxzLmV4dHJhcG9sYXRlTGluZWFyKFswLDFdLFt5MSx5Ml0sdCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0Q29sb3JCeXRlcyhjb2xvcikge1xyXG4gICAgcmV0dXJuIFsoY29sb3I+PjE2KSYweEZGLCAoY29sb3I+PjgpJjB4RkYsIGNvbG9yJjB4RkZdO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGludmVyc2VDb2xvcihjb2xvciwgdD0xKSB7XHJcbiAgICBjb25zdCBicz1HcmFwaFV0aWxzLmdldENvbG9yQnl0ZXMoY29sb3IpLFxyXG4gICAgICAgICAgaWJzPVsweEZGLWJzWzBdLDB4RkYtYnNbMV0sMHhGRi1ic1syXV0sXHJcbiAgICAgICAgICBuYnM9W01hdGgucm91bmQoR3JhcGhVdGlscy5pbnRlcnBvbGF0ZTAxKGJzWzBdLGlic1swXSx0KSksTWF0aC5yb3VuZChHcmFwaFV0aWxzLmludGVycG9sYXRlMDEoYnNbMV0saWJzWzFdLHQpKSxNYXRoLnJvdW5kKEdyYXBoVXRpbHMuaW50ZXJwb2xhdGUwMShic1syXSxpYnNbMl0sdCkpXTtcclxuICAgIHJldHVybiBHcmFwaFV0aWxzLmJ5dGVzMkNvbG9yKG5icyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29sb3IyUmdiYShjb2xvciwgYSkge1xyXG4gICAgcmV0dXJuIEdyYXBoVXRpbHMuYnl0ZXMyUmdiYShHcmFwaFV0aWxzLmdldENvbG9yQnl0ZXMoY29sb3IpLCBhKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBieXRlczJSZ2JhKGJzLCBhKSB7XHJcbiAgICByZXR1cm4gJ3JnYmEoJyticy5qb2luKCcsJykrJywnK2ErJyknO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGJ5dGVzMkNvbG9yKGJzKSB7XHJcbiAgICByZXR1cm4gYnNbMl18KGJzWzFdPDw4KXwoYnNbMF08PDE2KVxyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9HcmFwaFV0aWxzLmpzIiwiaW1wb3J0IENhY2hlIGZyb20gJy4vQ2FjaGUnO1xyXG5pbXBvcnQgQmxhbmtJbWFnZSBmcm9tICcuL0JsYW5rSW1hZ2UnO1xyXG5pbXBvcnQgU3RhdGljSW1hZ2UgZnJvbSAnLi9TdGF0aWNJbWFnZSc7XHJcbmltcG9ydCBQZGZJbWFnZSBmcm9tICcuL1BkZkltYWdlJztcclxuaW1wb3J0IEludGVyYWN0aXZlSW1hZ2UgZnJvbSAnLi9JbnRlcmFjdGl2ZUltYWdlJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEltYWdlRmFjdG9yeSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNhY2hlKSB7XHJcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlIHx8IG5ldyBDYWNoZSgpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGQoaW5mbywgbj0wLCB3aWR0aFRleGVscz0yMTAsIGhlaWdodFRleGVscz0yOTcsIGNvbG9yPTB4RkZGRkZGLCBpbmplY3Rvcj11bmRlZmluZWQpIHtcclxuICAgIGxldCBpbWFnZTtcclxuICAgIHN3aXRjaChpbmZvLnR5cGUpIHtcclxuICAgICAgY2FzZSAnaHRtbCc6IHtcclxuICAgICAgICBpbWFnZSA9IG5ldyBJbnRlcmFjdGl2ZUltYWdlKHRoaXMuY29udGV4dCwgd2lkdGhUZXhlbHMsIGhlaWdodFRleGVscywgY29sb3IsIGluZm8uc3JjLCB0aGlzLmNhY2hlLCBpbmplY3Rvcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnaW1hZ2UnOiB7XHJcbiAgICAgICAgaW1hZ2UgPSBuZXcgU3RhdGljSW1hZ2UodGhpcy5jb250ZXh0LCB3aWR0aFRleGVscywgaGVpZ2h0VGV4ZWxzLCBjb2xvciwgaW5mby5zcmMpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ3BkZic6IHtcclxuICAgICAgICBpbWFnZSA9IG5ldyBQZGZJbWFnZSh0aGlzLmNvbnRleHQsIHdpZHRoVGV4ZWxzLCBoZWlnaHRUZXhlbHMsIGNvbG9yLCBpbmZvLnNyYywgbik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnYmxhbmsnOlxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgaW1hZ2UgPSBuZXcgQmxhbmtJbWFnZSh0aGlzLmNvbnRleHQsIHdpZHRoVGV4ZWxzLCBoZWlnaHRUZXhlbHMsIGNvbG9yKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGltYWdlO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9JbWFnZUZhY3RvcnkuanMiLCJpbXBvcnQge3Byb3BzIGFzICBib29rUHJvcHN9IGZyb20gJy4uL3Byb3BzL2Jvb2snO1xyXG5pbXBvcnQgQmFzZU1hdGhVdGlscyBmcm9tICdCYXNlTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2tQcm9wc0J1aWxkZXIge1xyXG4gIGNvbnN0cnVjdG9yKG9uUmVhZHkpIHtcclxuICAgIHRoaXMub25SZWFkeSA9IG9uUmVhZHk7XHJcbiAgICB0aGlzLmRlZmF1bHRzID0gYm9va1Byb3BzKCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGNhbGNTaXplKHdpZHRoLCBoZWlnaHQpIHtcclxuICAgIGNvbnN0IHNjYWxlID0gQmFzZU1hdGhVdGlscy5jYWxjU2NhbGUod2lkdGgsIGhlaWdodCwgdGhpcy5kZWZhdWx0cy53aWR0aCwgdGhpcy5kZWZhdWx0cy5oZWlnaHQpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGg6IHNjYWxlKndpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHNjYWxlKmhlaWdodFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNhbGNUZXhlbHMod2lkdGgsIGhlaWdodCkge1xyXG4gICAgY29uc3Qgc2hlZXQgPSB0aGlzLmRlZmF1bHRzLnNoZWV0LCBzY2FsZSA9IEJhc2VNYXRoVXRpbHMuY2FsY1NjYWxlKHdpZHRoLCBoZWlnaHQsIHNoZWV0LndpZHRoVGV4ZWxzLCBzaGVldC5oZWlnaHRUZXhlbHMpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGhUZXhlbHM6IHNjYWxlKndpZHRoLFxyXG4gICAgICBoZWlnaHRUZXhlbHM6IHNjYWxlKmhlaWdodFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNhbGNQcm9wcyh3aWR0aCwgaGVpZ2h0KSB7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi50aGlzLmRlZmF1bHRzLFxyXG4gICAgICAuLi50aGlzLmNhbGNTaXplKHdpZHRoLCBoZWlnaHQpLFxyXG4gICAgICBzaGVldDoge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdHMuc2hlZXQsXHJcbiAgICAgICAgLi4udGhpcy5jYWxjVGV4ZWxzKHdpZHRoLCBoZWlnaHQpXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvdmVyOiB7XHJcbiAgICAgICAgLi4udGhpcy5kZWZhdWx0cy5jb3ZlcixcclxuICAgICAgfSxcclxuICAgICAgcGFnZToge1xyXG4gICAgICAgIC4uLnRoaXMuZGVmYXVsdHMucGFnZSxcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNhbGNTaGVldHMocGFnZXMpIHtcclxuICAgIHJldHVybiB0aGlzLnNoZWV0cyA9IE1hdGguY2VpbChNYXRoLm1heCgwLCBwYWdlcy00KS8yKTtcclxuICB9XHJcblxyXG4gIGdldFNoZWV0cygpIHtcclxuICAgIHJldHVybiB0aGlzLnNoZWV0cztcclxuICB9XHJcblxyXG4gIGdldFByb3BzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlQ2FsbGJhY2soKSB7XHJcbiAgICByZXR1cm4gdGhpcy5iaW5kcy5wYWdlQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICByZWFkeSgpIHtcclxuICAgIGlmKHRoaXMub25SZWFkeSkge1xyXG4gICAgICB0aGlzLm9uUmVhZHkodGhpcy5nZXRQcm9wcygpLCB0aGlzLmdldFNoZWV0cygpLCB0aGlzLmdldFBhZ2VDYWxsYmFjaygpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Cb29rUHJvcHNCdWlsZGVyLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBzaGVldEJsb2NrIGZyb20gJy4uL21vZGVscy9zaGVldEJsb2NrJztcclxuaW1wb3J0IE1hdGhVdGlscyBmcm9tICdNYXRoVXRpbHMnO1xyXG5pbXBvcnQgVGhyZWVVdGlscyBmcm9tICdUaHJlZVV0aWxzJztcclxuLy8gaW1wb3J0IFRocmVlTWFya3VwIGZyb20gJy4vVGhyZWVNYXJrdXAnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hlZXRCbG9jayB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgcCwgZmlyc3QsIGxhc3QsIGFuZ2xlPTAsIHN0YXRlPSdjbG9zZWQnLCBoZWlnaHQ9MCkge1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIC4uLnAsXHJcbiAgICAgIGZpcnN0LFxyXG4gICAgICBsYXN0XHJcbiAgICB9O1xyXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLmdldFByb3BzKCk7XHJcblxyXG4gICAgY29uc3QgbG9hZGVkUG9pbnRzID0gdGhpcy5sb2FkUG9pbnRzKCk7XHJcbiAgICBPYmplY3Qua2V5cyhsb2FkZWRQb2ludHMpLm1hcCgoayk9PiB7XHJcbiAgICAgIHRoaXNba10gPSBsb2FkZWRQb2ludHNba11bcHJvcHMuc2hhcGVdIHx8IGxvYWRlZFBvaW50c1trXVswXTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucFNwbGluZSA9IG5ldyBUSFJFRS5TcGxpbmUoW10pO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8dGhpcy5pbnRlcnBvbGF0aW9uUG9pbnRzLnhbMF0ubGVuZ3RoOyArK2kpIHtcclxuICAgIFx0dGhpcy5wU3BsaW5lLnBvaW50cy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaVNwbGluZSA9IG5ldyBUSFJFRS5TcGxpbmUoW10pO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8c2hlZXRCbG9jay5yZXNYOyArK2kpIHtcclxuICAgIFx0dGhpcy5pU3BsaW5lLnBvaW50cy5wdXNoKG5ldyBUSFJFRS5WZWN0b3IzKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYVNwbGluZXMgPSBbXTtcclxuXHJcbiAgICAvL3RoaXMudGhyZWUgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuXHJcbiAgICB0aGlzLmdlb21ldHJ5ID0gc2hlZXRCbG9jay5nZW9tZXRyeS5jbG9uZSgpO1xyXG5cclxuICAgIHRoaXMucC5zaWRlRmFjZXMgPSBbe1xyXG4gICAgICAgIGZpcnN0OiAwLFxyXG4gICAgICAgIGxhc3Q6IHNoZWV0QmxvY2suZmFjZXNbMF1cclxuICAgICAgfSwge1xyXG4gICAgICAgIGZpcnN0OiBzaGVldEJsb2NrLmZhY2VzWzBdLFxyXG4gICAgICAgIGxhc3Q6IHNoZWV0QmxvY2suZmFjZXNbMV1cclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnNpZGVUZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoKTtcclxuICAgIHRoaXMuc2lkZVRleHR1cmUud3JhcFQgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcclxuICAgIHRoaXMuc2lkZVRleHR1cmUucmVwZWF0LnNldCgwLCBsYXN0LWZpcnN0KTtcclxuICAgIHRoaXMuc2lkZVRleHR1cmUuaW1hZ2UgPSBwcm9wcy5zaWRlVGV4dHVyZTtcclxuICAgIHRoaXMuc2lkZVRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7bWFwOiB0aGlzLnNpZGVUZXh0dXJlfSksXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHttYXA6IHRoaXMuc2lkZVRleHR1cmV9KSxcclxuICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe21hcDogdGhpcy5zaWRlVGV4dHVyZX0pLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7bWFwOiB0aGlzLnNpZGVUZXh0dXJlfSlcclxuICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICB0aGlzLnAuc2V0VGV4dHVyZSh0aGlzLm1hdGVyaWFsc1swXSwgMipmaXJzdCk7XHJcbiAgICB0aGlzLnAuc2V0VGV4dHVyZSh0aGlzLm1hdGVyaWFsc1sxXSwgMipsYXN0LTEpO1xyXG5cclxuICAgIHRoaXMubWVzaCA9IG5ldyBUSFJFRS5NZXNoKHRoaXMuZ2VvbWV0cnksIG5ldyBUSFJFRS5NZXNoRmFjZU1hdGVyaWFsKHRoaXMubWF0ZXJpYWxzKSk7XHJcbiAgICB0aGlzLm1lc2guY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgdGhpcy5tZXNoLnJlY2VpdmVTaGFkb3cgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMubWVzaC5mcnVzdHVtQ3VsbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvL3RoaXMudGhyZWUuYWRkKHRoaXMubWVzaCk7XHJcbiAgICB0aGlzLnRocmVlID0gdGhpcy5tZXNoO1xyXG4gICAgdGhpcy50aHJlZS51c2VyRGF0YS5zZWxmID0gdGhpcztcclxuXHJcbiAgICB0aGlzLm1hcmtlcnMgPSBbXTtcclxuICAgIGlmKHRoaXMucC5tYXJrZXIudXNlKSB7XHJcbiAgICAgIGNvbnN0IGw9dGhpcy5nZW9tZXRyeS52ZXJ0aWNlcy5sZW5ndGg7XHJcbiAgICAgIGxldCBpcztcclxuICAgICAgLy8gaXMgPSBbMCwgc2hlZXRCbG9jay5yZXNYLTEsIChzaGVldEJsb2NrLnJlc1otMSkqc2hlZXRCbG9jay5yZXNYLCBzaGVldEJsb2NrLnJlc1oqc2hlZXRCbG9jay5yZXNYLTFdO1xyXG4gICAgICBpcyA9IEFycmF5LmFwcGx5KDAsIEFycmF5KGwpKS5tYXAoKF8sIGkpPT4gaSk7XHJcblxyXG4gICAgICBmb3IobGV0IGkgb2YgaXMpIHtcclxuICAgICAgICBjb25zdCBtYXJrZXIgPSBUaHJlZVV0aWxzLmNyZWF0ZU1hcmtlcih0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW2ldLCBpPGwvMj8weEZGMDAwMDoweDAwRkYwMCwgdGhpcy5wLm1hcmtlci5zaXplKTtcclxuICAgICAgICB0aGlzLm1hcmtlcnMucHVzaCh7XHJcbiAgICAgICAgICBtYXJrZXIsXHJcbiAgICAgICAgICB2ZXJ0ZXg6IGlcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRocmVlLmFkZChtYXJrZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb3JuZXIgPSB7XHJcbiAgICAgIHVzZTogdHJ1ZSxcclxuICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICBtYXhEaXN0YW5jZTogMCxcclxuICAgICAgcG9pbnRzOiBbXSxcclxuICAgICAgT1o6IG5ldyBUSFJFRS5WZWN0b3IzKDAsMCwxKSxcclxuICAgICAgYXhpczogbmV3IFRIUkVFLlZlY3RvcjMoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuc2V0KDAsICdjbG9zZWQnLCBoZWlnaHQsIGZpcnN0LCBsYXN0KTsgLy8gY2FsY3VsYXRlIGNvcm5lciBwb2ludHNcclxuXHJcbiAgICB0aGlzLnNldChhbmdsZSwgc3RhdGUsIGhlaWdodCwgZmlyc3QsIGxhc3QpOyAvLyBpbml0IHBvc2l0aW9uXHJcblxyXG4gICAgLy8gaWYoIVNoZWV0QmxvY2subWFya3VwKSB7XHJcbiAgICAvLyAgIFNoZWV0QmxvY2subWFya3VwPXRydWU7XHJcbiAgICAvLyAgIHRoaXMubWFya3VwID0gbmV3IFRocmVlTWFya3VwKHRoaXMsIDAsIFt7XHJcbiAgICAvLyAgICAgeDogMCxcclxuICAgIC8vICAgICB5OiAwLFxyXG4gICAgLy8gICB9LCB7XHJcbiAgICAvLyAgICAgeDogMC41LFxyXG4gICAgLy8gICAgIHk6IDFcclxuICAgIC8vICAgfSwge1xyXG4gICAgLy8gICAgIHg6IDEsXHJcbiAgICAvLyAgICAgeTogMFxyXG4gICAgLy8gICB9XS5tYXAoKHApPT5uZXcgVEhSRUUuVmVjdG9yMihwLngsIHAueSkpLCB7fSk7XHJcbiAgICAvLyB9XHJcblxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGZvcihsZXQgbSBvZiB0aGlzLm1hdGVyaWFscykge1xyXG4gICAgICBpZihtLm1hcCkge1xyXG4gICAgICAgIG0ubWFwID0gbnVsbDtcclxuICAgICAgICBtLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBtLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLm1hdGVyaWFscztcclxuICAgIHRoaXMuZ2VvbWV0cnkuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2l6ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnAubGFzdC10aGlzLnAuZmlyc3Q7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wcygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnRoaXMucC5wYWdlLFxyXG4gICAgICBzaGVldHM6IHRoaXMucC5zaGVldHNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRUb3BDZXJuZXJzKCkge1xyXG4gICAgY29uc3Qgb2ZmID0gdGhpcy5hbmdsZT5NYXRoLlBJLzI/IHRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoLzI6IDA7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbb2ZmXSxcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3NoZWV0QmxvY2sucmVzWC0xK29mZl0sXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1soc2hlZXRCbG9jay5yZXNaLTEpKnNoZWV0QmxvY2sucmVzWCtvZmZdLFxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbc2hlZXRCbG9jay5yZXNaKnNoZWV0QmxvY2sucmVzWC0xK29mZl1cclxuICAgICAgXTtcclxuICB9XHJcblxyXG4gIGdldFRvcFNpemUoKSB7XHJcbiAgICAvLyBjb25zdCBsPXRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoLCBvZmYgPSB0aGlzLmFuZ2xlPk1hdGguUEkvMj8gbC8yOiAwLFxyXG4gICAgLy8gICB2MCA9IHRoaXMuZ2VvbWV0cnkudmVydGljZXNbb2ZmXSwgdjEgPSB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3NoZWV0QmxvY2sucmVzWipzaGVldEJsb2NrLnJlc1gtMStvZmZdO1xyXG4gICAgLy8gLy8gaXMgPSBbMCwgc2hlZXRCbG9jay5yZXNYLTEsIChzaGVldEJsb2NrLnJlc1otMSkqc2hlZXRCbG9jay5yZXNYLCBzaGVldEJsb2NrLnJlc1oqc2hlZXRCbG9jay5yZXNYLTFdO1xyXG4gICAgLy8gcmV0dXJuIHtcclxuICAgIC8vICAgd2lkdGg6IE1hdGguYWJzKHYxLngtdjAueCksXHJcbiAgICAvLyAgIGhlaWdodDogTWF0aC5hYnModjEuei12MC56KVxyXG4gICAgLy8gfTtcclxuICAgIGNvbnN0IHZzID0gdGhpcy5nZXRUb3BDZXJuZXJzKCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogdnNbMF0uZGlzdGFuY2VUbyh2c1sxXSksXHJcbiAgICAgIGhlaWdodDogdnNbMF0uZGlzdGFuY2VUbyh2c1syXSlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRUb3BXb3JsZFJvdGF0aW9uKHEpIHtcclxuICAgIHEueCA9IC1NYXRoLlBJLzI7XHJcbiAgICByZXR1cm4gcTtcclxuICB9XHJcblxyXG4gIGdldFRvcFdvcmxkUG9zaXRpb24odikge1xyXG4gICAgY29uc3QgbD10aGlzLmdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aCwgb2ZmID0gdGhpcy5hbmdsZT5NYXRoLlBJLzI/IGwvMjogMCwgdnMgPSBbXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tvZmZdLFxyXG4gICAgICAgIHRoaXMuZ2VvbWV0cnkudmVydGljZXNbc2hlZXRCbG9jay5yZXNYLTErb2ZmXSxcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzWyhzaGVldEJsb2NrLnJlc1otMSkqc2hlZXRCbG9jay5yZXNYK29mZl0sXHJcbiAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tzaGVldEJsb2NrLnJlc1oqc2hlZXRCbG9jay5yZXNYLTErb2ZmXVxyXG4gICAgICBdO1xyXG4gICAgdi5zZXQoMCwgMCwgMCk7XHJcbiAgICBmb3IobGV0IHZpIG9mIHZzKSB7XHJcbiAgICAgIHYueCArPSAwLjI1KnZpLng7XHJcbiAgICAgIHYueSArPSAwLjI1KnZpLnk7XHJcbiAgICAgIHYueiArPSAwLjI1KnZpLno7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRocmVlLmxvY2FsVG9Xb3JsZCh2KTtcclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuXHJcbiAgZ2V0SW50ZXJwb2xhdGlvblBvaW50cyhpbmRzLCBtb2QpIHtcclxuICAgIGNvbnN0IHBzID0ge3g6IFtdLCB5OiBbXX0sIEsgPSB0aGlzLmdldFByb3BzKCkud2F2ZTtcclxuICAgIGZvcihsZXQgaSBvZiBpbmRzKSB7XHJcbiAgICAgIHBzLngucHVzaChbLi4udGhpcy5pbnRlcnBvbGF0aW9uUG9pbnRzLnhbaV1dKTtcclxuICAgICAgcHMueS5wdXNoKH5tb2QuaW5kZXhPZihpKT8gdGhpcy5pbnRlcnBvbGF0aW9uUG9pbnRzLnlbaV0ubWFwKChuKT0+IEsqbik6IFsuLi50aGlzLmludGVycG9sYXRpb25Qb2ludHMueVtpXV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBzO1xyXG4gIH1cclxuXHJcbiAgc2V0KGFuZ2xlLCBzdGF0ZT10aGlzLnN0YXRlLCBoZWlnaHQ9dGhpcy5jb3JuZXIuaGVpZ2h0LCBmaXJzdD10aGlzLnAuZmlyc3QsIGxhc3Q9dGhpcy5wLmxhc3QpIHtcclxuICAgIGNvbnN0IFBJID0gTWF0aC5QSTtcclxuICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIGxldCBjbG9zZWRBbmdsZSwgYmluZGVyVHVybjtcclxuICAgIGlmKHR5cGVvZiBhbmdsZT09PSdvYmplY3QnKSB7XHJcbiAgICAgIHRoaXMuYW5nbGUgPSBhbmdsZS5vcGVuZWRBbmdsZTtcclxuICAgICAgY2xvc2VkQW5nbGUgPSBhbmdsZS5jbG9zZWRBbmdsZTtcclxuICAgICAgYmluZGVyVHVybiA9IGFuZ2xlLmJpbmRlclR1cm4+UEkvMj9QSS1hbmdsZS5iaW5kZXJUdXJuOmFuZ2xlLmJpbmRlclR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5hbmdsZSA9IGFuZ2xlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb3JuZXIuaGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgaWYodGhpcy5wLmZpcnN0IT09Zmlyc3QgfHwgdGhpcy5wLmxhc3QhPT1sYXN0KSB7XHJcbiAgICAgIHRoaXMuc2lkZVRleHR1cmUucmVwZWF0LnNldCgwLCBsYXN0LWZpcnN0KTtcclxuICAgICAgdGhpcy5zaWRlVGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIGlmKHRoaXMucC5maXJzdCE9PWZpcnN0KSB7XHJcbiAgICAgICAgdGhpcy5wLnNldFRleHR1cmUodGhpcy5tYXRlcmlhbHNbMF0sIDIqZmlyc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMucC5sYXN0IT09bGFzdCkge1xyXG4gICAgICAgIHRoaXMucC5zZXRUZXh0dXJlKHRoaXMubWF0ZXJpYWxzWzFdLCAyKmxhc3QtMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMucC5maXJzdCA9IGZpcnN0O1xyXG4gICAgdGhpcy5wLmxhc3QgPSBsYXN0O1xyXG4gICAgbGV0IHBvaW50cztcclxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5nZXRQcm9wcygpO1xyXG4gICAgaWYodGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcclxuICAgICAgcG9pbnRzID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMsIHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLnN0YXRlID09PSAnb3BlbmVkJykge1xyXG4gICAgICBpZihjbG9zZWRBbmdsZSE9PXVuZGVmaW5lZCAmJiBNYXRoLmFicyhjbG9zZWRBbmdsZS1QSS8yKT4xZS0yKSB7XHJcbiAgICAgICAgcG9pbnRzID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMuZmxhdEludGVycG9sYXRpb25JbmRlY2VzLCBbXSk7XHJcbiAgICAgICAgY29uc3QgcHMgPSB0aGlzLmdldFBvaW50c0F0QW5nbGUodGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMsIHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMpLCBjbG9zZWRBbmdsZT5QSS8yP1BJLWNsb3NlZEFuZ2xlOmNsb3NlZEFuZ2xlKTtcclxuICAgICAgICBwb2ludHMueCA9IFtwcy54LC4uLnBvaW50cy54XTtcclxuICAgICAgICBwb2ludHMueSA9IFtwcy55LC4uLnBvaW50cy55XTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcG9pbnRzID0gdGhpcy5nZXRJbnRlcnBvbGF0aW9uUG9pbnRzKHRoaXMub3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMsIHRoaXMuY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgaGwsIGhyLCBvZmZzZXQgPSAwLjUqcHJvcHMuc2hlZXRzKnByb3BzLmRlcHRoO1xyXG4gICAgaWYodGhpcy5zdGF0ZT09PSdjbG9zZWQnKSB7XHJcbiAgICAgIG9mZnNldCAtPSA3ZS02KnRoaXMucC5zY2FsZTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuYW5nbGU8PVBJLzIpIHtcclxuICAgICAgaGwgPSAocHJvcHMuc2hlZXRzLWZpcnN0KSpwcm9wcy5kZXB0aDtcclxuICAgICAgaHIgPSAocHJvcHMuc2hlZXRzLWxhc3QpKnByb3BzLmRlcHRoO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGhsID0gZmlyc3QqcHJvcHMuZGVwdGg7XHJcbiAgICAgIGhyID0gbGFzdCpwcm9wcy5kZXB0aDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbkFuZ2xlID0gdGhpcy5hbmdsZT5QSS8yP1BJLXRoaXMuYW5nbGU6dGhpcy5hbmdsZSwgaEFuZ2xlID0gdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCc/IGluQW5nbGU6IChiaW5kZXJUdXJuPT09dW5kZWZpbmVkPyBQSS8yOiBiaW5kZXJUdXJuKTtcclxuICAgIGNvbnN0IFtsZWZ0LCByaWdodF0gPSB0aGlzLmdldFBvaW50c0F0QW5nbGVBbmRIcyhwb2ludHMsIGluQW5nbGUsIGhBbmdsZSwgW2hsL3Byb3BzLndpZHRoLCBoci9wcm9wcy53aWR0aF0pO1xyXG4gICAgaWYodGhpcy5hbmdsZT5QSS8yKSB7XHJcbiAgICAgIHRoaXMuaW52ZXJzZShsZWZ0KTtcclxuICAgICAgdGhpcy5pbnZlcnNlKHJpZ2h0KTtcclxuICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0UG9pbnRzKGxlZnQsIHJpZ2h0LCBvZmZzZXQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UG9pbnRzKGxlZnQsIHJpZ2h0LCBvZmZzZXQpIHtcclxuICAgIGNvbnN0IHAgPSB0aGlzLmdldFByb3BzKCk7XHJcbiAgICBsZXQgaSA9IDA7XHJcblxyXG4gICAgY29uc3QgeXMgPSBbcmlnaHQsIGxlZnRdO1xyXG4gICAgZm9yKGxldCB5ID0gMDsgeTxzaGVldEJsb2NrLnJlc1k7ICsreSkge1xyXG4gICAgICBmb3IobGV0IHogPSAwOyB6PHNoZWV0QmxvY2sucmVzWjsgKyt6KSB7XHJcbiAgICAgICAgZm9yKGxldCB4ID0gMDsgeDxzaGVldEJsb2NrLnJlc1g7ICsreCkge1xyXG4gICAgICAgICAgdGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tpKytdLnNldChcclxuICAgICAgICAgICAgeXNbeV0ueFt4XSpwLndpZHRoK29mZnNldCxcclxuICAgICAgICAgICAgeXNbeV0ueVt4XSpwLndpZHRoLFxyXG4gICAgICAgICAgICB6KnAuaGVpZ2h0LyhzaGVldEJsb2NrLnJlc1otMSktMC41KnAuaGVpZ2h0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoaSE9PXRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybignc2V0UG9pbnRzOiBiYWQgbWFwcGluZyEnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmNvcm5lci51c2UgJiYgIXRoaXMuY29ybmVyLnBvaW50cy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgcGxhbmUgPSBuZXcgVEhSRUUuUGxhbmUoKSwgbm9ybWFsID0gcGxhbmUubm9ybWFsLCBwbGFuZU9mZnNldCA9ICgxLXRoaXMuZ2V0UHJvcHMoKS5mbGV4aWJsZUNvcm5lcikqTWF0aC5taW4ocC53aWR0aCwgcC5oZWlnaHQpLCBwcm9qID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgICAgcGxhbmUuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQobmV3IFRIUkVFLlZlY3RvcjMoLTEsMCwtMSkubm9ybWFsaXplKCksIG5ldyBUSFJFRS5WZWN0b3IzKHBsYW5lT2Zmc2V0K29mZnNldCwgMCwgMC41KnAuaGVpZ2h0KSk7XHJcbiAgICAgIGZvcihsZXQgaT0wLCBsPXRoaXMuZ2VvbWV0cnkudmVydGljZXMubGVuZ3RoO2k8bDsrK2kpIHtcclxuICAgICAgICBwbGFuZS5wcm9qZWN0UG9pbnQodGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tpXSwgcHJvaik7XHJcbiAgICAgICAgcHJvai5zdWIodGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1tpXSk7XHJcbiAgICAgICAgaWYocHJvai54Km5vcm1hbC54K3Byb2oueSpub3JtYWwueStwcm9qLnoqbm9ybWFsLno+MCkge1xyXG4gICAgICAgICAgY29uc3QgZCA9IHByb2oubGVuZ3RoKCkvcGxhbmVPZmZzZXQ7XHJcbiAgICAgICAgICB0aGlzLmNvcm5lci5tYXhEaXN0YW5jZSA9IE1hdGgubWF4KHRoaXMuY29ybmVyLm1heERpc3RhbmNlLCBkKTtcclxuICAgICAgICAgIHRoaXMuY29ybmVyLnBvaW50cy5wdXNoKHt2ZXJ0ZXg6IGksIGRpc3RhbmNlOiBkfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYodGhpcy5jb3JuZXIudXNlICYmIE1hdGguYWJzKHRoaXMuY29ybmVyLmhlaWdodCk+MWUtMykge1xyXG4gICAgICBjb25zdCBkMkFuZ2xlID0gKGQpPT4gcC5jb3JuZXJEZXZpYXRpb24qdGhpcy5jb3JuZXIuaGVpZ2h0LygxK01hdGguZXhwKC1wLmJlbmRpbmcqKGQtMC41KnRoaXMuY29ybmVyLm1heERpc3RhbmNlKSkpO1xyXG4gICAgICB0aGlzLmNvcm5lci5heGlzLnNldCgtMSwwLDEpLm5vcm1hbGl6ZSgpO1xyXG4gICAgICB0aGlzLmNvcm5lci5heGlzLmFwcGx5QXhpc0FuZ2xlKHRoaXMuY29ybmVyLk9aLCB0aGlzLmFuZ2xlKTtcclxuICAgICAgZm9yKGxldCBwb2ludCBvZiB0aGlzLmNvcm5lci5wb2ludHMpIHtcclxuICAgICAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzW3BvaW50LnZlcnRleF0uYXBwbHlBeGlzQW5nbGUodGhpcy5jb3JuZXIuYXhpcywgZDJBbmdsZShwb2ludC5kaXN0YW5jZSkpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IG0gb2YgdGhpcy5tYXJrZXJzKSB7XHJcbiAgICAgIG0ubWFya2VyLnBvc2l0aW9uLmNvcHkodGhpcy5nZW9tZXRyeS52ZXJ0aWNlc1ttLnZlcnRleF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2VvbWV0cnkuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgIC8vdGhpcy5nZW9tZXRyeS5jb21wdXRlRmFjZU5vcm1hbHMoKTtcclxuICAgIHRoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKCk7XHJcbiAgICAvL3RoaXMuZ2VvbWV0cnkuY29tcHV0ZUJvdW5kaW5nQm94KCk7XHJcbiAgICB0aGlzLmdlb21ldHJ5LnZlcnRpY2VzTmVlZFVwZGF0ZSA9IHRydWU7XHJcblxyXG4gICAgaWYodGhpcy5tYXJrdXApIHtcclxuICAgICAgdGhpcy5tYXJrdXAuY29tcHV0ZVZlcnRpY2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnZlcnNlKHBzKSB7XHJcbiAgICBmb3IobGV0IGkgPSAwO2k8cHMueC5sZW5ndGg7ICsraSkge1xyXG4gICAgICBwcy54W2ldPS1wcy54W2ldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9pbnRzQXRIcyhwcywgYW5nbGUsIGhzKSB7XHJcbiAgICBjb25zdCBOID0gMTAwMDtcclxuICAgIE1hdGhVdGlscy5zZXRTcGxpbmVQb2ludHModGhpcy5wU3BsaW5lLCBwcyk7XHJcbiAgICBsZXQgYmwgPSBNYXRoVXRpbHMuc3BsaXRTcGxpbmUodGhpcy5wU3BsaW5lLCBOKSwgcj1bXTtcclxuICAgIHtcclxuICAgICAgY29uc3QgcDEgPSB7Li4udGhpcy5wU3BsaW5lLmdldFBvaW50KChOLTEpL04pfSwgcDIgPSB7Li4udGhpcy5wU3BsaW5lLmdldFBvaW50KDEpfSxcclxuICAgICAgICBkcCA9IHt4OiBwMi54LXAxLngsIHk6IHAyLnktcDEueX0sIGxuID0gTWF0aC5zcXJ0KGRwLngqZHAueCtkcC55KmRwLnkpLFxyXG4gICAgICAgIHNwID0gdGhpcy5wU3BsaW5lLnBvaW50c1t0aGlzLnBTcGxpbmUucG9pbnRzLmxlbmd0aC0xXTtcclxuICAgICAgc3Auc2V0KHNwLngrMC4xKmRwLngvbG4sIHNwLnkrMC4xKmRwLnkvbG4sIDApO1xyXG4gICAgICBibCA9IE1hdGhVdGlscy5zcGxpdFNwbGluZSh0aGlzLnBTcGxpbmUsIE4pO1xyXG4gICAgfVxyXG4gICAgYmwubHMucHVzaCgxZTcpO1xyXG4gICAgTWF0aFV0aWxzLm1hcGwyTChibC5scywgYmwubGVuLCBzaGVldEJsb2NrLnJlc1gsIChpKT0+IHtcclxuICAgICAgZm9yKGxldCBqPTA7IGo8aHMubGVuZ3RoOyArK2opIHtcclxuICAgICAgICBpZighaSkge1xyXG4gICAgICAgICAgcltqXSA9IHt4OiBbLWhzW2pdKk1hdGguc2luKGFuZ2xlKV0sIHk6IFtoc1tqXSpNYXRoLmNvcyhhbmdsZSldfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBwMCA9IHsuLi50aGlzLnBTcGxpbmUuZ2V0UG9pbnQoKGktMSkvTil9LFxyXG4gICAgICAgICAgICAgICAgcDEgPSB0aGlzLnBTcGxpbmUuZ2V0UG9pbnQoaS9OKSxcclxuICAgICAgICAgICAgICAgIHg9LShwMS55LXAwLnkpLCB5PShwMS54LXAwLngpLCBsPU1hdGguc3FydCh4KngreSp5KTtcclxuICAgICAgICAgIHJbal0ueC5wdXNoKHAxLngreC9sKmhzW2pdKTtcclxuICAgICAgICAgIHJbal0ueS5wdXNoKHAxLnkreS9sKmhzW2pdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG5wcz1bXTtcclxuICAgIGZvcihsZXQgaj0wOyBqPGhzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgIG5wc1tqXT17eDpbXSx5OltdfTtcclxuICAgICAgTWF0aFV0aWxzLnNldFNwbGluZVBvaW50cyh0aGlzLmlTcGxpbmUsIHJbal0pO1xyXG4gICAgICBjb25zdCBsID0gTWF0aFV0aWxzLnNwbGl0U3BsaW5lKHRoaXMuaVNwbGluZSwgTik7XHJcbiAgICAgIGwubHMucHVzaCgxZTcpO1xyXG4gICAgICBNYXRoVXRpbHMubWFwbDJMKGwubHMsIDEsIHNoZWV0QmxvY2sucmVzWCwgKGkpPT4ge1xyXG4gICAgICAgIGNvbnN0IHAgPSB0aGlzLmlTcGxpbmUuZ2V0UG9pbnQoaS9OKTtcclxuICAgICAgICBucHNbal0ueC5wdXNoKHAueCk7XHJcbiAgICAgICAgbnBzW2pdLnkucHVzaChwLnkpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBucHM7XHJcbiAgfVxyXG5cclxuICBnZXRQb2ludHNBdEFuZ2xlQW5kSHMocG9pbnRzLCBhbmdsZSwgaEFuZ2xlLCBocykge1xyXG4gICAgY29uc3QgcHMgPSB0aGlzLmdldFBvaW50c0F0QW5nbGUocG9pbnRzLCBhbmdsZSk7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRQb2ludHNBdEhzKHBzLCBoQW5nbGUsIGhzKTtcclxuICB9XHJcblxyXG4gIGdldFBvaW50c0F0QW5nbGUocG9pbnRzLCBhbmdsZSkge1xyXG4gICAgY29uc3QgcHM9e3g6IFtdLCB5OltdfSwgYW5nbGVzPVtdO1xyXG4gICAgYW5nbGUvPU1hdGguUEkvMjtcclxuICAgIGZvcihsZXQgaiA9IDA7IGo8cG9pbnRzLngubGVuZ3RoOyArK2opIHtcclxuICAgICAgYW5nbGVzLnB1c2goai8ocG9pbnRzLngubGVuZ3RoLTEpKTtcclxuICAgIH1cclxuICAgIGZvcihsZXQgaSA9IDA7IGk8cG9pbnRzLnhbMF0ubGVuZ3RoOyArK2kpIHtcclxuICAgICAgY29uc3QgeHBzID0gW10sIHlwcyA9IFtdO1xyXG4gICAgICBmb3IobGV0IGogPSAwOyBqPHBvaW50cy54Lmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgeHBzLnB1c2gocG9pbnRzLnhbal1baV0pO1xyXG4gICAgICAgIHlwcy5wdXNoKHBvaW50cy55W2pdW2ldKTtcclxuICAgICAgfVxyXG4gICAgICBwcy54LnB1c2godGhpcy5pbnRlcnBvbGF0ZShhbmdsZXMseHBzLGFuZ2xlKSk7XHJcbiAgICAgIHBzLnkucHVzaCh0aGlzLmludGVycG9sYXRlKGFuZ2xlcyx5cHMsYW5nbGUpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcztcclxuICB9XHJcblxyXG4gIGludGVycG9sYXRlKHgseSx4aSkge1xyXG4gICAgaWYoIXRoaXMuYVNwbGluZXNbeC5sZW5ndGhdKSB7XHJcbiAgICAgIHRoaXMuYVNwbGluZXNbeC5sZW5ndGhdID0gbmV3IFRIUkVFLlNwbGluZShbXSk7XHJcbiAgICAgIGNvbnN0IHBzID0gdGhpcy5hU3BsaW5lc1t4Lmxlbmd0aF0ucG9pbnRzO1xyXG4gICAgICBmb3IobGV0IGk9MDtpPHgubGVuZ3RoOysraSkge1xyXG4gICAgICAgIHBzLnB1c2gobmV3IFRIUkVFLlZlY3RvcjMoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IHNwbGluZSA9IHRoaXMuYVNwbGluZXNbeC5sZW5ndGhdO1xyXG4gICAgZm9yKGxldCBpPTA7aTx4Lmxlbmd0aDsrK2kpIHtcclxuICAgICAgc3BsaW5lLnBvaW50c1tpXS5zZXQoeFtpXSwgeVtpXSwgMCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3BsaW5lLmdldFBvaW50KE1hdGgubWluKDEsIE1hdGgubWF4KHhpLCAwKSkpLnk7XHJcbiAgfVxyXG5cclxuICBsb2FkUG9pbnRzKCkge1xyXG4gICAgY29uc3QgeD1bXSx5PVtdO1xyXG4gICAgZm9yKGxldCByIG9mIFswLCAwLjI4NzcsIDAuNjM0NywgMC44MTc0LCAxLjAwMDBdKSB7XHJcbiAgICAgIHgucHVzaChyKk1hdGguY29zKDAuOSpNYXRoLlBJLzQpKTtcclxuICAgICAgeS5wdXNoKHIqTWF0aC5zaW4oMC45Kk1hdGguUEkvNCkpXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFsyLDMsNF0sXHJcbiAgICAgIFsyLDMsNCw1LDZdXHJcbiAgICBdLFxyXG4gICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFswLDEsMl0sXHJcbiAgICAgIFswLDEsMl1cclxuICAgIF0sXHJcbiAgICBmbGF0SW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFs1LDRdLFxyXG4gICAgICBbNyw2XVxyXG4gICAgXSxcclxuICAgIGludGVycG9sYXRpb25Qb2ludHMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICB4OiBbXHJcbiAgICAgICAgICBbMCwwLjI4NzcsMC42MzQ3LDAuODE3NCwxLjAwMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjg2LDAuNjMyLDAuODE1LDAuOTk3XSxcclxuICAgICAgICAgIFswLjAwMCwwLjI3OSwwLjYyMywwLjgwNiwwLjk4OF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4xMjYsMC40MTEsMC41OTMsMC43NzRdLFxyXG4gICAgICAgICAgWzAsMCwwLDAsMF0sXHJcbiAgICAgICAgICB4XHJcbiAgICAgICAgXSxcclxuICAgICAgICB5OiBbXHJcbiAgICAgICAgICBbMCwwLDAsMCwwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjAzMCwwLjAxMCwwLjAwMiwwLjAwMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4wNjAsMC4wMTcsMC4wMDQsMC4wMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjU5LDAuNDQwLDAuNDQ2LDAuNDI5XSxcclxuICAgICAgICAgIFswLCAwLjI4NzcsIDAuNjM0NywgMC44MTc0LCAxLjAwMDBdLFxyXG4gICAgICAgICAgeVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHg6IFtcclxuICAgICAgICAgIFswLDAuMjg3NywwLjYzNDcsMC44MTc0LDEuMDAwMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4yODYsMC42MzIsMC44MTUsMC45OTddLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjc5LDAuNjIzLDAuODA2LDAuOTg4XSxcclxuICAgICAgICAgIFswLjAwMCwwLjIzMywwLjU2MywwLjc0NiwwLjkyN10sXHJcbiAgICAgICAgICBbMC4wMDAsMC4xNDQsMC40MzMsMC42MTMsMC43OTZdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMDcwLDAuMjg4LDAuNDU1LDAuNjI2XSxcclxuICAgICAgICAgIFswLDAsMCwwLDBdLFxyXG4gICAgICAgICAgeFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgeTogW1xyXG4gICAgICAgICAgWzAsMCwwLDAsMF0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4wMzAsMC4wMTAsMC4wMDIsMC4wMDBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMDYwLDAuMDE3LDAuMDA0LDAuMDAwXSxcclxuICAgICAgICAgIFswLjAwMCwwLjE2OCwwLjI2OSwwLjI3MCwwLjI1NV0sXHJcbiAgICAgICAgICBbMC4wMDAsMC4yNDUsMC40MzUsMC40NTgsMC40NjBdLFxyXG4gICAgICAgICAgWzAuMDAwLDAuMjc4LDAuNTQ0LDAuNjE0LDAuNjczXSxcclxuICAgICAgICAgIFswLCAwLjI4NzcsIDAuNjM0NywgMC44MTc0LCAxLjAwMDBdLFxyXG4gICAgICAgICAgeVxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpbnRlcnBvbGF0aW9uUG9pbnRzLFxyXG4gICAgICBvcGVuZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyxcclxuICAgICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMsXHJcbiAgICAgIGZsYXRJbnRlcnBvbGF0aW9uSW5kZWNlc1xyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9TaGVldEJsb2NrLmpzIiwiXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9wcygpIHtcclxuICAvLyBjb25zdCBwcm9wcyA9IHtcclxuICAvLyAgIGhlaWdodCxcclxuICAvLyAgIHdpZHRoLFxyXG4gIC8vICAgZ3Jhdml0eSxcclxuICAvLyAgIGluamVjdG9yLFxyXG4gIC8vICAgY2FjaGVkUGFnZXMsXHJcbiAgLy8gICByZW5kZXJJbmFjdGl2ZVBhZ2VzLFxyXG4gIC8vICAgcmVuZGVyV2hpbGVGbGlwcGluZyxcclxuICAvLyAgIHBhZ2VzRm9yUHJlZGljdGluZyxcclxuICAvLyAgIHByZWxvYWRQYWdlcyxcclxuICAvLyAgIHNoZWV0OiB7XHJcbiAgLy8gICAgIHN0YXJ0VmVsb2NpdHksXHJcbiAgLy8gICAgIGNvcm5lckRldmlhdGlvbixcclxuICAvLyAgICAgZmxleGliaWxpdHksXHJcbiAgLy8gICAgIGZsZXhpYmxlQ29ybmVyLFxyXG4gIC8vICAgICBiZW5kaW5nLFxyXG4gIC8vICAgICB3YXZlLFxyXG4gIC8vICAgICBzaGFwZSxcclxuICAvLyAgICAgd2lkdGhUZXhlbHMsXHJcbiAgLy8gICAgIGhlaWdodFRleGVscyxcclxuICAvLyAgICAgY29sb3IsXHJcbiAgLy8gICAgIHNpZGVUZXh0dXJlXHJcbiAgLy8gICB9LFxyXG4gIC8vICAgY292ZXI6IHtcclxuICAvLyAgICAgLi4uc2hlZXQsXHJcbiAgLy8gICAgIHBhZGRpbmcsXHJcbiAgLy8gICAgIGJpbmRlclRleHR1cmUsXHJcbiAgLy8gICAgIGRlcHRoLFxyXG4gIC8vICAgICBtYXNzXHJcbiAgLy8gICB9LFxyXG4gIC8vICAgcGFnZToge1xyXG4gIC8vICAgICAuLi5zaGVldCxcclxuICAvLyAgICAgZGVwdGgsXHJcbiAgLy8gICAgIG1hc3NcclxuICAvLyAgIH1cclxuICAvLyB9O1xyXG5cclxuICByZXR1cm4ge1xyXG4gICAgaGVpZ2h0OiAwLjI5NyxcclxuICAgIHdpZHRoOiAwLjIxLFxyXG4gICAgZ3Jhdml0eTogMSxcclxuICAgIGNhY2hlZFBhZ2VzOiA1MCxcclxuICAgIHJlbmRlckluYWN0aXZlUGFnZXM6IHRydWUsXHJcbiAgICByZW5kZXJJbmFjdGl2ZVBhZ2VzT25Nb2JpbGU6IGZhbHNlLFxyXG4gICAgcmVuZGVyV2hpbGVGbGlwcGluZzogZmFsc2UsXHJcbiAgICBwYWdlc0ZvclByZWRpY3Rpbmc6IDUsXHJcbiAgICBwcmVsb2FkUGFnZXM6IDUsXHJcbiAgICBydGw6IGZhbHNlLFxyXG4gICAgc2hlZXQ6IHtcclxuICAgICAgc3RhcnRWZWxvY2l0eTogMC45LFxyXG4gICAgICBjb3JuZXJEZXZpYXRpb246IDAuMjUsXHJcbiAgICAgIGZsZXhpYmlsaXR5OiAxMCxcclxuICAgICAgZmxleGlibGVDb3JuZXI6IDAuNSxcclxuICAgICAgYmVuZGluZzogMTEsXHJcbiAgICAgIHdhdmU6IDAuNSxcclxuICAgICAgc2hhcGU6IDAsXHJcbiAgICAgIHdpZHRoVGV4ZWxzOiA1KjIxMCxcclxuICAgICAgaGVpZ2h0VGV4ZWxzOiA1KjI5NyxcclxuICAgICAgY29sb3I6IDB4RkZGRkZGXHJcbiAgICB9LFxyXG4gICAgY292ZXI6IHtcclxuICAgICAgYmluZGVyVGV4dHVyZTogJycsXHJcbiAgICAgIGRlcHRoOiAwLjAwMDMsXHJcbiAgICAgIHBhZGRpbmc6IDAsXHJcbiAgICAgIG1hc3M6IDAuMDAzXHJcbiAgICB9LFxyXG4gICAgcGFnZToge1xyXG4gICAgICBkZXB0aDogMC4wMDAxLFxyXG4gICAgICBtYXNzOiAwLjAwMVxyXG4gICAgfSxcclxuICAgIGNzc0xheWVyUHJvcHM6IHtcclxuICAgICAgd2lkdGg6IDEwMjRcclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wcm9wcy9ib29rLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5USFJFRS5DU1MzRE9iamVjdCA9IGNsYXNzIENTUzNET2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0Qge1xyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQ9dW5kZWZpbmVkKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgXHJcbiAgICBpZihlbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuc2V0KGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0KGVsZW1lbnQpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgXHR0aGlzLmVsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG5cclxuICBcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncmVtb3ZlZCcsIGZ1bmN0aW9uKCkge1xyXG4gIFx0XHRpZiAodGhpcy5lbGVtZW50LnBhcmVudE5vZGUgIT09IG51bGwpIHtcclxuICBcdFx0XHR0aGlzLmVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQpO1xyXG4gIFx0XHR9XHJcbiAgXHR9KTtcclxuICB9XHJcbn07XHJcblxyXG5USFJFRS5DU1MzRFNwcml0ZSA9IGNsYXNzIENTUzNEU3ByaXRlIGV4dGVuZHMgVEhSRUUuQ1NTM0RPYmplY3Qge1xyXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQpO1xyXG4gIH1cclxufTtcclxuXHJcblRIUkVFLkNTUzNEUmVuZGVyZXIgPSBjbGFzcyBDU1MzRFJlbmRlcmVyIHtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuXHJcbiAgXHR2YXIgX3dpZHRoLCBfaGVpZ2h0O1xyXG4gIFx0dmFyIF93aWR0aEhhbGYsIF9oZWlnaHRIYWxmO1xyXG5cclxuICBcdHZhciBtYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xyXG5cclxuICBcdHZhciBjYWNoZSA9IHtcclxuICBcdFx0Y2FtZXJhOiB7IGZvdjogMCwgc3R5bGU6ICcnIH0sXHJcbiAgXHRcdG9iamVjdHM6IHt9XHJcbiAgXHR9O1xyXG5cclxuICBcdHZhciBkb21FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2RpdicpO1xyXG4gIFx0ZG9tRWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xyXG5cclxuICBcdHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XHJcblxyXG4gIFx0dmFyIGNhbWVyYUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnZGl2Jyk7XHJcblxyXG4gIFx0Y2FtZXJhRWxlbWVudC5zdHlsZS5XZWJraXRUcmFuc2Zvcm1TdHlsZSA9ICdwcmVzZXJ2ZS0zZCc7XHJcbiAgXHRjYW1lcmFFbGVtZW50LnN0eWxlLk1velRyYW5zZm9ybVN0eWxlID0gJ3ByZXNlcnZlLTNkJztcclxuICBcdGNhbWVyYUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtU3R5bGUgPSAncHJlc2VydmUtM2QnO1xyXG5cclxuICBcdGRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNhbWVyYUVsZW1lbnQpO1xyXG5cclxuICBcdHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KCBuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuXHJcbiAgXHR0aGlzLnNldENsZWFyQ29sb3IgPSBmdW5jdGlvbiAoKSB7fTtcclxuXHJcbiAgXHR0aGlzLmdldFNpemUgPSBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdHdpZHRoOiBfd2lkdGgsXHJcbiAgXHRcdFx0aGVpZ2h0OiBfaGVpZ2h0XHJcbiAgXHRcdH07XHJcblxyXG4gIFx0fTtcclxuXHJcbiAgXHR0aGlzLnNldFNpemUgPSBmdW5jdGlvbih3aWR0aCwgaGVpZ2h0KSB7XHJcblxyXG4gIFx0XHRfd2lkdGggPSB3aWR0aDtcclxuICBcdFx0X2hlaWdodCA9IGhlaWdodDtcclxuICBcdFx0X3dpZHRoSGFsZiA9IF93aWR0aCAvIDI7XHJcbiAgXHRcdF9oZWlnaHRIYWxmID0gX2hlaWdodCAvIDI7XHJcblxyXG4gIFx0XHRkb21FbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gIFx0XHRkb21FbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcblxyXG4gIFx0XHRjYW1lcmFFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xyXG4gIFx0XHRjYW1lcmFFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XHJcblxyXG4gIFx0fTtcclxuXHJcbiAgXHRmdW5jdGlvbiBlcHNpbG9uKCB2YWx1ZSkge1xyXG5cclxuICBcdFx0cmV0dXJuIE1hdGguYWJzKCB2YWx1ZSkgPCAxZS0xMCA/IDAgOiB2YWx1ZTtcclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gZ2V0Q2FtZXJhQ1NTTWF0cml4KCBtYXRyaXgpIHtcclxuXHJcbiAgXHRcdHZhciBlbGVtZW50cyA9IG1hdHJpeC5lbGVtZW50cztcclxuXHJcbiAgXHRcdHJldHVybiAnbWF0cml4M2QoJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDAgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDEgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAyIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMyBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDUgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyA2IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgNyBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDggXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDkgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxMCBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDExIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTIgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDEzIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxNSBdKSArXHJcbiAgXHRcdCcpJztcclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gZ2V0T2JqZWN0Q1NTTWF0cml4KCBtYXRyaXgsIGNhbWVyYUNTU01hdHJpeCkge1xyXG5cclxuICBcdFx0dmFyIGVsZW1lbnRzID0gbWF0cml4LmVsZW1lbnRzO1xyXG4gIFx0XHR2YXIgbWF0cml4M2QgPSAnbWF0cml4M2QoJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDAgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMiBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDMgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDUgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDYgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIC0gZWxlbWVudHNbIDcgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyA4IF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgOSBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDEwIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTEgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxMiBdKSArICcsJyArXHJcbiAgXHRcdFx0ZXBzaWxvbiggZWxlbWVudHNbIDEzIF0pICsgJywnICtcclxuICBcdFx0XHRlcHNpbG9uKCBlbGVtZW50c1sgMTQgXSkgKyAnLCcgK1xyXG4gIFx0XHRcdGVwc2lsb24oIGVsZW1lbnRzWyAxNSBdKSArXHJcbiAgXHRcdCcpJztcclxuXHJcbiAgXHRcdGlmKGlzSUUpIHtcclxuXHJcbiAgXHRcdFx0cmV0dXJuICd0cmFuc2xhdGUoLTUwJSwtNTAlKScgK1xyXG4gIFx0XHRcdFx0J3RyYW5zbGF0ZSgnICsgX3dpZHRoSGFsZiArICdweCwnICsgX2hlaWdodEhhbGYgKyAncHgpJyArXHJcbiAgXHRcdFx0XHRjYW1lcmFDU1NNYXRyaXggK1xyXG4gIFx0XHRcdFx0bWF0cml4M2Q7XHJcblxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gJ3RyYW5zbGF0ZSgtNTAlLC01MCUpJyArIG1hdHJpeDNkO1xyXG5cclxuICBcdH1cclxuXHJcbiAgXHRmdW5jdGlvbiByZW5kZXJPYmplY3QoIG9iamVjdCwgY2FtZXJhLCBjYW1lcmFDU1NNYXRyaXgpIHtcclxuXHJcbiAgXHRcdGlmKG9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLkNTUzNET2JqZWN0KSB7XHJcblxyXG4gIFx0XHRcdHZhciBzdHlsZTtcclxuXHJcbiAgXHRcdFx0aWYob2JqZWN0IGluc3RhbmNlb2YgVEhSRUUuQ1NTM0RTcHJpdGUpIHtcclxuICBcdFx0XHRcdG1hdHJpeC5jb3B5KCBjYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcclxuICBcdFx0XHRcdG1hdHJpeC50cmFuc3Bvc2UoKTtcclxuICBcdFx0XHRcdG1hdHJpeC5jb3B5UG9zaXRpb24oIG9iamVjdC5tYXRyaXhXb3JsZCk7XHJcbiAgXHRcdFx0XHRtYXRyaXguc2NhbGUoIG9iamVjdC5zY2FsZSk7XHJcblxyXG4gIFx0XHRcdFx0bWF0cml4LmVsZW1lbnRzWyAzIF0gPSAwO1xyXG4gIFx0XHRcdFx0bWF0cml4LmVsZW1lbnRzWyA3IF0gPSAwO1xyXG4gIFx0XHRcdFx0bWF0cml4LmVsZW1lbnRzWyAxMSBdID0gMDtcclxuICBcdFx0XHRcdG1hdHJpeC5lbGVtZW50c1sgMTUgXSA9IDE7XHJcblxyXG4gIFx0XHRcdFx0c3R5bGUgPSBnZXRPYmplY3RDU1NNYXRyaXgoIG1hdHJpeCwgY2FtZXJhQ1NTTWF0cml4KTtcclxuXHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuXHJcbiAgXHRcdFx0XHRzdHlsZSA9IGdldE9iamVjdENTU01hdHJpeCggb2JqZWN0Lm1hdHJpeFdvcmxkLCBjYW1lcmFDU1NNYXRyaXgpO1xyXG5cclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHZhciBlbGVtZW50ID0gb2JqZWN0LmVsZW1lbnQ7XHJcbiAgXHRcdFx0dmFyIGNhY2hlZFN0eWxlID0gY2FjaGUub2JqZWN0c1sgb2JqZWN0LmlkIF0gJiYgY2FjaGUub2JqZWN0c1sgb2JqZWN0LmlkIF0uc3R5bGU7XHJcblxyXG4gIFx0XHRcdGlmKGNhY2hlZFN0eWxlID09PSB1bmRlZmluZWQgfHwgY2FjaGVkU3R5bGUgIT09IHN0eWxlKSB7XHJcbiAgXHRcdFx0XHRlbGVtZW50LnN0eWxlLldlYmtpdFRyYW5zZm9ybSA9IHN0eWxlO1xyXG4gIFx0XHRcdFx0ZWxlbWVudC5zdHlsZS5Nb3pUcmFuc2Zvcm0gPSBzdHlsZTtcclxuICBcdFx0XHRcdGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gc3R5bGU7XHJcblxyXG4gIFx0XHRcdFx0Y2FjaGUub2JqZWN0c1sgb2JqZWN0LmlkIF0gPSB7IHN0eWxlOiBzdHlsZSB9O1xyXG4gIFx0XHRcdFx0aWYoaXNJRSkge1xyXG4gIFx0XHRcdFx0XHRjYWNoZS5vYmplY3RzWyBvYmplY3QuaWQgXS5kaXN0YW5jZVRvQ2FtZXJhU3F1YXJlZCA9IGdldERpc3RhbmNlVG9TcXVhcmVkKCBjYW1lcmEsIG9iamVjdCk7XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRpZihlbGVtZW50LnBhcmVudE5vZGUgIT09IGNhbWVyYUVsZW1lbnQpIHtcclxuICBcdFx0XHRcdGNhbWVyYUVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsZW1lbnQpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0Zm9yKHZhciBpID0gMCwgbCA9IG9iamVjdC5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpICsrKSB7XHJcblxyXG4gIFx0XHRcdHJlbmRlck9iamVjdCggb2JqZWN0LmNoaWxkcmVuWyBpIF0sIGNhbWVyYSwgY2FtZXJhQ1NTTWF0cml4KTtcclxuXHJcbiAgXHRcdH1cclxuXHJcbiAgXHR9XHJcblxyXG4gIFx0dmFyIGdldERpc3RhbmNlVG9TcXVhcmVkID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICBcdFx0dmFyIGEgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0XHR2YXIgYiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24ob2JqZWN0MSwgb2JqZWN0Mikge1xyXG5cclxuICBcdFx0XHRhLnNldEZyb21NYXRyaXhQb3NpdGlvbiggb2JqZWN0MS5tYXRyaXhXb3JsZCk7XHJcbiAgXHRcdFx0Yi5zZXRGcm9tTWF0cml4UG9zaXRpb24oIG9iamVjdDIubWF0cml4V29ybGQpO1xyXG5cclxuICBcdFx0XHRyZXR1cm4gYS5kaXN0YW5jZVRvU3F1YXJlZCggYik7XHJcblxyXG4gIFx0XHR9O1xyXG5cclxuICBcdH0oKTtcclxuXHJcbiAgXHRmdW5jdGlvbiB6T3JkZXIoIHNjZW5lKSB7XHJcblxyXG4gIFx0XHR2YXIgb3JkZXIgPSBPYmplY3Qua2V5cyggY2FjaGUub2JqZWN0cykuc29ydCggZnVuY3Rpb24oYSwgYikge1xyXG5cclxuICBcdFx0XHRyZXR1cm4gY2FjaGUub2JqZWN0c1sgYSBdLmRpc3RhbmNlVG9DYW1lcmFTcXVhcmVkIC0gY2FjaGUub2JqZWN0c1sgYiBdLmRpc3RhbmNlVG9DYW1lcmFTcXVhcmVkO1xyXG5cclxuICBcdFx0fSk7XHJcbiAgXHRcdHZhciB6TWF4ID0gb3JkZXIubGVuZ3RoO1xyXG5cclxuICBcdFx0c2NlbmUudHJhdmVyc2UoIGZ1bmN0aW9uKG9iamVjdCkge1xyXG5cclxuICBcdFx0XHR2YXIgaW5kZXggPSBvcmRlci5pbmRleE9mKCBvYmplY3QuaWQgKyAnJyk7XHJcblxyXG4gIFx0XHRcdGlmKGluZGV4ICE9PSAtIDEpIHtcclxuXHJcbiAgXHRcdFx0XHRvYmplY3QuZWxlbWVudC5zdHlsZS56SW5kZXggPSB6TWF4IC0gaW5kZXg7XHJcblxyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdH1cclxuXHJcbiAgXHR0aGlzLnJlbmRlciA9IGZ1bmN0aW9uKHNjZW5lLCBjYW1lcmEpIHtcclxuXHJcbiAgXHRcdHZhciBmb3YgPSBjYW1lcmEucHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sgNSBdICogX2hlaWdodEhhbGY7XHJcblxyXG4gIFx0XHRpZihjYWNoZS5jYW1lcmEuZm92ICE9PSBmb3YpIHtcclxuXHJcbiAgXHRcdFx0ZG9tRWxlbWVudC5zdHlsZS5XZWJraXRQZXJzcGVjdGl2ZSA9IGZvdiArICdweCc7XHJcbiAgXHRcdFx0ZG9tRWxlbWVudC5zdHlsZS5Nb3pQZXJzcGVjdGl2ZSA9IGZvdiArICdweCc7XHJcbiAgXHRcdFx0ZG9tRWxlbWVudC5zdHlsZS5wZXJzcGVjdGl2ZSA9IGZvdiArICdweCc7XHJcblxyXG4gIFx0XHRcdGNhY2hlLmNhbWVyYS5mb3YgPSBmb3Y7XHJcblxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRzY2VuZS51cGRhdGVNYXRyaXhXb3JsZCgpO1xyXG5cclxuICBcdFx0aWYoY2FtZXJhLnBhcmVudCA9PT0gbnVsbCkgY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcblxyXG4gIFx0XHR2YXIgY2FtZXJhQ1NTTWF0cml4ID0gJ3RyYW5zbGF0ZVooJyArIGZvdiArICdweCknICtcclxuICBcdFx0XHRnZXRDYW1lcmFDU1NNYXRyaXgoIGNhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xyXG5cclxuICBcdFx0dmFyIHN0eWxlID0gY2FtZXJhQ1NTTWF0cml4ICtcclxuICBcdFx0XHQndHJhbnNsYXRlKCcgKyBfd2lkdGhIYWxmICsgJ3B4LCcgKyBfaGVpZ2h0SGFsZiArICdweCknO1xyXG5cclxuICBcdFx0aWYoY2FjaGUuY2FtZXJhLnN0eWxlICE9PSBzdHlsZSAmJiAhIGlzSUUpIHtcclxuXHJcbiAgXHRcdFx0Y2FtZXJhRWxlbWVudC5zdHlsZS5XZWJraXRUcmFuc2Zvcm0gPSBzdHlsZTtcclxuICBcdFx0XHRjYW1lcmFFbGVtZW50LnN0eWxlLk1velRyYW5zZm9ybSA9IHN0eWxlO1xyXG4gIFx0XHRcdGNhbWVyYUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gc3R5bGU7XHJcblxyXG4gIFx0XHRcdGNhY2hlLmNhbWVyYS5zdHlsZSA9IHN0eWxlO1xyXG5cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmVuZGVyT2JqZWN0KCBzY2VuZSwgY2FtZXJhLCBjYW1lcmFDU1NNYXRyaXgpO1xyXG5cclxuICBcdFx0aWYoaXNJRSkge1xyXG5cclxuICBcdFx0XHQvLyBJRTEwIGFuZCAxMSBkb2VzIG5vdCBzdXBwb3J0ICdwcmVzZXJ2ZS0zZCcuXHJcbiAgXHRcdFx0Ly8gVGh1cywgei1vcmRlciBpbiAzRCB3aWxsIG5vdCB3b3JrLlxyXG4gIFx0XHRcdC8vIFdlIGhhdmUgdG8gY2FsYyB6LW9yZGVyIG1hbnVhbGx5IGFuZCBzZXQgQ1NTIHotaW5kZXggZm9yIElFLlxyXG4gIFx0XHRcdC8vIEZZSTogei1pbmRleCBjYW4ndCBoYW5kbGUgb2JqZWN0IGludGVyc2VjdGlvblxyXG4gIFx0XHRcdHpPcmRlciggc2NlbmUpO1xyXG5cclxuICBcdFx0fVxyXG5cclxuICBcdH07XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVEhSRUUuQ1NTM0RSZW5kZXJlcjtcclxuXHJcbmNvbnN0IF9DU1MzRE9iamVjdCA9IFRIUkVFLkNTUzNET2JqZWN0LCBfQ1NTM0RTcHJpdGUgPSBUSFJFRS5DU1MzRFNwcml0ZTtcclxuZXhwb3J0IHtcclxuICBfQ1NTM0RPYmplY3QgYXMgQ1NTM0RPYmplY3QsXHJcbiAgX0NTUzNEU3ByaXRlIGFzIENTUzNEU3ByaXRlXHJcbn07XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0NTUzNEUmVuZGVyZXIuanMiLCJpbXBvcnQge1RIUkVFLCAkfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IHtDU1MzRE9iamVjdH0gZnJvbSAnLi9DU1MzRFJlbmRlcmVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENTU0xheWVyIGV4dGVuZHMgQ1NTM0RPYmplY3Qge1xyXG5cclxuICBzdGF0aWMgZGVsYXk7XHJcbiAgc3RhdGljIHN0eWxlO1xyXG4gIHN0YXRpYyBpbml0KGRvYywgZGVsYXk9MTUwKSB7XHJcbiAgICBDU1NMYXllci5kZWxheSA9IGRlbGF5O1xyXG4gICAgQ1NTTGF5ZXIuc3R5bGUgPSAkKGA8c3R5bGUgdHlwZT10ZXh0L2Nzcz5cclxuICAgICAgLmNzcy1sYXllciB7XHJcbiAgICBcdFx0b3BhY2l0eTogMTtcclxuICAgIFx0XHR0cmFuc2l0aW9uOiBvcGFjaXR5ICR7ZGVsYXl9bXMgZWFzZS1vdXQ7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgXHR9XHJcbiAgICBcdC5jc3MtbGF5ZXIuaGlkZGVuIHtcclxuICAgIFx0XHR0cmFuc2l0aW9uOiBvcGFjaXR5ICR7ZGVsYXl9bXMgZWFzZS1pbiwgdmlzaWJpbGl0eSAke2RlbGF5fW1zIHN0ZXAtZW5kO1xyXG4gICAgXHRcdG9wYWNpdHk6IDA7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xyXG4gICAgICB9XHJcbiAgICA8L3N0eWxlPmApLmFwcGVuZFRvKGRvYy5oZWFkKTtcclxuICB9XHJcbiAgc3RhdGljIGRpc3Bvc2UoKSB7XHJcbiAgICBDU1NMYXllci5zdHlsZS5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIHByb3BzKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xyXG4gICAgdGhpcy5qQ29udGFpbmVyID0gJCgnPGRpdiBjbGFzcz1cImhpZGRlbiBjc3MtbGF5ZXJcIj48L2Rpdj4nKTtcclxuICBcdGNvbnN0IHdpZHRoUHhzID0gcHJvcHMud2lkdGgsIGhlaWdodFB4cyA9IGhlaWdodC93aWR0aCp3aWR0aFB4cztcclxuICAgIHRoaXMuakNvbnRhaW5lci53aWR0aCh3aWR0aFB4cykuaGVpZ2h0KGhlaWdodFB4cyk7XHJcbiAgXHR0aGlzLnNjYWxlLnggLz0gd2lkdGhQeHMvd2lkdGg7XHJcbiAgXHR0aGlzLnNjYWxlLnkgLz0gd2lkdGhQeHMvd2lkdGg7XHJcblxyXG4gICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICB0aGlzLnNldCh0aGlzLmpDb250YWluZXJbMF0pO1xyXG4gIH1cclxuXHJcbiAgY2FsbEludGVybmFsKG5hbWUpIHtcclxuICAgIGlmKHRoaXMub2JqZWN0ICYmIHRoaXMub2JqZWN0W25hbWVdKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5vYmplY3RbbmFtZV0oKTtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY2xlYXJJbnRlcm5hbHMoKTtcclxuICB9XHJcblxyXG4gIGNsZWFySW50ZXJuYWxzKCkge1xyXG4gICAgdGhpcy5jYWxsSW50ZXJuYWwoJ2Rpc3Bvc2UnKTtcclxuICAgICF0aGlzLmNzcyB8fCB0aGlzLmNzcy5yZW1vdmUoKTtcclxuICAgICF0aGlzLmh0bWwgfHwgdGhpcy5odG1sLnJlbW92ZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0YShjc3M9JycsIGh0bWw9JycsIGpzPScnKSB7XHJcbiAgICB0aGlzLmNsZWFySW50ZXJuYWxzKCk7XHJcblxyXG4gICAgdGhpcy5jc3MgPSAkKGA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+JHtjc3N9PC9zdHlsZT5gKS5hcHBlbmRUbyh0aGlzLmpDb250YWluZXIpO1xyXG4gICAgdGhpcy5odG1sID0gJChodG1sKS5hcHBlbmRUbyh0aGlzLmpDb250YWluZXIpO1xyXG4gICAgY29uc3QgaW5pdCA9IGV2YWwoanMpO1xyXG4gICAgaWYoaW5pdCkge1xyXG4gICAgICB0aGlzLm9iamVjdCA9IGluaXQodGhpcy5qQ29udGFpbmVyLCB0aGlzLnByb3BzKSB8fCB7fTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHBlbmRlZENhbGwoY2xiKSB7XHJcbiAgICBjb25zdCB0aW1lc3RhbXAgPSB0aGlzLnRpbWVzdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICBpZih0aW1lc3RhbXA9PT10aGlzLnRpbWVzdGFtcCkge1xyXG4gICAgICAgIGNsYigpO1xyXG4gICAgICB9XHJcbiAgICB9LCBDU1NMYXllci5kZWxheSk7XHJcbiAgfVxyXG5cclxuICBpc0hpZGRlbigpIHtcclxuICAgIHJldHVybiB0aGlzLmpDb250YWluZXIuaGFzQ2xhc3MoJ2hpZGRlbicpO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBpZighdGhpcy5pc0hpZGRlbigpKSB7XHJcbiAgICAgIHRoaXMuakNvbnRhaW5lci5hZGRDbGFzcygnaGlkZGVuJyk7XHJcbiAgICAgIHRoaXMuY2FsbEludGVybmFsKCdoaWRlJyk7XHJcbiAgICAgIHJlcyA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+IHtcclxuICAgICAgICB0aGlzLnBlbmRlZENhbGwoKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGxJbnRlcm5hbCgnaGlkZGVuJyk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJlcyA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgaWYodGhpcy5pc0hpZGRlbigpKSB7XHJcbiAgICAgIHRoaXMuakNvbnRhaW5lci5yZW1vdmVDbGFzcygnaGlkZGVuJyk7XHJcbiAgICAgIHRoaXMuY2FsbEludGVybmFsKCdzaG93Jyk7XHJcbiAgICAgIHJlcyA9IG5ldyBQcm9taXNlKChyZXNvbHZlKT0+IHtcclxuICAgICAgICB0aGlzLnBlbmRlZENhbGwoKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLmNhbGxJbnRlcm5hbCgnc2hvd24nKTtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmVzID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvQ1NTTGF5ZXIuanMiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBDYWNoZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKG1heFNpemU9SW5maW5pdHksIHNpemVvZj1DYWNoZS5jb3VudFNpemVvZikge1xyXG4gICAgdGhpcy5vcyA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMuc2l6ZW9mID0gc2l6ZW9mO1xyXG4gICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcclxuICAgIHRoaXMuc2l6ZSA9IDA7XHJcbiAgfVxyXG5cclxuICBmb3JFYWNoKGNsYikge1xyXG4gICAgdGhpcy5vcy5mb3JFYWNoKCh2LCBrKT0+IGNsYihbayx2XSkpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNvdW50U2l6ZW9mKHZhbHVlKSB7XHJcbiAgICByZXR1cm4gMTtcclxuICB9XHJcblxyXG4gIHJlbW92ZShrKSB7XHJcbiAgICBsZXQgcmVzID0gZmFsc2U7XHJcbiAgICBjb25zdCB2ID0gdGhpcy5vcy5nZXQoayk7XHJcbiAgICBpZighdi5sb2NrZWQgfHwgIXYubG9ja2VkKGspKSB7XHJcbiAgICAgIHRoaXMuc2l6ZSAtPSB0aGlzLnNpemVvZih2KTtcclxuICAgICAgaWYodi5kaXNwb3NlKSB7XHJcbiAgICAgICAgdi5kaXNwb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcy5kZWxldGUoayk7XHJcbiAgICAgIHJlcyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZnJlZVNwYWNlKCkge1xyXG4gICAgY29uc3QgYXJyID0gW107XHJcbiAgICBmb3IobGV0IHAgb2YgdGhpcy5vcykge1xyXG4gICAgICBhcnIucHVzaCh7dGltZXN0YW1wOiBwWzFdLnRpbWVzdGFtcCwga2V5OiBwWzBdfSk7XHJcbiAgICB9XHJcbiAgICBhcnIuc29ydCgoYSwgYik9PiBhLnRpbWVzdGFtcC1iLnRpbWVzdGFtcCk7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxhcnIubGVuZ3RoICYmIHRoaXMuc2l6ZT4zKnRoaXMubWF4U2l6ZS80OyArK2kpIHtcclxuICAgICAgdGhpcy5yZW1vdmUoYXJyW2ldLmtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgY29uc3QgYXJyID0gW107XHJcbiAgICBmb3IobGV0IHAgb2YgdGhpcy5vcykge1xyXG4gICAgICBhcnIucHVzaCh7djogcFsxXSwgazogcFswXX0pO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBvIG9mIGFycikge1xyXG4gICAgICBpZihvLnYuZGlzcG9zZSkge1xyXG4gICAgICAgIG8udi5kaXNwb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vcy5kZWxldGUoby5rKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyByZWN1cnNpb25TaXplb2YodmFsdWUpIHtcclxuICAgIGxldCBzaXplID0gMDtcclxuICAgIGlmKHZhbHVlKSB7XHJcbiAgICAgICsrc2l6ZTtcclxuICAgICAgY29uc3QgbGVuID0gdmFsdWUubGVuZ3RoO1xyXG4gICAgICBpZihsZW49PT11bmRlZmluZWQpIHtcclxuICAgICAgICBmb3IgKGxldCBwIGluIHZhbHVlKSB7XHJcbiAgICAgICAgICBpZih2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwKSkge1xyXG4gICAgICAgICAgICBzaXplKz1DYWNoZS5yZWN1cnNpb25TaXplb2YodmFsdWVbcF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBzaXplKz1sZW5cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNpemU7XHJcbiAgfVxyXG5cclxuICBnZXRUaW1lc3RhbXAoKSB7XHJcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcclxuICB9XHJcblxyXG5cclxuICBnZXQoa2V5KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMub3MuZ2V0KGtleSk7XHJcbiAgICBpZih2YWx1ZSkge1xyXG4gICAgICB2YWx1ZS50aW1lc3RhbXAgPSB0aGlzLmdldFRpbWVzdGFtcCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHV0KGtleSwgdmFsdWUpIHtcclxuICAgIHZhbHVlLnRpbWVzdGFtcCA9IHRoaXMuZ2V0VGltZXN0YW1wKCk7XHJcbiAgICB0aGlzLm9zLnNldChrZXksIHZhbHVlKTtcclxuICAgIHRoaXMuc2l6ZSs9dGhpcy5zaXplb2YodmFsdWUpO1xyXG4gICAgaWYodGhpcy5zaXplPnRoaXMubWF4U2l6ZSkge1xyXG4gICAgICB0aGlzLmZyZWVTcGFjZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9DYWNoZS5qcyIsImltcG9ydCB7VEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udHJvbGxlciBleHRlbmRzIFRIUkVFLkV2ZW50RGlzcGF0Y2hlciB7XHJcblxyXG4gIGhhbmRsZURlZmF1bHQoaWQsIGUsIGRhdGEpIHtcclxuICAgIC8vY29uc29sZS5sb2coaWQrJy0nK2UudHlwZSsnLScrZGF0YSk7XHJcbiAgfVxyXG5cclxuICBkaXNwYXRjaEFzeW5jKGUpIHtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZSkpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuXHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Db250cm9sbGVyLmpzIiwiaW1wb3J0IEV2ZW50Q29udmVydGVyIGZyb20gJy4vRXZlbnRDb252ZXJ0ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3VzdG9tRXZlbnRDb252ZXJ0ZXIgZXh0ZW5kcyBFdmVudENvbnZlcnRlciB7XHJcblxyXG4gIC8vIGN1c3RvbVxyXG4gIC8vIHRlc3RJbnRlcnNlY3Rpb24oZSwgZGF0YSk7XHJcbiAgLy8gY3VzdG9tLm9iamVjdFxyXG4gIC8vIHRlc3Qob2JqZWN0KTtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIGN1c3RvbVRlc3Q9KCk9PiBmYWxzZSwgZURvYykge1xyXG4gICAgc3VwZXIod25kLCBkb2MpO1xyXG5cclxuICAgIHRoaXMuZURvYyA9IGVEb2M7XHJcbiAgICB0aGlzLmN1c3RvbVRlc3QgPSBjdXN0b21UZXN0O1xyXG4gICAgdGhpcy5jdXN0b21zID0gW107XHJcbiAgfVxyXG5cclxuICB0ZXN0KG9iamVjdDEsIG9iamVjdDIpIHtcclxuICAgIHJldHVybiBvYmplY3QxICYmIG9iamVjdDI/IHRoaXMuY3VzdG9tVGVzdChvYmplY3QxLCBvYmplY3QyKTogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDYWxsYmFjayhvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3QudGFyZ2V0LmNhbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgYWRkQ3VzdG9tKGN1c3RvbSkge1xyXG4gICAgdGhpcy5jdXN0b21zLnB1c2goY3VzdG9tKTtcclxuICB9XHJcblxyXG4gIGdldE9iamVjdChlLCBkYXRhKSB7XHJcbiAgICBsZXQgb2JqZWN0O1xyXG4gICAgaWYoZGF0YS5kb2M9PT10aGlzLmVEb2MpIHtcclxuICAgICAgZm9yKGxldCBjdXN0b20gb2YgdGhpcy5jdXN0b21zKSB7XHJcbiAgICAgICAgb2JqZWN0ID0gY3VzdG9tLnRlc3RJbnRlcnNlY3Rpb24oZSwgZGF0YSk7XHJcbiAgICAgICAgaWYob2JqZWN0KSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9DdXN0b21FdmVudENvbnZlcnRlci5qcyIsImltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbmRlciB7XHJcblxyXG4gIHN0YXRpYyBERUxJTUlURVIgPSAnICc7XHJcblxyXG4gIHN0YXRpYyBpc0RlbGltZXRyKHMpIHtcclxuICAgIHJldHVybiBzPT09RmluZGVyLkRFTElNSVRFUjtcclxuICB9XHJcblxyXG4gIG1lcmdlKCkge1xyXG4gICAgY29uc3QgYXMgPSBbXSwgbWFwID0gW10sIHN0cnMgPSB0aGlzLnN0cnM7XHJcbiAgICBsZXQgcCA9IDA7XHJcbiAgICBmb3IobGV0IGk9MDsgaTxzdHJzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGlmKHN0cnNbaV0ubGVuZ3RoKSB7XHJcbiAgICAgICAgbWFwLnB1c2goe1xyXG4gICAgICAgICAgYmFzZTogaSxcclxuICAgICAgICAgIG9mZnNldDogcFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFzLnB1c2goc3Ryc1tpXSk7XHJcbiAgICAgICAgcCArPSBzdHJzW2ldLmxlbmd0aDtcclxuICAgICAgICBpZihpPHN0cnMubGVuZ3RoLTEgJiYgIUZpbmRlci5pc0RlbGltZXRyKHN0cnNbaV0uY2hhckF0KHN0cnNbaV0ubGVuZ3RoLTEpKSAmJiAhRmluZGVyLmlzRGVsaW1ldHIoc3Ryc1tpKzFdLmNoYXJBdCgwKSkpIHtcclxuICAgICAgICAgIGFzLnB1c2goRmluZGVyLkRFTElNSVRFUik7XHJcbiAgICAgICAgICArK3A7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLm1hcCA9IG1hcDtcclxuICAgIHRoaXMuc3RyID0gYXMuam9pbignJyk7XHJcbiAgfVxyXG5cclxuICBhZGRIaXRzKHApIHtcclxuICAgIGNvbnN0IGluZm8gPSB0aGlzLm1hcFtVdGlscy5sb3dlckJvdW5kKHRoaXMubWFwLCB7b2Zmc2V0OiBwfSwgKGEsIGIpPT4gYS5vZmZzZXQtYi5vZmZzZXQpXTtcclxuICAgIGxldCBjaGFycyA9IHRoaXMucGF0dGVybi5sZW5ndGgsIGkgPSBpbmZvLmJhc2U7XHJcbiAgICBwIC09IGluZm8ub2Zmc2V0O1xyXG4gICAgd2hpbGUoY2hhcnMpIHtcclxuICAgICAgaWYodGhpcy5zdHJzW2ldLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGRlbGltZXRlciA9IGk8dGhpcy5zdHJzLmxlbmd0aC0xICYmICFGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cnNbaV0uY2hhckF0KHRoaXMuc3Ryc1tpXS5sZW5ndGgtMSkpICYmICFGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cnNbaSsxXS5jaGFyQXQoMCkpLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCA9IE1hdGgubWluKHRoaXMuc3Ryc1tpXS5sZW5ndGgrKGRlbGltZXRlcj8gMTogMCktcCwgY2hhcnMpO1xyXG4gICAgICAgIGlmKHA8dGhpcy5zdHJzW2ldLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5oaXRzLnB1c2goe1xyXG4gICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgb2Zmc2V0OiBwLFxyXG4gICAgICAgICAgICBsZW5ndGg6IE1hdGgubWluKGxlbmd0aCwgdGhpcy5zdHJzW2ldLmxlbmd0aC1wKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjaGFycyAtPSBsZW5ndGg7XHJcbiAgICAgICAgKytpO1xyXG4gICAgICAgIHAgPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDb250ZXh0KHApIHtcclxuICAgIGxldCBmID0gcCwgbCA9IHArdGhpcy5wYXR0ZXJuLmxlbmd0aC0xLCBkZWxzID0gdGhpcy5wcm9wcy5jb250ZXh0TGVuZ3RoLCBwcmV2RGVscyA9IGRlbHMrMTtcclxuICAgIHdoaWxlKGRlbHMgJiYgcHJldkRlbHMtZGVscykge1xyXG4gICAgICBwcmV2RGVscyA9IGRlbHM7XHJcbiAgICAgIGlmKGRlbHMlMikge1xyXG4gICAgICAgIGZvcihsZXQgaT1mLTI7IGk+PTA7IC0taSkge1xyXG4gICAgICAgICAgaWYoRmluZGVyLmlzRGVsaW1ldHIodGhpcy5zdHJbaV0pIHx8IGk9PT0wKSB7XHJcbiAgICAgICAgICAgIGYgPSBpPT09MD8gMDogaSsxO1xyXG4gICAgICAgICAgICAtLWRlbHM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmb3IobGV0IGk9bCsyOyBpPHRoaXMuc3RyLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICBpZihGaW5kZXIuaXNEZWxpbWV0cih0aGlzLnN0cltpXSkgfHwgaT09PXRoaXMuc3RyLmxlbmd0aC0xKSB7XHJcbiAgICAgICAgICAgIGwgPSBpPT09dGhpcy5zdHIubGVuZ3RoLTE/IGk9PT10aGlzLnN0ci5sZW5ndGgtMTogaS0xO1xyXG4gICAgICAgICAgICAtLWRlbHM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250ZXh0cy5wdXNoKHRoaXMuc3RyLnN1YnN0cihmLCBsLWYrMSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGl0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmhpdHM7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0cygpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRleHRzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRlZmF1bHRzID0ge1xyXG4gICAgY29udGV4dExlbmd0aDogNyxcclxuICAgIGhpdHM6IHRydWUsXHJcbiAgICBjb250ZXh0czogdHJ1ZVxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHN0cnMsIHBhdHRlcm4sIHByb3BzKSB7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi5GaW5kZXIuZGVmYXVsdHMsXHJcbiAgICAgIC4uLnByb3BzXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zdHJzID0gc3RycztcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLm1lcmdlKHN0cnMpO1xyXG4gICAgdGhpcy5oaXRzID0gW107XHJcbiAgICB0aGlzLmNvbnRleHRzID0gW107XHJcbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmxzdHIgPSB0aGlzLnN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgbGV0IHAgPSAwO1xyXG4gICAgd2hpbGUodHJ1ZSkge1xyXG4gICAgICBwID0gdGhpcy5sc3RyLmluZGV4T2YodGhpcy5wYXR0ZXJuLCBwKTtcclxuICAgICAgaWYocD09PS0xKSB7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZGRIaXRzKHApO1xyXG4gICAgICAgIHRoaXMuYWRkQ29udGV4dChwKTtcclxuICAgICAgICBwICs9IHRoaXMucGF0dGVybi5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRmluZGVyLmpzIiwiaW1wb3J0IHtQREZKU30gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcblBERkpTLndvcmtlclNyYyA9ICh3aW5kb3cuUERGSlNfTE9DQUxFPyBQREZKU19MT0NBTEU6IEdMT0JBTF9QQVRIUykucGRmSnNXb3JrZXI7XHJcblBERkpTLmNNYXBVcmwgPSAod2luZG93LlBERkpTX0xPQ0FMRT8gUERGSlNfTE9DQUxFOiBHTE9CQUxfUEFUSFMpLnBkZkpzQ01hcFVybDtcclxuUERGSlMuY01hcFBhY2tlZCA9IHRydWU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZGYge1xyXG5cclxuICBjb25zdHJ1Y3RvcihzcmMsIGxvYWRpbmdQcm9ncmVzcykge1xyXG4gICAgdGhpcy5zcmMgPSBVdGlscy5ub3JtYWxpemVVcmwoc3JjKTtcclxuICAgIHRoaXMuaGFuZGxlclF1ZXVlID0gW107XHJcbiAgICB0aGlzLnByb2dyZXNEYXRhID0ge2xvYWRlZDogLTEsIHRvdGFsOiAxfTtcclxuICAgIHRoaXMubG9hZGluZ1Byb2dyZXNzID0gbG9hZGluZ1Byb2dyZXNzO1xyXG5cclxuICAgIFBERkpTLmdldERvY3VtZW50KHtcclxuICAgICAgdXJsOiB0aGlzLnNyYyxcclxuICAgICAgcmFuZ2VDaHVua1NpemU6IDUxMioxMDI0XHJcbiAgICB9LCBudWxsLCBudWxsLCAoZGF0YSk9PiB7XHJcbiAgICAgIGlmKHRoaXMubG9hZGluZ1Byb2dyZXNzKSB7XHJcbiAgICAgICAgbGV0IGN1ciA9IE1hdGguZmxvb3IoMTAwKmRhdGEubG9hZGVkL2RhdGEudG90YWwpLFxyXG4gICAgICAgICAgICAgIG9sZCA9IE1hdGguZmxvb3IoMTAwKnRoaXMucHJvZ3Jlc0RhdGEubG9hZGVkL3RoaXMucHJvZ3Jlc0RhdGEudG90YWwpO1xyXG4gICAgICAgIGlmKGN1ciE9PW9sZCkge1xyXG4gICAgICAgICAgY3VyID0gaXNOYU4oY3VyKT8gMDogY3VyO1xyXG4gICAgICAgICAgY3VyID0gY3VyPjEwMD8gMTAwOiBjdXI7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdQcm9ncmVzcyhjdXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByb2dyZXNEYXRhID0gZGF0YTtcclxuICAgIH0pLlxyXG4gICAgdGhlbigoaGFuZGxlcik9PiB7XHJcbiAgICAgIGlmKGhhbmRsZXIubnVtUGFnZXM+MSkge1xyXG4gICAgICAgIFByb21pc2UuYWxsKFtoYW5kbGVyLmdldFBhZ2UoMSksIGhhbmRsZXIuZ2V0UGFnZSgyKV0pLlxyXG4gICAgICAgIHRoZW4oKHBhZ2VzKT0+IHtcclxuICAgICAgICAgIHRoaXMuaW5pdChoYW5kbGVyLCBwYWdlcyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbml0KGhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXQoaGFuZGxlciwgcGFnZXMpIHtcclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgICB0aGlzLmRvdWJsZWRQYWdlcyA9IHBhZ2VzPyAoTWF0aC5hYnMoMipQZGYuZ2V0UGFnZVNpemUocGFnZXNbMF0pLndpZHRoLVBkZi5nZXRQYWdlU2l6ZShwYWdlc1sxXSkud2lkdGgpL1BkZi5nZXRQYWdlU2l6ZShwYWdlc1swXSkud2lkdGg8MWUtNCk6IGZhbHNlO1xyXG4gICAgbGV0IGRvbmUgPSBQcm9taXNlLnJlc29sdmUoaGFuZGxlcik7XHJcbiAgICBmb3IobGV0IGNsYiBvZiB0aGlzLmhhbmRsZXJRdWV1ZS5yZXZlcnNlKCkpIHtcclxuICAgICAgZG9uZSA9IGRvbmUudGhlbigoaGFuZGxlcik9PiB7XHJcbiAgICAgICAgY2xiKGhhbmRsZXIpO1xyXG4gICAgICAgIHJldHVybiBoYW5kbGVyO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBhZ2VUeXBlKG4pIHtcclxuICAgIHJldHVybiAhdGhpcy5kb3VibGVkUGFnZXMgfHwgbj09PTAgfHwgbj09PXRoaXMuZ2V0UGFnZXNOdW0oKS0xPyAnZnVsbCc6IChuJjE/ICdsZWZ0JzogJ3JpZ2h0Jyk7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlKG4pIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIuZ2V0UGFnZSh0aGlzLmRvdWJsZWRQYWdlcz8gTWF0aC5jZWlsKG4vMikrMTogbisxKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLmhhbmRsZXJRdWV1ZS5zcGxpY2UoMCwgdGhpcy5oYW5kbGVyUXVldWUubGVuZ3RoKTtcclxuICAgIGRlbGV0ZSB0aGlzLmhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBzZXRMb2FkaW5nUHJvZ3Jlc3NDbGIoY2xiKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdQcm9ncmVzcyA9IGNsYjtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VzTnVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcj8gKHRoaXMuZG91YmxlZFBhZ2VzPyAyKih0aGlzLmhhbmRsZXIubnVtUGFnZXMtMSk6IHRoaXMuaGFuZGxlci5udW1QYWdlcyk6IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBnZXRQYWdlU2l6ZShwYWdlKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogcGFnZS52aWV3WzJdLXBhZ2Uudmlld1swXSxcclxuICAgICAgaGVpZ2h0OiBwYWdlLnZpZXdbM10tcGFnZS52aWV3WzFdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbi8vICAgaWYocGFnZXM+MSkge1xyXG4vLyAgIGhhbmRsZXIuZ2V0UGFnZSgyKS5cclxuLy8gICB0aGVuKChwYWdlKT0+IHtcclxuLy8gICAgIGNvbnN0IHNpemUxID0gUGRmLmdldFBhZ2VTaXplKHBhZ2UpO1xyXG4vLyAgICAgdGhpcy5wcm9wcy5kb3VibGVkUGFnZXMgPSAyKnNpemUwLndpZHRoPT09c2l6ZTEud2lkdGg7XHJcbi8vICAgICB0aGlzLnJlYWR5KCk7XHJcbi8vICAgfSkuXHJcbi8vICAgY2F0Y2goKCk9PiB0aGlzLnJlYWR5KCkpO1xyXG4vLyB9XHJcbi8vIGVsc2Uge1xyXG5cclxuICBnZXRIYW5kbGVyKGNsYikge1xyXG4gICAgaWYodGhpcy5oYW5kbGVyKSB7XHJcbiAgICAgIGNsYih0aGlzLmhhbmRsZXIpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlclF1ZXVlLnB1c2goY2xiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1BkZi5qcyIsImltcG9ydCB7VEhSRUUsICR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVFdmVudENvbnZlcnRlckZzIHtcclxuXHJcbiAgc3RhdGljIG9iamVjdHNUZXN0KG9iamVjdDEsIG9iamVjdDIpIHtcclxuICAgIHJldHVybiBvYmplY3QxICYmIG9iamVjdDI/IG9iamVjdDEub2JqZWN0PT09b2JqZWN0Mi5vYmplY3Q6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG9iamVjdHNBbmRGYWNlc1Rlc3Qob2JqZWN0MSwgb2JqZWN0Mikge1xyXG4gICAgcmV0dXJuIG9iamVjdDEgJiYgb2JqZWN0Mj8gb2JqZWN0MS5vYmplY3Q9PT1vYmplY3QyLm9iamVjdCAmJiBvYmplY3QxLmZhY2UubWF0ZXJpYWxJbmRleD09PW9iamVjdDIuZmFjZS5tYXRlcmlhbEluZGV4OiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbFdvcmxkLCB0ZXN0PVRocmVlRXZlbnRDb252ZXJ0ZXJGcy5vYmplY3RzQW5kRmFjZXNUZXN0KSB7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbFdvcmxkO1xyXG4gICAgdGhpcy5jb29yZHMgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG4gICAgdGhpcy5yYXljYXN0ZXIgPSB0aGlzLnZpc3VhbC5yYXljYXN0ZXI7XHJcbiAgICB0aGlzLmNhbWVyYSA9IHRoaXMudmlzdWFsLmNhbWVyYTtcclxuICAgIHRoaXMudGhyZWVzID0gW107XHJcbiAgICB0aGlzLnRlc3QgPSB0ZXN0O1xyXG4gIH1cclxuXHJcbiAgYWRkVGhyZWUodGhyZWUpIHtcclxuICAgIHRoaXMudGhyZWVzLnB1c2godGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlVGhyZWUodGhyZWUpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnRocmVlcy5pbmRleE9mKHRocmVlKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMudGhyZWVzLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE9iamVjdChlKSB7XHJcbiAgICB0aGlzLnNldENvb3Jkc0Zyb21FdmVudChlKTtcclxuICAgIHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEodGhpcy5jb29yZHMsIHRoaXMuY2FtZXJhKTtcclxuICAgIGNvbnN0IGludGVyc2VjdHMgPSB0aGlzLnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzKHRoaXMudGhyZWVzKTtcclxuICAgIHJldHVybiBpbnRlcnNlY3RzWzBdO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJy4vQmFzZU1hdGhVdGlscyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaHJlZVV0aWxzIHtcclxuXHJcbiAgc3RhdGljIHZlcnRpY2VzMlVWcyh2ZXJ0aWNlcywgaW5kZWNlcywgZmlyc3QsIGxhc3QsIGNvbnZlckNsYikge1xyXG4gICAgY29uc3QgciA9IFtdO1xyXG4gICAgZm9yKGxldCBpID0gZmlyc3Q7IGk8bGFzdDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IHZpcyA9IFtpbmRlY2VzW2ldLmEsaW5kZWNlc1tpXS5iLGluZGVjZXNbaV0uY107XHJcbiAgICAgIGZvcihsZXQgaiA9IDA7IGo8dmlzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgICAgaWYoIXJbdmlzW2pdXSkge1xyXG4gICAgICAgICAgclt2aXNbal1dID0gY29udmVyQ2xiKHZlcnRpY2VzW3Zpc1tqXV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY29tcHV0ZUZhY2VWZXJ0ZXhVdnMoZ2VvbWV0cnksIGZhY2VzKSB7XHJcbiAgICBjb25zdCB1dnMgPSBbXHJcbiAgICAgICAgICAgICAgICBUaHJlZVV0aWxzLnZlcnRpY2VzMlVWcyhnZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkuZmFjZXMsIDAsIGZhY2VzWzBdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKHAueCwgMS1wLnopKSxcclxuICAgICAgICAgICAgICAgIFRocmVlVXRpbHMudmVydGljZXMyVVZzKGdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS5mYWNlcywgZmFjZXNbMF0sIGZhY2VzWzFdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKDEtcC54LCAxLXAueikpLFxyXG4gICAgICAgICAgICAgICAgVGhyZWVVdGlscy52ZXJ0aWNlczJVVnMoZ2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LmZhY2VzLCBmYWNlc1sxXSwgZmFjZXNbMl0sIChwKT0+bmV3IFRIUkVFLlZlY3RvcjIocC54LCBwLnkpKSxcclxuICAgICAgICAgICAgICAgIFRocmVlVXRpbHMudmVydGljZXMyVVZzKGdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS5mYWNlcywgZmFjZXNbMl0sIGZhY2VzWzNdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKDEtcC54LCBwLnkpKSxcclxuICAgICAgICAgICAgICAgIFRocmVlVXRpbHMudmVydGljZXMyVVZzKGdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS5mYWNlcywgZmFjZXNbM10sIGZhY2VzWzRdLCAocCk9Pm5ldyBUSFJFRS5WZWN0b3IyKHAueiwgcC55KSksXHJcbiAgICAgICAgICAgICAgICBUaHJlZVV0aWxzLnZlcnRpY2VzMlVWcyhnZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkuZmFjZXMsIGZhY2VzWzRdLCBnZW9tZXRyeS5mYWNlcy5sZW5ndGgsIChwKT0+bmV3IFRIUkVFLlZlY3RvcjIoMS1wLnosIHAueSkpXHJcbiAgICBdO1xyXG5cclxuICAgIGxldCB1dnNpID0gMDtcclxuICAgIGZvcihsZXQgaSA9IDA7IGk8Z2VvbWV0cnkuZmFjZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdXZzaSArPSBmYWNlc1t1dnNpXSA9PT0gaTtcclxuICAgICAgY29uc3QgZiA9IGdlb21ldHJ5LmZhY2VzW2ldO1xyXG4gICAgICBmLm1hdGVyaWFsSW5kZXggPSB1dnNpO1xyXG4gICAgICBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWzBdW2ldID0gW3V2c1t1dnNpXVtmLmFdLCB1dnNbdXZzaV1bZi5iXSwgdXZzW3V2c2ldW2YuY11dO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNyZWF0ZU1hcmtlcihwLCBjLCBzaXplKSB7XHJcbiAgICBjb25zdCBtYXJrZXIgPSBuZXcgVEhSRUUuTWVzaChuZXcgVEhSRUUuU3BoZXJlR2VvbWV0cnkoc2l6ZSksIG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7IGNvbG9yOiBjIH0pKTtcclxuICAgIG1hcmtlci5wb3NpdGlvbi5zZXQocC54LHAueSxwLnopO1xyXG4gICAgcmV0dXJuIG1hcmtlcjtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaW5kVXZUcmlzKGdlb21ldHJ5LCBwcywgZmlyc3QsIGxhc3QpIHtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgZm9yKGxldCBwIG9mIHBzKSB7XHJcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICBmb3IobGV0IGk9Zmlyc3Q7IGk8bGFzdCAmJiAhZm91bmQ7ICsraSkge1xyXG4gICAgICAgIGNvbnN0IHRyaSA9IGdlb21ldHJ5LmZhY2VWZXJ0ZXhVdnNbMF1baV07XHJcbiAgICAgICAgaWYoQmFzZU1hdGhVdGlscy5pc0luc2lkZUNvbnZQb2x5KHRyaSwgcCkpIHtcclxuICAgICAgICAgIHJlcy5wdXNoKHtcclxuICAgICAgICAgICAgY29lZnM6IEJhc2VNYXRoVXRpbHMuY29tcHV0ZUludGVycENvZWZzKHRyaSwgcCksXHJcbiAgICAgICAgICAgIGlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZighZm91bmQpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdCYWQgcG9pbnQnKTtcclxuICAgICAgICByZXMucHVzaCh1bmRlZmluZWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZpbmRJbnRlcm5hbFZlcnRpY2VzKGdlb21ldHJ5LCBwcywgZmlyc3QsIGxhc3QpIHtcclxuICAgIGNvbnN0IHJlcyA9IHt9O1xyXG4gICAgZm9yKGxldCBpPWZpcnN0OyBpPGxhc3Q7ICsraSkge1xyXG4gICAgICBjb25zdCB0cmkgPSBnZW9tZXRyeS5mYWNlVmVydGV4VXZzWzBdW2ldLCBmID0gZ2VvbWV0cnkuZmFjZXNbaV0sIHZzID0gW2YuYSwgZi5iLCBmLmNdO1xyXG4gICAgICBmb3IobGV0IGo9MDsgajx0cmkubGVuZ3RoOyArK2opIHtcclxuICAgICAgICBpZihyZXNbdnNbal1dPT09dW5kZWZpbmVkICYmIEJhc2VNYXRoVXRpbHMuaXNJbnNpZGVQb2x5KHBzLCB0cmlbal0pKSB7XHJcbiAgICAgICAgICByZXNbdnNbal1dID0ge1xyXG4gICAgICAgICAgICBwOiB0cmlbal0sXHJcbiAgICAgICAgICAgIGk6IHZzW2pdLFxyXG4gICAgICAgICAgICBuOiBmLnZlcnRleE5vcm1hbHNbal1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXMpO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGhyZWVVdGlscy5qcyIsIlxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUYXJnZXQge1xyXG5cclxuICBzdGF0aWMgdGVzdChvYmplY3QxLCBvYmplY3QyKSB7XHJcbiAgICByZXR1cm4gb2JqZWN0MS50YXJnZXQ9PT1vYmplY3QyLnRhcmdldDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL3RhcmdldHMvVGFyZ2V0LmpzIiwiaW1wb3J0IHskLCB0cn0gZnJvbSAnLi9qcy9saWJzJztcclxuaW1wb3J0IERldGVjdG9yIGZyb20gJ0RldGVjdG9yJztcclxuaW1wb3J0IFZpc3VhbFdvcmxkIGZyb20gJ1Zpc3VhbFdvcmxkJztcclxuaW1wb3J0IFBkZkxpbmtzSGFuZGxlciBmcm9tICcuL2pzL2NsYXNzZXMvUGRmTGlua3NIYW5kbGVyJztcclxuaW1wb3J0IEJvb2sgZnJvbSAnLi9qcy9jbGFzc2VzL0Jvb2snO1xyXG5pbXBvcnQgQm9va1ZpZXcgZnJvbSAnLi9qcy9jbGFzc2VzL0Jvb2tWaWV3JztcclxuaW1wb3J0IEJvb2tDb250cm9sbGVyIGZyb20gJy4vanMvY2xhc3Nlcy9Cb29rQ29udHJvbGxlcic7XHJcbmltcG9ydCBQZGZCb29rUHJvcHNCdWlsZGVyIGZyb20gJy4vanMvY2xhc3Nlcy9QZGZCb29rUHJvcHNCdWlsZGVyJztcclxuaW1wb3J0IENsYkJvb2tQcm9wc0J1aWxkZXIgZnJvbSAnLi9qcy9jbGFzc2VzL0NsYkJvb2tQcm9wc0J1aWxkZXInO1xyXG5pbXBvcnQgTG9hZGluZ0NvbnRyb2xsZXIgZnJvbSAnTG9hZGluZ0NvbnRyb2xsZXInO1xyXG5pbXBvcnQgU2VhcmNoIGZyb20gJ1NlYXJjaCc7XHJcbmltcG9ydCBCb29rbWFya3MgZnJvbSAnQm9va21hcmtzJztcclxuaW1wb3J0IFRodW1ibmFpbHMgZnJvbSAnVGh1bWJuYWlscyc7XHJcbmltcG9ydCBUb2NDb250cm9sbGVyIGZyb20gJy4vanMvY2xhc3Nlcy9Ub2NDb250cm9sbGVyJztcclxuaW1wb3J0IEJvb2tQcmludGVyIGZyb20gJy4vanMvY2xhc3Nlcy9Cb29rUHJpbnRlcic7XHJcbmltcG9ydCBBdXRvTmF2aWdhdG9yIGZyb20gJy4vanMvY2xhc3Nlcy9BdXRvTmF2aWdhdG9yJztcclxuaW1wb3J0IFNvdW5kc0Vudmlyb21lbnQgZnJvbSAnLi9qcy9jbGFzc2VzL1NvdW5kc0Vudmlyb21lbnQnO1xyXG5cclxuJC5mbi5GbGlwQm9vayA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcclxuICBjb25zdCBzY2VuZSA9IHtcclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgIGlmKHRoaXMucmVhZHkpIHtcclxuICAgICAgICAhc2NlbmUucGRmTGlua3NIYW5kbGVyIHx8IHNjZW5lLnBkZkxpbmtzSGFuZGxlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnBkZkxpbmtzSGFuZGxlcjtcclxuICAgICAgICBzY2VuZS5zb3VuZHMuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5zb3VuZHM7XHJcbiAgICAgICAgc2NlbmUudG9jQ3RybC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnRvY0N0cmw7XHJcbiAgICAgICAgc2NlbmUudGh1bWJuYWlscy5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnRodW1ibmFpbHM7XHJcbiAgICAgICAgIXNjZW5lLmJvb2ttYXJrcyB8fCBzY2VuZS5ib29rbWFya3MuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5ib29rbWFya3M7XHJcbiAgICAgICAgc2NlbmUuY3RybC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmN0cmw7XHJcbiAgICAgICAgc2NlbmUuYm9va1ByaW50ZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5ib29rUHJpbnRlcjtcclxuICAgICAgICBzY2VuZS5ib29rLmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUuYm9vaztcclxuICAgICAgICBzY2VuZS5wcm9wc0J1aWxkZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBzY2VuZS5wcm9wc0J1aWxkZXI7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmJvb2tCdWlsZGVyO1xyXG4gICAgICAgIHNjZW5lLnZpc3VhbC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLnZpc3VhbDtcclxuICAgICAgICBzY2VuZS52aWV3LmRpc3Bvc2UoKTtcclxuICAgICAgICBkZWxldGUgc2NlbmUudmlldztcclxuICAgICAgICBkZWxldGUgc2NlbmUuZGlzcG9zZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdEaXNwb3NlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgb3B0aW9ucyA9IHsuLi5vcHRpb25zfTtcclxuICBzY2VuZS52aWV3ID0gbmV3IEJvb2tWaWV3KHRoaXMubGVuZ3RoPyB0aGlzWzBdOiAkKCc8ZGl2PicpLmFwcGVuZFRvKCdib2R5JyksICgpPT4ge1xyXG4gICAgaWYoIURldGVjdG9yLndlYmdsKSB7XHJcbiAgICAgIERldGVjdG9yLmFkZEdldFdlYkdMTWVzc2FnZSh7cGFyZW50OiBzY2VuZS52aWV3LmdldFZpZXcoKX0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNjZW5lLmxvYWRpbmdDdHJsID0gbmV3IExvYWRpbmdDb250cm9sbGVyKHNjZW5lLnZpZXcsIHRydWUsIChwcm9ncmVzcyk9PiBwcm9ncmVzcz09PTA/IHRyKCdQbGVhc2Ugd2FpdC4uLiB0aGUgQXBwbGljYXRpb24gaXMgTG9hZGluZycpOiB0cignUERGIGlzIExvYWRpbmc6JykrJyAnK3Byb2dyZXNzKyclJyk7XHJcbiAgICAgIHNjZW5lLnZpc3VhbCA9IG5ldyBWaXN1YWxXb3JsZChzY2VuZS52aWV3LmdldENvbnRhaW5lcigpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsIHNjZW5lLnZpZXcuZ2V0Q29udGFpbmVyKCkub3duZXJEb2N1bWVudCwgc2NlbmUudmlldy5nZXRWaWV3KCkpO1xyXG4gICAgICBzY2VuZS5ib29rQnVpbGRlciA9IChwcm9wcywgc2hlZXRzLCBwYWdlQ2FsbGJhY2spPT4ge1xyXG4gICAgICAgIHByb3BzLmNzc0xheWVyUHJvcHMgPSB7XHJcbiAgICAgICAgICAuLi5wcm9wcy5jc3NMYXllclByb3BzLFxyXG4gICAgICAgICAgc2NlbmVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmKG9wdGlvbnMucHJvcGVydGllc0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICBwcm9wcyA9IG9wdGlvbnMucHJvcGVydGllc0NhbGxiYWNrKHByb3BzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2NlbmUuYm9vayA9IG5ldyBCb29rKHNjZW5lLnZpc3VhbCwgc2hlZXRzLCBwYWdlQ2FsbGJhY2ssIHByb3BzKTtcclxuICAgICAgICBzY2VuZS5ib29rUHJpbnRlciA9IG5ldyBCb29rUHJpbnRlcihzY2VuZS52aXN1YWwsIHNjZW5lLmJvb2ssIChvcHRpb25zLnRlbXBsYXRlIHx8IHt9KS5wcmludFN0eWxlKTtcclxuICAgICAgICBzY2VuZS5sb2FkaW5nQ3RybC5kaXNwb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHNjZW5lLmxvYWRpbmdDdHJsO1xyXG4gICAgICAgIHNjZW5lLmN0cmwgPSBuZXcgQm9va0NvbnRyb2xsZXIoc2NlbmUuYm9vaywgc2NlbmUudmlldywgb3B0aW9ucy5jb250cm9sc1Byb3BzKTtcclxuICAgICAgICBzY2VuZS5ib29rLnNldEluamVjdG9yKCh3KT0+IHtcclxuICAgICAgICAgIHcualF1ZXJ5ID0gdy4kID0gJDtcclxuICAgICAgICAgIHcuYm9vayA9IHNjZW5lLmJvb2s7XHJcbiAgICAgICAgICB3LmJvb2tDdHJsID0gc2NlbmUuY3RybDtcclxuICAgICAgICAgIGlmKHByb3BzLmluamVjdG9yKSB7XHJcbiAgICAgICAgICAgIHByb3BzLmluamVjdG9yKHcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHNjZW5lLnZpZXcuYWRkSGFuZGxlcihzY2VuZS5jdHJsKTtcclxuICAgICAgICBzY2VuZS5jdHJsLnNldFByaW50ZXIoc2NlbmUuYm9va1ByaW50ZXIpO1xyXG4gICAgICAgIGNvbnN0IHRlc3QgPSBwYWdlQ2FsbGJhY2soMCk7XHJcblxyXG4gICAgICAgIHNjZW5lLnNlYXJjaCA9IG5ldyBTZWFyY2goc2NlbmUudmlldy5nZXRTZWFyY2hWaWV3KCksIHNjZW5lLmJvb2suZ2V0UGFnZXMoKSk7XHJcbiAgICAgICAgc2NlbmUuc2VhcmNoLm9uUXVlcnkgPSBzY2VuZS5ib29rLnNldFF1ZXJ5LmJpbmQoc2NlbmUuYm9vayk7XHJcbiAgICAgICAgc2NlbmUuYm9vay5hZGRFdmVudExpc3RlbmVyKCdzZWFyY2hSZXN1bHRzJywgKGUpPT4ge1xyXG4gICAgICAgICAgc2NlbmUuc2VhcmNoLnNldFJlc3VsdHMoZS5yZXN1bHRzLCBlLmxhc3RQYWdlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2NlbmUudGh1bWJuYWlscyA9IG5ldyBUaHVtYm5haWxzKHNjZW5lLnZpc3VhbCwgc2NlbmUudmlldy5nZXRUaHVtYm5haWxzVmlldygpLCBwYWdlQ2FsbGJhY2ssIDIqKHNoZWV0cysyKSwge2tXdG9IOiBwcm9wcy53aWR0aC9wcm9wcy5oZWlnaHR9KTtcclxuICAgICAgICBzY2VuZS50b2NDdHJsID0gbmV3IFRvY0NvbnRyb2xsZXIoc2NlbmUudmlldywgc2NlbmUuY3RybCk7XHJcbiAgICAgICAgc2NlbmUudG9jQ3RybC5zZXRUaHVtYm5haWxzKHNjZW5lLnRodW1ibmFpbHMpO1xyXG4gICAgICAgIHNjZW5lLnRvY0N0cmwuc2V0U2VhcmNoKHNjZW5lLnNlYXJjaCk7XHJcbiAgICAgICAgc2NlbmUuY3RybC5zZXRUb2NDdHJsKHNjZW5lLnRvY0N0cmwpO1xyXG4gICAgICAgIHNjZW5lLnZpZXcuYWRkSGFuZGxlcihzY2VuZS50b2NDdHJsKTtcclxuXHJcbiAgICAgICAgaWYodGVzdC50eXBlPT09J3BkZicpIHtcclxuICAgICAgICAgIHNjZW5lLnBkZkxpbmtzSGFuZGxlciA9IG5ldyBQZGZMaW5rc0hhbmRsZXIodGVzdC5zcmMsIHNjZW5lLmN0cmwsIHNjZW5lLnZpc3VhbC5lbGVtZW50KTtcclxuICAgICAgICAgIHNjZW5lLmJvb2suYWRkRXZlbnRMaXN0ZW5lcigncGRmQW5ub3RhdGlvbicsIHNjZW5lLnBkZkxpbmtzSGFuZGxlci5oYW5kbGVFdmVudC5iaW5kKHNjZW5lLnBkZkxpbmtzSGFuZGxlcikpO1xyXG4gICAgICAgICAgdGVzdC5zcmMuZ2V0SGFuZGxlcigoaGFuZGxlcik9PiB7XHJcbiAgICAgICAgICAgIGhhbmRsZXIuZ2V0T3V0bGluZSgpLlxyXG4gICAgICAgICAgICAgIHRoZW4oKG91dGxpbmUpPT4ge1xyXG4gICAgICAgICAgICAgICAgc2NlbmUuYm9va21hcmtzID0gbmV3IEJvb2ttYXJrcyhzY2VuZS52aWV3LmdldEJvb2ttYXJrc1ZpZXcoKSwgb3V0bGluZSk7XHJcbiAgICAgICAgICAgICAgICBzY2VuZS50b2NDdHJsLnNldEJvb2ttYXJrcyhzY2VuZS5ib29rbWFya3MsIHRlc3Quc3JjKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYob3B0aW9ucy5wZGZMaW5rcyAmJiBvcHRpb25zLnBkZkxpbmtzLmhhbmRsZXIpIHtcclxuICAgICAgICAgICAgc2NlbmUucGRmTGlua3NIYW5kbGVyLnNldEhhbmRsZXIob3B0aW9ucy5wZGZMaW5rcy5oYW5kbGVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjZW5lLnNvdW5kcyA9IG5ldyBTb3VuZHNFbnZpcm9tZW50KG9wdGlvbnMudGVtcGxhdGUpO1xyXG4gICAgICAgIHNjZW5lLmN0cmwuc2V0U291bmRzKHNjZW5lLnNvdW5kcyk7XHJcbiAgICAgICAgc2NlbmUuc291bmRzLnN1YnNjcmliZUZsaXBzKHNjZW5lLmN0cmwpO1xyXG5cclxuICAgICAgICBzY2VuZS5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgbmV3IEF1dG9OYXZpZ2F0b3Ioc2NlbmUudmlzdWFsLCBzY2VuZS5jdHJsLCBvcHRpb25zLmF1dG9OYXZpZ2F0aW9uKS5kaXNwb3NlKCk7XHJcbiAgICAgICAgaWYob3B0aW9ucy5yZWFkeSkge1xyXG4gICAgICAgICAgb3B0aW9ucy5yZWFkeShzY2VuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHNjZW5lLnBlbmRpbmdEaXNwb3NlKSB7XHJcbiAgICAgICAgICBzY2VuZS5kaXNwb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBpZihvcHRpb25zLnBkZikge1xyXG4gICAgICAgIHNjZW5lLnByb3BzQnVpbGRlciA9IG5ldyBQZGZCb29rUHJvcHNCdWlsZGVyKG9wdGlvbnMucGRmLCBzY2VuZS5ib29rQnVpbGRlcik7XHJcbiAgICAgICAgc2NlbmUucHJvcHNCdWlsZGVyLnBkZi5zZXRMb2FkaW5nUHJvZ3Jlc3NDbGIoc2NlbmUubG9hZGluZ0N0cmwuc2V0UHJvZ3Jlc3MuYmluZChzY2VuZS5sb2FkaW5nQ3RybCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYob3B0aW9ucy5wYWdlQ2FsbGJhY2spIHtcclxuICAgICAgICBzY2VuZS5wcm9wc0J1aWxkZXIgPSBuZXcgQ2xiQm9va1Byb3BzQnVpbGRlcihzY2VuZS52aXN1YWwsIG9wdGlvbnMucGFnZUNhbGxiYWNrLCBvcHRpb25zLnBhZ2VzLCBzY2VuZS5ib29rQnVpbGRlcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc2NlbmUucHJvcHNCdWlsZGVyID0gbmV3IENsYkJvb2tQcm9wc0J1aWxkZXIoc2NlbmUudmlzdWFsLCBCb29rLnBhZ2VDYWxsYmFjaywgNiwgc2NlbmUuYm9va0J1aWxkZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSwgb3B0aW9ucy50ZW1wbGF0ZSk7XHJcbiAgcmV0dXJuIHNjZW5lO1xyXG59XHJcblxyXG4kKCgpPT4ge1xyXG4gIGxldCBjb250YWluZXJzID0gJCgnLmZsaXAtYm9vay1jb250YWluZXInKTtcclxuICBmb3IobGV0IGkgPSAwOyBpPGNvbnRhaW5lcnMubGVuZ3RoOyArK2kpIHtcclxuICAgIGNvbnN0IGpDb250YWluZXIgPSAkKGNvbnRhaW5lcnNbaV0pLCBzcmMgPSBqQ29udGFpbmVyLmF0dHIoJ3NyYycpO1xyXG4gICAgaWYoISFzcmMpIHtcclxuICAgICAgakNvbnRhaW5lci5GbGlwQm9vayh7cGRmOiBzcmN9KTtcclxuICAgIH1cclxuICB9XHJcbn0pO1xyXG5cclxud2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0gJDtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vaW5kZXguanMiLCJpZiAoIUFycmF5LnByb3RvdHlwZS5maWxsKSB7XHJcbiAgQXJyYXkucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbih2YWx1ZSkge1xyXG5cclxuICAgIC8vINCo0LDQs9C4IDEtMi5cclxuICAgIGlmICh0aGlzID09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIE8gPSBPYmplY3QodGhpcyk7XHJcblxyXG4gICAgLy8g0KjQsNCz0LggMy01LlxyXG4gICAgdmFyIGxlbiA9IE8ubGVuZ3RoID4+PiAwO1xyXG5cclxuICAgIC8vINCo0LDQs9C4IDYtNy5cclxuICAgIHZhciBzdGFydCA9IGFyZ3VtZW50c1sxXTtcclxuICAgIHZhciByZWxhdGl2ZVN0YXJ0ID0gc3RhcnQgPj4gMDtcclxuXHJcbiAgICAvLyDQqNCw0LMgOC5cclxuICAgIHZhciBrID0gcmVsYXRpdmVTdGFydCA8IDAgP1xyXG4gICAgICBNYXRoLm1heChsZW4gKyByZWxhdGl2ZVN0YXJ0LCAwKSA6XHJcbiAgICAgIE1hdGgubWluKHJlbGF0aXZlU3RhcnQsIGxlbik7XHJcblxyXG4gICAgLy8g0KjQsNCz0LggOS0xMC5cclxuICAgIHZhciBlbmQgPSBhcmd1bWVudHNbMl07XHJcbiAgICB2YXIgcmVsYXRpdmVFbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/XHJcbiAgICAgIGxlbiA6IGVuZCA+PiAwO1xyXG5cclxuICAgIC8vINCo0LDQsyAxMS5cclxuICAgIHZhciBmaW5hbCA9IHJlbGF0aXZlRW5kIDwgMCA/XHJcbiAgICAgIE1hdGgubWF4KGxlbiArIHJlbGF0aXZlRW5kLCAwKSA6XHJcbiAgICAgIE1hdGgubWluKHJlbGF0aXZlRW5kLCBsZW4pO1xyXG5cclxuICAgIC8vINCo0LDQsyAxMi5cclxuICAgIHdoaWxlIChrIDwgZmluYWwpIHtcclxuICAgICAgT1trXSA9IHZhbHVlO1xyXG4gICAgICBrKys7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g0KjQsNCzIDEzLlxyXG4gICAgcmV0dXJuIE87XHJcbiAgfTtcclxufVxyXG5cclxuaWYgKCFBcnJheS5wcm90b3R5cGUuZmluZCkge1xyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsICdmaW5kJywge1xyXG4gICAgdmFsdWU6IGZ1bmN0aW9uKHByZWRpY2F0ZSkge1xyXG4gICAgICd1c2Ugc3RyaWN0JztcclxuICAgICBpZiAodGhpcyA9PSBudWxsKSB7XHJcbiAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheS5wcm90b3R5cGUuZmluZCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcclxuICAgICB9XHJcbiAgICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgICB9XHJcbiAgICAgdmFyIGxpc3QgPSBPYmplY3QodGhpcyk7XHJcbiAgICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xyXG4gICAgIHZhciB0aGlzQXJnID0gYXJndW1lbnRzWzFdO1xyXG4gICAgIHZhciB2YWx1ZTtcclxuXHJcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgdmFsdWUgPSBsaXN0W2ldO1xyXG4gICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBsaXN0KSkge1xyXG4gICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmlmICghQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCkge1xyXG4gIEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXggPSBmdW5jdGlvbihwcmVkaWNhdGUpIHtcclxuICAgIGlmICh0aGlzID09IG51bGwpIHtcclxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleCBjYWxsZWQgb24gbnVsbCBvciB1bmRlZmluZWQnKTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgcHJlZGljYXRlICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcclxuICAgIH1cclxuICAgIHZhciBsaXN0ID0gT2JqZWN0KHRoaXMpO1xyXG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoID4+PiAwO1xyXG4gICAgdmFyIHRoaXNBcmcgPSBhcmd1bWVudHNbMV07XHJcbiAgICB2YXIgdmFsdWU7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICB2YWx1ZSA9IGxpc3RbaV07XHJcbiAgICAgIGlmIChwcmVkaWNhdGUuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaSwgbGlzdCkpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH07XHJcbn1cclxuXHJcbmlmICghT2JqZWN0LnZhbHVlcykge1xyXG5cdE9iamVjdC52YWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMoTykge1xyXG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKE8pLm1hcCgobmFtZSk9Pk9bbmFtZV0pIHx8IFtdO1xyXG5cdH07XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL3BvbHlmaWxsLmpzIiwiXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF1dG9OYXZpZ2F0b3Ige1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBib29rQ3RybCwgcHJvcHM9e30pIHtcclxuICAgIHByb3BzID0ge1xyXG4gICAgICAuLi5wcm9wcyxcclxuICAgICAgdXJsUGFyYW06IHByb3BzLnVybFBhcmFtIHx8ICdmYjNkLXBhZ2UnLFxyXG4gICAgICBuYXZpZ2F0ZXM6IHByb3BzLm5hdmlnYXRlcz09PXVuZGVmaW5lZD8gMTogcHJvcHMubmF2aWdhdGVzXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIHRoaXMuYm9va0N0cmwgPSBib29rQ3RybDtcclxuICAgIHRoaXMudXJsUGFyYW0gPSBwcm9wcy51cmxQYXJhbTtcclxuICAgIHRoaXMud25kID0gY29udGV4dC53bmQ7XHJcblxyXG4gICAgdGhpcy53bmQuZmIzZCA9IHtcclxuICAgICAgLi4udGhpcy53bmQuZmIzZFxyXG4gICAgfTtcclxuICAgIHRoaXMud25kLmZiM2QubmF2aWdhdG9yID0ge1xyXG4gICAgICAuLi50aGlzLnduZC5mYjNkLm5hdmlnYXRvclxyXG4gICAgfTtcclxuICAgIHRoaXMubmF2aWdhdG9yID0gdGhpcy53bmQuZmIzZC5uYXZpZ2F0b3JbdGhpcy51cmxQYXJhbV0gPSB7XHJcbiAgICAgIC4uLnRoaXMud25kLmZiM2QubmF2aWdhdG9yW3RoaXMudXJsUGFyYW1dXHJcbiAgICB9O1xyXG4gICAgdGhpcy5uYXZpZ2F0b3IuaW5zdGFuY2VzID0gKHRoaXMubmF2aWdhdG9yLmluc3RhbmNlcyB8fCAwKSsxO1xyXG5cclxuICAgIGlmKHRoaXMubmF2aWdhdG9yLmluc3RhbmNlczw9dGhpcy5wcm9wcy5uYXZpZ2F0ZXMpIHtcclxuICAgICAgdGhpcy5ib29rQ3RybC5nb1RvUGFnZSh0aGlzLmdldFBhZ2VOdW1iZXIoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGdldFBhcmFtZXRlckJ5TmFtZShuYW1lLCB1cmwpIHtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgfVxyXG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZSgvW1xcW1xcXV0vZywgJ1xcXFwkJicpO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKCdbPyZdJyArIG5hbWUgKyAnKD0oW15dKil8JnwjfCQpJyksXHJcbiAgICByZXN1bHRzID0gcmVnZXguZXhlYyh1cmwpO1xyXG4gICAgaWYgKCFyZXN1bHRzKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICghcmVzdWx0c1syXSkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChyZXN1bHRzWzJdLnJlcGxhY2UoL1xcKy9nLCAnICcpKTtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VOdW1iZXIoKSB7XHJcbiAgICBsZXQgbnVtYmVyID0gdGhpcy5nZXRQYXJhbWV0ZXJCeU5hbWUodGhpcy51cmxQYXJhbSk7XHJcbiAgICBudW1iZXIgPSBwYXJzZUludChudW1iZXIpO1xyXG4gICAgaWYoaXNOYU4obnVtYmVyKSkge1xyXG4gICAgICBudW1iZXIgPSAxO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bWJlci0xO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9BdXRvTmF2aWdhdG9yLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnTWF0aFV0aWxzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmluZGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBwKSB7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbDtcclxuICAgIHRoaXMucCA9IHtcclxuICAgICAgLi4ucCxcclxuICAgICAgYmFja1NpemU6IDIqcC5jb3Zlci5kZXB0aCtwLnNoZWV0cypwLnBhZ2UuZGVwdGhcclxuICAgIH07XHJcbiAgICB0aGlzLk9aID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwwLDEpO1xyXG5cclxuICAgIHRoaXMuYmFja0cgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkocC5jb3Zlci5kZXB0aCwgdGhpcy5wLmJhY2tTaXplLCBwLmNvdmVyLmhlaWdodCk7XHJcblxyXG4gICAgdGhpcy5tYXRlcmlhbHMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiBwLmNvdmVyLmNvbG9yfSlcclxuICAgICAgICAgICAgICAgICAgICAgXTtcclxuXHJcbiAgICBjb25zdCBiYWNrTSA9IG5ldyBUSFJFRS5NZXNoKHRoaXMuYmFja0csIG5ldyBUSFJFRS5NZXNoRmFjZU1hdGVyaWFsKHRoaXMubWF0ZXJpYWxzKSk7XHJcblxyXG4gICAgaWYocC5jb3Zlci5iaW5kZXJUZXh0dXJlIT09JycpIHtcclxuICAgICAgdGhpcy52aXN1YWwudGV4dHVyZUxvYWRlci5sb2FkKHAuY292ZXIuYmluZGVyVGV4dHVyZSwgKHRleHR1cmUpPT4ge1xyXG4gICAgICAgIHRoaXMubWF0ZXJpYWxzWzFdLmNvbG9yLnNldEhleCgweEZGRkZGRik7XHJcbiAgICAgICAgdGhpcy5tYXRlcmlhbHNbMV0ubWFwID0gdGV4dHVyZTtcclxuICAgICAgICB0ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICAgICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1hdGVyaWFsc1sxXS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGhyZWUgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMuYmFjayA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5iYWNrUlQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMuYmFja1JSID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLmJhY2tMVCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy5iYWNrTFIgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgIHRoaXMubGVmdFBpdm90ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XHJcbiAgICB0aGlzLnJpZ2h0UGl2b3QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuXHJcbiAgICB0aGlzLmJhY2suYWRkKGJhY2tNKTtcclxuICAgIHRoaXMuYmFjay5hZGQodGhpcy5sZWZ0UGl2b3QpO1xyXG4gICAgdGhpcy5iYWNrLmFkZCh0aGlzLnJpZ2h0UGl2b3QpO1xyXG4gICAgdGhpcy5iYWNrUlQuYWRkKHRoaXMuYmFjayk7XHJcbiAgICB0aGlzLmJhY2tSUi5hZGQodGhpcy5iYWNrUlQpO1xyXG4gICAgdGhpcy5iYWNrTFQuYWRkKHRoaXMuYmFja1JSKTtcclxuICAgIHRoaXMuYmFja0xSLmFkZCh0aGlzLmJhY2tMVCk7XHJcbiAgICB0aGlzLnRocmVlLmFkZCh0aGlzLmJhY2tMUik7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgZm9yKGxldCBtIG9mIHRoaXMubWF0ZXJpYWxzKSB7XHJcbiAgICAgIGlmKG0ubWFwKSB7XHJcbiAgICAgICAgbS5tYXAgPSBudWxsO1xyXG4gICAgICAgIG0ubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIG0uZGlzcG9zZSgpO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMubWF0ZXJpYWxzO1xyXG4gICAgdGhpcy5iYWNrRy5kaXNwb3NlKCk7XHJcbiAgfVxyXG5cclxuICBzZXQoYW5nbGUpIHtcclxuICAgIGxldCByaWdodCwgbGVmdDtcclxuICAgIGlmKGFuZ2xlPk1hdGguUEkvMikge1xyXG4gICAgICByaWdodCA9IE1hdGguUEkvMjtcclxuICAgICAgbGVmdCA9IGFuZ2xlLU1hdGguUEkvMjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByaWdodCA9IGFuZ2xlO1xyXG4gICAgICBsZWZ0ID0gMDtcclxuICAgIH1cclxuICAgIGNvbnN0IHAgPSB0aGlzLnAsdHIxPXt4Oi0wLjUqcC5jb3Zlci5kZXB0aCx5OjAuNSpwLmJhY2tTaXplLXAuY292ZXIuZGVwdGh9O1xyXG4gICAgdGhpcy5iYWNrUlQucG9zaXRpb24uc2V0KHRyMS54LHRyMS55LDApO1xyXG4gICAgdGhpcy5iYWNrUlIucG9zaXRpb24uc2V0KC10cjEueCwtdHIxLnksMCk7XHJcbiAgICB0aGlzLmJhY2tSUi5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodGhpcy5PWiwgcmlnaHQpO1xyXG5cclxuICAgIGNvbnN0IHRyMj17eDpwLmJhY2tTaXplLTIqcC5jb3Zlci5kZXB0aC0wLjUqcC5jb3Zlci5kZXB0aCx5OjAuNSpwLmJhY2tTaXplLXAuY292ZXIuZGVwdGh9O1xyXG4gICAgdGhpcy5iYWNrTFQucG9zaXRpb24uc2V0KHRyMi54LHRyMi55LDApO1xyXG4gICAgdGhpcy5iYWNrTFIucG9zaXRpb24uc2V0KC10cjIueCwtdHIyLnksMCk7XHJcbiAgICB0aGlzLmJhY2tMUi5xdWF0ZXJuaW9uLnNldEZyb21BeGlzQW5nbGUodGhpcy5PWiwgbGVmdCk7XHJcbiAgfVxyXG5cclxuICBzZXRMZWZ0KGFuZ2xlKSB7XHJcbiAgICBjb25zdCBQSSA9IE1hdGguUEk7XHJcbiAgICB0aGlzLmxlZnRQaXZvdC5wb3NpdGlvbi5zZXQoTWF0aFV0aWxzLmludGVycG9sYXRlTGluZWFyKFstUEksLVBJLzJdLFswLHRoaXMucC5jb3Zlci5kZXB0aF0sYW5nbGUpLDAuNSp0aGlzLnAuYmFja1NpemUtMC41KnRoaXMucC5jb3Zlci5kZXB0aCwwKTtcclxuICAgIHRoaXMubGVmdFBpdm90LnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0aGlzLk9aLCBhbmdsZSk7XHJcbiAgfVxyXG5cclxuICBzZXRSaWdodChhbmdsZSkge1xyXG4gICAgY29uc3QgUEkgPSBNYXRoLlBJO1xyXG4gICAgICB0aGlzLnJpZ2h0UGl2b3QucG9zaXRpb24uc2V0KE1hdGhVdGlscy5pbnRlcnBvbGF0ZUxpbmVhcihbLVBJLzIsMF0sW3RoaXMucC5jb3Zlci5kZXB0aCwwXSxhbmdsZSksLTAuNSp0aGlzLnAuYmFja1NpemUrMC41KnRoaXMucC5jb3Zlci5kZXB0aCwwKTtcclxuICAgICAgdGhpcy5yaWdodFBpdm90LnF1YXRlcm5pb24uc2V0RnJvbUF4aXNBbmdsZSh0aGlzLk9aLCBhbmdsZSk7XHJcbiAgfVxyXG5cclxuICBqb2luTGVmdENvdmVyKGNvdmVyKSB7XHJcbiAgICBjb3Zlci50aHJlZS5wb3NpdGlvbi5zZXQoMCwtMC41KnRoaXMucC5jb3Zlci5kZXB0aCwwKTtcclxuICAgIHRoaXMubGVmdFBpdm90LmFkZChjb3Zlci50aHJlZSk7XHJcbiAgfVxyXG5cclxuICBkaXNjb25uZWN0TGVmdENvdmVyKGNvdmVyKSB7XHJcbiAgICB0aGlzLmxlZnRQaXZvdC5yZW1vdmUoY292ZXIudGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgam9pblJpZ2h0Q292ZXIoY292ZXIpIHtcclxuICAgIGNvdmVyLnRocmVlLnBvc2l0aW9uLnNldCgwLC0wLjUqdGhpcy5wLmNvdmVyLmRlcHRoLDApO1xyXG4gICAgdGhpcy5yaWdodFBpdm90LmFkZChjb3Zlci50aHJlZSk7XHJcbiAgfVxyXG5cclxuICBkaXNjb25uZWN0UmlnaHRDb3Zlcihjb3Zlcikge1xyXG4gICAgdGhpcy5yaWdodFBpdm90LnJlbW92ZShjb3Zlci50aHJlZSk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9CaW5kZXIuanMiLCJpbXBvcnQgeyQsIFRIUkVFfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IHtwcm9wcyBhcyAgYm9va1Byb3BzfSBmcm9tICcuLi9wcm9wcy9ib29rJztcclxuaW1wb3J0IEdyYXBoVXRpbHMgZnJvbSAnR3JhcGhVdGlscyc7XHJcbmltcG9ydCBCaW5kZXIgZnJvbSAnLi9CaW5kZXInO1xyXG5pbXBvcnQgQ292ZXIgZnJvbSAnLi9Db3Zlcic7XHJcbmltcG9ydCBTaGVldEJsb2NrIGZyb20gJy4vU2hlZXRCbG9jayc7XHJcbmltcG9ydCBTaGVldFBoeXNpY3MgZnJvbSAnLi9TaGVldFBoeXNpY3MnO1xyXG5pbXBvcnQgUGFnZU1hbmFnZXIgZnJvbSAnLi9QYWdlTWFuYWdlcic7XHJcbmltcG9ydCBDU1NMYXllciBmcm9tICdDU1NMYXllcic7XHJcbmltcG9ydCBDc3NMYXllcnNNYW5hZ2VyIGZyb20gJy4vQ3NzTGF5ZXJzTWFuYWdlcic7XHJcbmltcG9ydCBTZWFyY2hFbmdpbmUgZnJvbSAnLi9TZWFyY2hFbmdpbmUnO1xyXG5pbXBvcnQgQ3VzdG9tRXZlbnRDb252ZXJ0ZXIgZnJvbSAnQ3VzdG9tRXZlbnRDb252ZXJ0ZXInO1xyXG5pbXBvcnQgQ2lyY2xlVGFyZ2V0IGZyb20gJ3RhcmdldHMvQ2lyY2xlVGFyZ2V0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2sgZXh0ZW5kcyBUSFJFRS5FdmVudERpc3BhdGNoZXIge1xyXG4gIC8vIHBhZ2VDYWxsYmFjayBzYW1wbGVzXHJcblxyXG4gIC8vIChuKT0+ICh7XHJcbiAgLy8gICB0eXBlOiAnaW1hZ2UnLFxyXG4gIC8vICAgc3JjOiAnc2FtcGxlLnBuZycsXHJcbiAgLy8gICBpbnRlcmFjdGl2ZTogZmFsc2VcclxuICAvLyB9KTtcclxuICAvL1xyXG4gIC8vIChuKT0+ICh7XHJcbiAgLy8gICB0eXBlOiAnaHRtbCcsXHJcbiAgLy8gICBzcmM6ICdzYW1wbGUuaHRtbCcsXHJcbiAgLy8gICBpbnRlcmFjdGl2ZTogdHJ1ZVxyXG4gIC8vIH0pO1xyXG4gIC8vXHJcbiAgLy8gY29uc3QgcGRmID0gbmV3IFBkZignc2FtcGxlLnBkZicpO1xyXG4gIC8vIChuKT0+ICh7XHJcbiAgLy8gICB0eXBlOiAncGRmJyxcclxuICAvLyAgIHNyYzogcGRmLFxyXG4gIC8vICAgaW50ZXJhY3RpdmU6IGZhbHNlXHJcbiAgLy8gfSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgc2hlZXRzLCBwYWdlQ2FsbGJhY2ssIHByb3BzKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgc2hlZXRzID0gTWF0aC5taW4oMywgc2hlZXRzKTtcclxuICAgIHZpc3VhbC5qQ29udGFpbmVyLmFwcGVuZChgXHJcbiAgICAgIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cclxuICAgICAgICAuZGVtby1tc2cge1xyXG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgdG9wOiAxMHB4O1xyXG4gICAgICAgICAgcmlnaHQ6IDEwcHg7XHJcbiAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZTRlMTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDtcclxuICAgICAgICB9XHJcbiAgICAgIDwvc3R5bGU+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkZW1vLW1zZ1wiPlxyXG4gICAgICAgIFRoaXMgaXMgdGhlIGRlbW8gdmVyc2lvbiwgb25seSAxMCBwYWdlcyBhcmUgYXZhaWxhYmxlLiBVc2UgdGhlIDxhIGhyZWY9XCJodHRwczovL2dvby5nbC9idDNaaGhcIiB0YXJnZXQ9XCJfYmxhbmtcIj5mdWxsIHZlcnNpb248L2E+LlxyXG4gICAgICA8L2Rpdj5cclxuICAgIGApO1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLm1vdXNlQ29udHJvbGxlciA9IHRydWU7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIC4uLkJvb2sucHJlcGFyZVByb3BzKHByb3BzKSxcclxuICAgICAgc2hlZXRzLFxyXG4gICAgICBwYWdlQ2FsbGJhY2ssXHJcbiAgICAgIHpvb206IDEsXHJcbiAgICAgIHNpbmdsZVBhZ2U6IGZhbHNlLFxyXG4gICAgICBhdXRvUmVzb2x1dGlvbjoge1xyXG4gICAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgICAgazogMS41XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyID0gbmV3IFBhZ2VNYW5hZ2VyKHZpc3VhbCwgdGhpcywgdGhpcy5wKTtcclxuICAgIENTU0xheWVyLmluaXQodmlzdWFsLmRvYyk7XHJcbiAgICB0aGlzLmxheWVyTWFuYWdlciA9IG5ldyBDc3NMYXllcnNNYW5hZ2VyKHRoaXMpO1xyXG4gICAgdGhpcy5zZWFyY2hFbmdpbmUgPSBuZXcgU2VhcmNoRW5naW5lKHBhZ2VDYWxsYmFjaywgMiooc2hlZXRzKzIpKTtcclxuICAgIHRoaXMuc2VhcmNoRW5naW5lLm9uUGFnZUhpdHNDaGFuZ2VkID0gKHBhZ2UsIHF1ZXJ5KT0+IHtcclxuICAgICAgdGhpcy5wYWdlTWFuYWdlci5yZWZyZXNoUGFnZVF1ZXJ5KHBhZ2UsIHF1ZXJ5KTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgICB0eXBlOiAnc2VhcmNoUmVzdWx0cycsXHJcbiAgICAgICAgcmVzdWx0czogdGhpcy5zZWFyY2hFbmdpbmUucmVzdWx0cyxcclxuICAgICAgICBsYXN0UGFnZTogcGFnZSxcclxuICAgICAgICBxdWVyeVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy50aHJlZSA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG5cclxuICAgIHRoaXMuYmluZGVyID0gbmV3IEJpbmRlcih2aXN1YWwsIHRoaXMucCk7XHJcbiAgICB0aGlzLnRocmVlLmFkZCh0aGlzLmJpbmRlci50aHJlZSk7XHJcblxyXG4gICAgdGhpcy5sZWZ0Q292ZXIgPSBuZXcgQ292ZXIodmlzdWFsLCB7Li4udGhpcy5wLCBzZXRUZXh0dXJlOiB0aGlzLnNldExlZnRDb3ZlclRleHR1cmUuYmluZCh0aGlzKX0sIE1hdGguUEkvMiwgJ29wZW5lZCcpO1xyXG4gICAgdGhpcy5iaW5kZXIuam9pbkxlZnRDb3Zlcih0aGlzLmxlZnRDb3Zlcik7XHJcbiAgICB0aGlzLnN1YnNjcmliZVNoZWV0QmxvY2sodGhpcy5sZWZ0Q292ZXIsIDApO1xyXG4gICAgdGhpcy5yaWdodENvdmVyID0gbmV3IENvdmVyKHZpc3VhbCwgey4uLnRoaXMucCwgc2V0VGV4dHVyZTogdGhpcy5zZXRSaWdodENvdmVyVGV4dHVyZS5iaW5kKHRoaXMpfSwgMCwgJ2Nsb3NlZCcpO1xyXG4gICAgdGhpcy5iaW5kZXIuam9pblJpZ2h0Q292ZXIodGhpcy5yaWdodENvdmVyKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlU2hlZXRCbG9jayh0aGlzLnJpZ2h0Q292ZXIsIDIqKHRoaXMucC5zaGVldHMrMSkpO1xyXG5cclxuICAgIHRoaXMudGhyZWVTaGVldEJsb2NrcyA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgdGhpcy50aHJlZS5hZGQodGhpcy50aHJlZVNoZWV0QmxvY2tzKTtcclxuICAgIHRoaXMudGhyZWVTaGVldEJsb2Nrcy5wb3NpdGlvbi5zZXQoMC41KnRoaXMucC5jb3Zlci5kZXB0aC0wLjUqc2hlZXRzKnRoaXMucC5wYWdlLmRlcHRoLC0wLjUqc2hlZXRzKnRoaXMucC5wYWdlLmRlcHRoLDApO1xyXG5cclxuICAgIHRoaXMuc2hlZXRCbG9ja3MgPSBbXTtcclxuICAgIGlmKHNoZWV0cz4wKSB7XHJcbiAgICAgIHRoaXMuYWRkU2hlZXRCbG9jaygwLCBuZXcgU2hlZXRCbG9jayh2aXN1YWwsIHsuLi50aGlzLnAsIHNldFRleHR1cmU6IHRoaXMuc2V0UGFnZVRleHR1cmUuYmluZCh0aGlzKX0sIDAsIHNoZWV0cywgMCwgJ2Nsb3NlZCcpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFuZ2xlID0gdGhpcy5wLnJ0bD8gTWF0aC5QSTogMDtcclxuICAgIHRoaXMuY2xvc2VkQW5nbGUgPSAwO1xyXG4gICAgdGhpcy5zZXQodGhpcy5hbmdsZSwwKTtcclxuICAgIHRoaXMubGFzdE1vdXNlUG9zID0ge1xyXG4gICAgICB0OiAwXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudGhyZWUucG9zaXRpb24uc2V0KC0wLjUqdGhpcy5wLmNvdmVyLmRlcHRoKzAuNSpzaGVldHMqdGhpcy5wLnBhZ2UuZGVwdGgsMCwwKTtcclxuICAgIHRoaXMuc2hlZXRQaHlzaWNzID0gbmV3IFNoZWV0UGh5c2ljcyh0aGlzLnAucGFnZS53aWR0aC90aGlzLnAuc2NhbGUsIHRoaXMucC5ncmF2aXR5LCB0aGlzLnAucGFnZS5jb3JuZXJEZXZpYXRpb24pO1xyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIHVwZGF0ZTogdGhpcy51cGRhdGUuYmluZCh0aGlzKSxcclxuICAgICAgbGFzdE1vdXNlUG9zOiAoZSk9PiB7XHJcbiAgICAgICAgdGhpcy5sYXN0TW91c2VQb3MgPSB7XHJcbiAgICAgICAgICAuLi50aGlzLmxhc3RNb3VzZVBvcyxcclxuICAgICAgICAgIHBhZ2VYOiBlLnBhZ2VYLFxyXG4gICAgICAgICAgcGFnZVk6IGUucGFnZVlcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy52aXN1YWwuYWRkUmVuZGVyQ2FsbGJhY2sodGhpcy5iaW5kcy51cGRhdGUpO1xyXG4gICAgJCh0aGlzLnZpc3VhbC5lbGVtZW50KS5vbignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5sYXN0TW91c2VQb3MpO1xyXG5cclxuICAgIHRoaXMuYmluZHMub25QaWNrQ2FsbGJhY2sgPSB0aGlzLm9uUGlja0NhbGxiYWNrLmJpbmQodGhpcylcclxuICAgIHRoaXMudmlzdWFsLmRyYWcub25QaWNrQ2FsbGJhY2sgPSB0aGlzLmJpbmRzLm9uUGlja0NhbGxiYWNrO1xyXG4gICAgdGhpcy5iaW5kcy5vbkRyYWdDYWxsYmFjayA9IHRoaXMub25EcmFnQ2FsbGJhY2suYmluZCh0aGlzKVxyXG4gICAgdGhpcy52aXN1YWwuZHJhZy5vbkRyYWdDYWxsYmFjayA9IHRoaXMuYmluZHMub25EcmFnQ2FsbGJhY2s7XHJcbiAgICB0aGlzLmJpbmRzLm9uUmVsZWFzZUNhbGxiYWNrID0gdGhpcy5vblJlbGVhc2VDYWxsYmFjay5iaW5kKHRoaXMpXHJcbiAgICB0aGlzLnZpc3VhbC5kcmFnLm9uUmVsZWFzZUNhbGxiYWNrID0gdGhpcy5iaW5kcy5vblJlbGVhc2VDYWxsYmFjaztcclxuXHJcbiAgICB0aGlzLmRyYWdBbmdsZSA9IDAuMDU7XHJcbiAgICB0aGlzLnRtcCA9IHtcclxuICAgICAgYm94czogW1xyXG4gICAgICAgIG5ldyBUSFJFRS5Cb3gzKCksXHJcbiAgICAgICAgbmV3IFRIUkVFLkJveDMoKVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMudmlzdWFsLmFkZE9iamVjdCh0aGlzLnRocmVlKTtcclxuICAgIHRoaXMudmlzdWFsLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucGFnZU1hbmFnZXIucmVmcmVzaFpvb20uYmluZCh0aGlzLnBhZ2VNYW5hZ2VyKSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgdGhpcy5ub3RpZnlCZWZvcmVBbmltYXRpb24oKTtcclxuICAgICAgdGhpcy5ub3RpZnlBZnRlckFuaW1hdGlvbigpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnZpc3VhbC5yZW1vdmVPYmplY3QodGhpcy50aHJlZSk7XHJcbiAgICB0aGlzLnNoZWV0UGh5c2ljcy5kaXNwb3NlKCk7XHJcbiAgICBkZWxldGUgdGhpcy52aXN1YWwuZHJhZy5vblBpY2tDYWxsYmFjaztcclxuICAgIGRlbGV0ZSB0aGlzLnZpc3VhbC5kcmFnLm9uRHJhZ0NhbGxiYWNrO1xyXG4gICAgZGVsZXRlIHRoaXMudmlzdWFsLmRyYWcub25SZWxlYXNlQ2FsbGJhY2s7XHJcbiAgICAkKHRoaXMudmlzdWFsLmVsZW1lbnQpLm9mZignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5sYXN0TW91c2VQb3MpO1xyXG4gICAgdGhpcy52aXN1YWwucmVtb3ZlUmVuZGVyQ2FsbGJhY2sodGhpcy5iaW5kcy51cGRhdGUpO1xyXG4gICAgdGhpcy5yZW1vdmVTaGVldEJsb2NrcygwLCB0aGlzLnNoZWV0QmxvY2tzLmxlbmd0aCk7XHJcbiAgICB0aGlzLmJpbmRlci5kaXNjb25uZWN0TGVmdENvdmVyKHRoaXMubGVmdENvdmVyKTtcclxuICAgIHRoaXMucmVtb3ZlU2hlZXRCbG9jayh0aGlzLmxlZnRDb3Zlcik7XHJcbiAgICB0aGlzLmJpbmRlci5kaXNjb25uZWN0UmlnaHRDb3Zlcih0aGlzLnJpZ2h0Q292ZXIpO1xyXG4gICAgdGhpcy5yZW1vdmVTaGVldEJsb2NrKHRoaXMucmlnaHRDb3Zlcik7XHJcbiAgICB0aGlzLmJpbmRlci5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLmxheWVyTWFuYWdlci5kaXNwb3NlKCk7XHJcbiAgICBDU1NMYXllci5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIC8vIHB1YmxpY3Mge1xyXG5cclxuICBzZXRBdXRvUmVzb2x1dGlvbihlbmFibGUsIGs9MS41KSB7XHJcbiAgICB0aGlzLnAuYXV0b1Jlc29sdXRpb24gPSB7XHJcbiAgICAgIC4uLnRoaXMucC5hdXRvUmVzb2x1dGlvbixcclxuICAgICAgZW5hYmxlLFxyXG4gICAgICBrXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2V0Wm9vbSh6b29tLCBzaW5nbGVQYWdlKSB7XHJcbiAgICBpZihNYXRoLmFicyh0aGlzLnAuem9vbS16b29tKT4xZS0zIHx8IHNpbmdsZVBhZ2UhPT10aGlzLnAuc2luZ2xlUGFnZSkge1xyXG4gICAgICB0aGlzLnAuem9vbSA9IHpvb207XHJcbiAgICAgIHRoaXMucC5zaW5nbGVQYWdlID0gc2luZ2xlUGFnZTtcclxuICAgICAgdGhpcy5wYWdlTWFuYWdlci5yZWZyZXNoWm9vbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZUNhbGxiYWNrKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucC5wYWdlQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICBzZXRRdWVyeShxdWVyeSkge1xyXG4gICAgdGhpcy5zZWFyY2hFbmdpbmUuc2V0UXVlcnkocXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgaXNQcm9jZXNzaW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2hlZXRQaHlzaWNzLmdldFNpemUoKSE9PTA7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlcygpIHtcclxuICAgIHJldHVybiA0KzIqdGhpcy5wLnNoZWV0cztcclxuICB9XHJcblxyXG4gIHNldEZsaXBQcm9ncmVzc0NsYihjbGIpIHtcclxuICAgIHRoaXMucC5mbGlwUHJvZ3Jlc3NDbGIgPSBjbGI7XHJcbiAgfVxyXG5cclxuICBzZXRJbmplY3RvcihpbmplY3Rvcikge1xyXG4gICAgdGhpcy5wLmluamVjdG9yID0gaW5qZWN0b3I7XHJcbiAgfVxyXG5cclxuICBpc0FjdGl2ZVBhZ2Uobikge1xyXG4gICAgbGV0IHJlcyA9IHRydWU7XHJcbiAgICBpZihuPjEgJiYgbjx0aGlzLmdldFBhZ2VzKCktMikge1xyXG4gICAgICBmb3IobGV0IGIgb2YgdGhpcy5zaGVldEJsb2Nrcykge1xyXG4gICAgICAgIGlmKG4tMj4yKmIucC5maXJzdCAmJiBuLTI8MipiLnAubGFzdC0xKSB7XHJcbiAgICAgICAgICByZXMgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmxvY2tCeVBhZ2Uobikge1xyXG4gICAgbGV0IGJsb2NrO1xyXG4gICAgaWYobjwyKSB7XHJcbiAgICAgIGJsb2NrID0gdGhpcy5sZWZ0Q292ZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKG48MioodGhpcy5wLnNoZWV0cysxKSkge1xyXG4gICAgICBmb3IobGV0IGIgb2YgdGhpcy5zaGVldEJsb2Nrcykge1xyXG4gICAgICAgIGlmKG4tMj49MipiLnAuZmlyc3QgJiYgbi0yPDIqYi5wLmxhc3QpIHtcclxuICAgICAgICAgIGJsb2NrID0gYjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGJsb2NrID0gdGhpcy5yaWdodENvdmVyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJsb2NrO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmxvY2tQYWdlcyhibG9jaykge1xyXG4gICAgbGV0IHJhbmdlO1xyXG4gICAgc3dpdGNoIChibG9jaykge1xyXG4gICAgICBjYXNlIHRoaXMubGVmdENvdmVyOiB7XHJcbiAgICAgICAgICByYW5nZSA9IFswLCAxXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlIHRoaXMucmlnaHRDb3Zlcjoge1xyXG4gICAgICAgIHJhbmdlID0gWzIqKHRoaXMucC5zaGVldHMrMSksIDIqKHRoaXMucC5zaGVldHMrMSkrMV07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgIHJhbmdlID0gYmxvY2s/IFsyKihibG9jay5wLmZpcnN0KzEpLCAyKihibG9jay5wLmxhc3QrMSktMV06IHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJhbmdlO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZSgpIHtcclxuICAgIGNvbnN0IFBJID0gTWF0aC5QSTtcclxuICAgIGxldCBwO1xyXG4gICAgaWYodGhpcy5hbmdsZSA9PT0gUEkvMiB8fCB0aGlzLmFuZ2xlID09PSAzKlBJLzIpIHtcclxuICAgICAgZm9yKGxldCBibG9jayBvZiB0aGlzLnNoZWV0QmxvY2tzKSB7XHJcbiAgICAgICAgaWYoYmxvY2suYW5nbGU8PVBJLzIpIHtcclxuICAgICAgICAgIHAgPSB0aGlzLmdldEJsb2NrUGFnZXMoYmxvY2spWzBdLTE7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXApIHtcclxuICAgICAgICBwID0gdGhpcy5nZXRQYWdlcygpLTM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5hbmdsZTxQSS8yKSB7XHJcbiAgICAgIHAgPSAwO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmFuZ2xlPjMqUEkvMikge1xyXG4gICAgICBwID0gMTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5hbmdsZTxQSSkge1xyXG4gICAgICBwID0gdGhpcy5nZXRQYWdlcygpLTM7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMuYW5nbGU+PVBJKSB7XHJcbiAgICAgIHAgPSB0aGlzLmdldFBhZ2VzKCktMTtcclxuICAgIH1cclxuICAgIHJldHVybiBwO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9wUGFnZXMoKSB7XHJcbiAgICBjb25zdCBwID0gdGhpcy5nZXRQYWdlKCk7XHJcbiAgICByZXR1cm4gcD09PTAgfHwgcD09PXRoaXMuZ2V0UGFnZXMoKS0xPyBbcF06IFtwLCBwKzFdO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZVN0YXRlKG4pIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2VNYW5hZ2VyLmdldFBhZ2VTdGF0ZShuKTtcclxuICB9XHJcblxyXG4gIGVuYWJsZUxvYWRpbmdBbmltYXRpb24oZW5hYmxlKSB7XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyLmVuYWJsZUxvYWRpbmdBbmltYXRpb24oZW5hYmxlKTtcclxuICB9XHJcblxyXG4gIGdldExlZnRGbGlwcGluZygpIHtcclxuICAgIGxldCBibG9jaztcclxuICAgIGNvbnN0IGxlZnQgPSB0aGlzLnNoZWV0QmxvY2tzWzBdLCBQSSA9IE1hdGguUEk7XHJcbiAgICBpZih0aGlzLmFuZ2xlPT09UEkpIHtcclxuICAgICAgYmxvY2sgPSB0aGlzLnJpZ2h0Q292ZXI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYobGVmdCAmJiBsZWZ0LnN0YXRlPT09J2Nsb3NlZCcgJiYgbGVmdC5hbmdsZT5QSS8yKSB7XHJcbiAgICAgICAgYmxvY2sgPSBsZWZ0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5hbmdsZSA9PT0gUEkvMiB8fCB0aGlzLmFuZ2xlID09PSAzKlBJLzIpIHtcclxuICAgICAgICBibG9jayA9IHRoaXMubGVmdENvdmVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYmxvY2s7XHJcbiAgfVxyXG5cclxuICBnZXRSaWdodEZsaXBwaW5nKCkge1xyXG4gICAgbGV0IGJsb2NrO1xyXG4gICAgY29uc3QgcmlnaHQgPSB0aGlzLnNoZWV0QmxvY2tzW3RoaXMuc2hlZXRCbG9ja3MubGVuZ3RoLTFdLCBQSSA9IE1hdGguUEk7XHJcbiAgICBpZih0aGlzLmFuZ2xlPT09MCkge1xyXG4gICAgICBibG9jayA9IHRoaXMubGVmdENvdmVyO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmKHJpZ2h0ICYmIHJpZ2h0LnN0YXRlPT09J2Nsb3NlZCcgJiYgcmlnaHQuYW5nbGU8PVBJLzIpIHtcclxuICAgICAgICBibG9jayA9IHJpZ2h0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5hbmdsZT09PVBJLzIgfHwgdGhpcy5hbmdsZSA9PT0gMypQSS8yKSB7XHJcbiAgICAgICAgYmxvY2sgPSB0aGlzLnJpZ2h0Q292ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBibG9jaztcclxuICB9XHJcblxyXG4gIGdldENsb3NlZEJsb2NrQW5nbGUoYW5nbGUpIHtcclxuICAgIGxldCBjbG9zZWRBbmdsZSwge1BJfSA9IE1hdGg7XHJcblxyXG4gICAgaWYodGhpcy5sZWZ0Q292ZXIucGh5c2ljSWQpIHtcclxuICAgICAgbGV0IHRlc3Q7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGVzdCA9IE1hdGguYWJzKHRoaXMuc2hlZXRQaHlzaWNzLmdldFBhcmFtZXRyKHRoaXMubGVmdENvdmVyLnBoeXNpY0lkLCAnYW5nbGUnKS1hbmdsZSlcclxuICAgICAgfVxyXG4gICAgICBjYXRjaChlKSB7XHJcbiAgICAgICAgdGVzdCA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgY2xvc2VkQW5nbGUgPSBhbmdsZT5QSS8yIHx8IHRlc3Q+UEkvNj8gUEkvMjogdGhpcy5jbG9zZWRBbmdsZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodGhpcy5yaWdodENvdmVyLnBoeXNpY0lkKSB7XHJcbiAgICAgIGxldCB0ZXN0O1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRlc3QgPSBNYXRoLmFicyh0aGlzLnNoZWV0UGh5c2ljcy5nZXRQYXJhbWV0cih0aGlzLnJpZ2h0Q292ZXIucGh5c2ljSWQsICdhbmdsZScpLWFuZ2xlKVxyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICB0ZXN0ID0gMDtcclxuICAgICAgfVxyXG4gICAgICBjbG9zZWRBbmdsZSA9IGFuZ2xlPFBJLzIgfHwgdGVzdD5QSS82PyBQSS8yKzFlLTc6IHRoaXMuY2xvc2VkQW5nbGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY2xvc2VkQW5nbGUgPSBQSS8yKyhhbmdsZSE9PTApKjFlLTc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgb3BlbmVkQW5nbGU6IGFuZ2xlLFxyXG4gICAgICBjbG9zZWRBbmdsZSxcclxuICAgICAgYmluZGVyVHVybjogdGhpcy5jbG9zZWRBbmdsZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGZsaXBMZWZ0KHNpemU9MSwgcHJvZ3Jlc3NDbGI9dGhpcy5wLmZsaXBQcm9ncmVzc0NsYikge1xyXG4gICAgbGV0IGJsb2NrLCByZXM7XHJcbiAgICBpZih0aGlzLnNoZWV0UGh5c2ljcy5nZXRTaXplKCk8MjUpIHtcclxuICAgICAgY29uc3QgbGVmdCA9IHRoaXMuc2hlZXRCbG9ja3NbMF0sIFBJID0gTWF0aC5QSTtcclxuICAgICAgaWYodGhpcy5hbmdsZT09PVBJKSB7XHJcbiAgICAgICAgcmVzID0gdGhpcy5jb25uZWN0UGh5c2ljcyhcclxuICAgICAgICAgIGJsb2NrPXRoaXMucmlnaHRDb3ZlcixcclxuICAgICAgICAgIHRoaXMucC5jb3Zlci5tYXNzLFxyXG4gICAgICAgICAgUEksXHJcbiAgICAgICAgICAtdGhpcy5wLmNvdmVyLnN0YXJ0VmVsb2NpdHksXHJcbiAgICAgICAgICB0aGlzLnAuY292ZXIuZmxleGliaWxpdHksXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PnRoaXMuc2V0KDMqUEkvMi1hbmdsZS8yLGhlaWdodCksXHJcbiAgICAgICAgICAoYW5nbGUsaGVpZ2h0KT0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXQoMypQSS8yLWFuZ2xlLzIsMCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoYW5nbGU/IFBJOiBQSS8yKzFlLTcsJ2Nsb3NlZCcpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHByb2dyZXNzQ2xiXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZihsZWZ0ICYmIGxlZnQuc3RhdGU9PT0nY2xvc2VkJyAmJiBsZWZ0LmFuZ2xlPlBJLzIpIHtcclxuICAgICAgICAgIGJsb2NrID0gc2l6ZTxsZWZ0LmdldFNpemUoKT8gdGhpcy5zcGxpdFNoZWV0QmxvY2soMCwgbGVmdC5nZXRTaXplKCktc2l6ZSlbMV06IGxlZnQ7XHJcbiAgICAgICAgICByZXMgPSB0aGlzLmNvbm5lY3RQaHlzaWNzKFxyXG4gICAgICAgICAgICBibG9jayxcclxuICAgICAgICAgICAgdGhpcy5wLnBhZ2UubWFzcypibG9jay5nZXRTaXplKCksXHJcbiAgICAgICAgICAgIFBJLFxyXG4gICAgICAgICAgICAtdGhpcy5wLnBhZ2Uuc3RhcnRWZWxvY2l0eSxcclxuICAgICAgICAgICAgdGhpcy5wLnBhZ2UuZmxleGliaWxpdHksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT5ibG9jay5zZXQodGhpcy5nZXRDbG9zZWRCbG9ja0FuZ2xlKGFuZ2xlKSwnb3BlbmVkJyxoZWlnaHQpLFxyXG4gICAgICAgICAgICBCb29rLmZpbmlzaEFuaW1hdGlvbkNsYi5iaW5kKHtib29rOiB0aGlzLCBibG9ja30pLFxyXG4gICAgICAgICAgICBwcm9ncmVzc0NsYlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmFuZ2xlID09PSBQSS8yIHx8IHRoaXMuYW5nbGUgPT09IDMqUEkvMikge1xyXG4gICAgICAgICAgcmVzID0gdGhpcy5jb25uZWN0UGh5c2ljcyhcclxuICAgICAgICAgICAgYmxvY2s9dGhpcy5sZWZ0Q292ZXIsXHJcbiAgICAgICAgICAgIHRoaXMucC5jb3Zlci5tYXNzLFxyXG4gICAgICAgICAgICBQSSxcclxuICAgICAgICAgICAgLXRoaXMucC5jb3Zlci5zdGFydFZlbG9jaXR5LFxyXG4gICAgICAgICAgICB0aGlzLnAuY292ZXIuZmxleGliaWxpdHksXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0KDIqUEktYW5nbGUvMixoZWlnaHQpO1xyXG4gICAgICAgICAgICAgIGlmKGFuZ2xlPlBJLzIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoYW5nbGU/IFBJLzI6IDAsJ2Nsb3NlZCcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PiB0aGlzLnNldChhbmdsZT09PTA/IDA6IDIqUEktYW5nbGUvMiwwKSxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NDbGJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgZmxpcFJpZ2h0KHNpemU9MSwgcHJvZ3Jlc3NDbGI9dGhpcy5wLmZsaXBQcm9ncmVzc0NsYikge1xyXG4gICAgbGV0IGJsb2NrLCByZXM7XHJcbiAgICBpZih0aGlzLnNoZWV0UGh5c2ljcy5nZXRTaXplKCk8MjUpIHtcclxuICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLnNoZWV0QmxvY2tzW3RoaXMuc2hlZXRCbG9ja3MubGVuZ3RoLTFdLCBQSSA9IE1hdGguUEk7XHJcbiAgICAgIGlmKHRoaXMuYW5nbGU9PT0wKSB7XHJcbiAgICAgICAgcmVzID0gdGhpcy5jb25uZWN0UGh5c2ljcyhcclxuICAgICAgICAgIGJsb2NrPXRoaXMubGVmdENvdmVyLFxyXG4gICAgICAgICAgdGhpcy5wLmNvdmVyLm1hc3MsXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgdGhpcy5wLmNvdmVyLnN0YXJ0VmVsb2NpdHksXHJcbiAgICAgICAgICB0aGlzLnAuY292ZXIuZmxleGliaWxpdHksXHJcbiAgICAgICAgICAwLFxyXG4gICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PnRoaXMuc2V0KGFuZ2xlLzIsaGVpZ2h0KSxcclxuICAgICAgICAgIChhbmdsZSxoZWlnaHQpPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldChhbmdsZS8yLDApO1xyXG4gICAgICAgICAgICB0aGlzLnNldFNoZWV0QmxvY2tzKGFuZ2xlPyBQSS8yOiAwLCdjbG9zZWQnKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwcm9ncmVzc0NsYlxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYocmlnaHQgJiYgcmlnaHQuc3RhdGU9PT0nY2xvc2VkJyAmJiByaWdodC5hbmdsZTw9UEkvMikge1xyXG4gICAgICAgICAgYmxvY2sgPSBzaXplPHJpZ2h0LmdldFNpemUoKT8gdGhpcy5zcGxpdFNoZWV0QmxvY2sodGhpcy5zaGVldEJsb2Nrcy5sZW5ndGgtMSwgc2l6ZSlbMF06IHJpZ2h0O1xyXG4gICAgICAgICAgcmVzID0gdGhpcy5jb25uZWN0UGh5c2ljcyhcclxuICAgICAgICAgICAgYmxvY2ssXHJcbiAgICAgICAgICAgIHRoaXMucC5wYWdlLm1hc3MqYmxvY2suZ2V0U2l6ZSgpLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0aGlzLnAucGFnZS5zdGFydFZlbG9jaXR5LFxyXG4gICAgICAgICAgICB0aGlzLnAucGFnZS5mbGV4aWJpbGl0eSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PmJsb2NrLnNldCh0aGlzLmdldENsb3NlZEJsb2NrQW5nbGUoYW5nbGUpLCdvcGVuZWQnLGhlaWdodCksXHJcbiAgICAgICAgICAgIEJvb2suZmluaXNoQW5pbWF0aW9uQ2xiLmJpbmQoe2Jvb2s6IHRoaXMsIGJsb2NrfSksXHJcbiAgICAgICAgICAgIHByb2dyZXNzQ2xiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMuYW5nbGU9PT1QSS8yIHx8IHRoaXMuYW5nbGUgPT09IDMqUEkvMikge1xyXG4gICAgICAgICAgcmVzID0gdGhpcy5jb25uZWN0UGh5c2ljcyhcclxuICAgICAgICAgICAgYmxvY2s9dGhpcy5yaWdodENvdmVyLFxyXG4gICAgICAgICAgICB0aGlzLnAuY292ZXIubWFzcyxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgdGhpcy5wLmNvdmVyLnN0YXJ0VmVsb2NpdHksXHJcbiAgICAgICAgICAgIHRoaXMucC5jb3Zlci5mbGV4aWJpbGl0eSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXQoUEkvMithbmdsZS8yLGhlaWdodCk7XHJcbiAgICAgICAgICAgICAgaWYoYW5nbGU8UEkvMikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhQSS8yKzFlLTcsJ2Nsb3NlZCcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKGFuZ2xlLGhlaWdodCk9PnRoaXMuc2V0KFBJLzIrYW5nbGUvMiwwKSxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NDbGJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzO1xyXG4gIH1cclxuXHJcbiAgLy8gfVxyXG5cclxuICBjbGVhckhvdmVySW5mbygpIHtcclxuICAgIHRoaXMucGFnZU1hbmFnZXIudHVybk9uRXZlbnRzKCk7XHJcbiAgICBkZWxldGUgdGhpcy5ob3ZlckluZm8uYmxvY2suZm9yY2U7XHJcbiAgICBkZWxldGUgdGhpcy5ob3ZlckluZm8uYmxvY2suY29ybmVyRm9yY2U7XHJcbiAgICBkZWxldGUgdGhpcy5ob3ZlckluZm87XHJcbiAgfVxyXG5cclxuICB4U2VnbWVudCgpIHtcclxuICAgIGNvbnN0IGJveHMgPSB0aGlzLnRtcC5ib3hzLCByZXMgPSB7fTtcclxuICAgIGlmKHRoaXMubGVmdENvdmVyLnBoeXNpY0lkKSB7XHJcbiAgICAgIGJveHNbMF0uc2V0RnJvbU9iamVjdCh0aGlzLnJpZ2h0Q292ZXIudGhyZWUpO1xyXG4gICAgICByZXMubWluID0gLShyZXMubWF4ID0gYm94c1swXS5tYXgueCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKHRoaXMucmlnaHRDb3Zlci5waHlzaWNJZCkge1xyXG4gICAgICBib3hzWzBdLnNldEZyb21PYmplY3QodGhpcy5sZWZ0Q292ZXIudGhyZWUpO1xyXG4gICAgICByZXMubWF4ID0gLShyZXMubWluID0gYm94c1swXS5taW4ueCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgYm94c1swXS5zZXRGcm9tT2JqZWN0KHRoaXMubGVmdENvdmVyLnRocmVlKTtcclxuICAgICAgYm94c1sxXS5zZXRGcm9tT2JqZWN0KHRoaXMucmlnaHRDb3Zlci50aHJlZSk7XHJcbiAgICAgIGJveHNbMF0udW5pb24oYm94c1sxXSk7XHJcbiAgICAgIHJlcy5taW4gPSBib3hzWzBdLm1pbi54O1xyXG4gICAgICByZXMubWF4ID0gYm94c1swXS5tYXgueDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBjb21wdXRlVGFyZ2V0KHBvaW50KSB7XHJcbiAgICBsZXQge3gsIHl9ID0gcG9pbnQsIHNlZyA9IHRoaXMueFNlZ21lbnQoKSwgYW5nbGU7XHJcbiAgICBhbmdsZSA9IChzZWcubWF4LXgpLyhzZWcubWF4LXNlZy5taW4pKk1hdGguUEk7XHJcbiAgICAvLyBhbmdsZSA9IE1hdGguYWNvcyh4L01hdGguc3FydCh4KngreSp5KSk7XHJcbiAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5kcmFnQW5nbGUsIE1hdGgubWluKE1hdGguUEktdGhpcy5kcmFnQW5nbGUsIGFuZ2xlKSk7XHJcbiAgfVxyXG5cclxuICBvblBpY2tDYWxsYmFjayhvYmplY3QpIHtcclxuICAgIGxldCByZXMgPSBmYWxzZTtcclxuICAgIGNvbnN0IGJsb2NrID0gb2JqZWN0Lm9iamVjdC51c2VyRGF0YS5zZWxmLFxyXG4gICAgICAgICAgcCA9IHsuLi5vYmplY3QudXZ9LCBpID0gb2JqZWN0LmZhY2UubWF0ZXJpYWxJbmRleDtcclxuICAgIGlmKGk8Mikge1xyXG4gICAgICBwLnggPSBpPT09MD8gcC54OiAxLXAueDtcclxuICAgICAgaWYoYmxvY2suY29ybmVyVGFyZ2V0LnRlc3RJbnRlcnNlY3Rpb24obnVsbCwgcCkgJiYgYmxvY2sucGh5c2ljSWQpIHtcclxuICAgICAgICBpZih0aGlzLmhvdmVySW5mbykge1xyXG4gICAgICAgICAgdGhpcy5jbGVhckhvdmVySW5mbygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBibG9jay5mb3JjZSA9IFNoZWV0UGh5c2ljcy5kcmFnRm9yY2VDbGI7XHJcbiAgICAgICAgYmxvY2suY29ybmVyRm9yY2UgPSBTaGVldFBoeXNpY3MuZ2V0RHJhZ0Nvcm5lckZvcmNlQ2xiKHRoaXMuY29tcHV0ZVRhcmdldChvYmplY3QucG9pbnQpKTtcclxuICAgICAgICB0aGlzLmRyYWdJbmZvID0ge1xyXG4gICAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgICAgYmxvY2tcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlcyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYWdlTWFuYWdlci50dXJuT2ZmRXZlbnRzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdDYWxsYmFjayhwb2ludCkge1xyXG4gICAgY29uc3QgYmxvY2sgPSB0aGlzLmRyYWdJbmZvLmJsb2NrLCBwID0gYmxvY2suZ2V0UHJvcHMoKTtcclxuICAgIGJsb2NrLmZvcmNlID0gU2hlZXRQaHlzaWNzLmRyYWdGb3JjZUNsYjtcclxuICAgIGJsb2NrLmNvcm5lckZvcmNlID0gU2hlZXRQaHlzaWNzLmdldERyYWdDb3JuZXJGb3JjZUNsYih0aGlzLmNvbXB1dGVUYXJnZXQocG9pbnQpKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25SZWxlYXNlQ2FsbGJhY2soKSB7XHJcbiAgICBkZWxldGUgdGhpcy5kcmFnSW5mby5ibG9jay5mb3JjZTtcclxuICAgIGRlbGV0ZSB0aGlzLmRyYWdJbmZvLmJsb2NrLmNvcm5lckZvcmNlO1xyXG4gICAgZGVsZXRlIHRoaXMuZHJhZ0luZm87XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyLnR1cm5PbkV2ZW50cygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmxpcHBpbmcoaSkge1xyXG4gICAgcmV0dXJuIGk/IHRoaXMuZ2V0TGVmdEZsaXBwaW5nKCk6IHRoaXMuZ2V0UmlnaHRGbGlwcGluZygpO1xyXG4gIH1cclxuXHJcbiAgZmxpcChpLCBzaXplPTEpIHtcclxuICAgIHJldHVybiBpPyB0aGlzLmZsaXBMZWZ0KHNpemUpOiB0aGlzLmZsaXBSaWdodChzaXplKTtcclxuICB9XHJcblxyXG4gIGVuYWJsZU1vdXNlKGVuYWJsZSkge1xyXG4gICAgdGhpcy5tb3VzZUNvbnRyb2xsZXIgPSBlbmFibGU7XHJcbiAgfVxyXG5cclxuICBjb3JuZXJDYWxsYmFjayhlLCBkYXRhKSB7XHJcbiAgICBpZih0aGlzLm1vdXNlQ29udHJvbGxlcikge1xyXG4gICAgICBjb25zdCB7aSwgbn0gPSBkYXRhLmRhdGE7XHJcbiAgICAgIGlmKGUudHlwZT09PSdtb3VzZW92ZXInKSB7XHJcbiAgICAgICAgaWYodGhpcy5ob3ZlckluZm8gJiYgdGhpcy5ob3ZlckluZm8ucGVuZGluZ3MhPT11bmRlZmluZWQpIHtcclxuICAgICAgICAgICsrdGhpcy5ob3ZlckluZm8ucGVuZGluZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYodGhpcy5ob3ZlckluZm8pIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXcm9uZyBzdGF0ZTogZWxlbWVudCBpcyBhbHJlYWR5IGhvdmVyJyk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuaG92ZXJJbmZvLm4hPT1uKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckhvdmVySW5mbygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZighdGhpcy5ob3ZlckluZm8gJiYgIXRoaXMuZHJhZ0luZm8pIHtcclxuICAgICAgICAgICAgbGV0IHJlcyA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBjb25zdCBob3ZlckFuZ2xlID0gMC4wMixcclxuICAgICAgICAgICAgICAgICAgaG92ZXIgPSB0aGlzLmdldEJsb2NrQnlQYWdlKG4pLFxyXG4gICAgICAgICAgICAgICAgICBwb3NzaWJsZSA9IHRoaXMuZ2V0RmxpcHBpbmcoaSk7XHJcbiAgICAgICAgICAgIGlmKG4+MSAmJiBuPDIqKHRoaXMucC5zaGVldHMrMSkgJiYgaG92ZXIucGh5c2ljSWQgJiYgKGhvdmVyLmFuZ2xlPGhvdmVyQW5nbGUgfHwgaG92ZXIuYW5nbGU+TWF0aC5QSS1ob3ZlckFuZ2xlKSkge1xyXG4gICAgICAgICAgICAgIHJlcyA9IFByb21pc2UucmVzb2x2ZShob3Zlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihob3Zlcj09PXBvc3NpYmxlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlZXRCbG9ja3MgPSBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRDb3ZlcixcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2hlZXRCbG9ja3MsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q292ZXJcclxuICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGogPSBzaGVldEJsb2Nrcy5pbmRleE9mKGhvdmVyKSwgbmV4dEJsb2NrID0gfmo/IHNoZWV0QmxvY2tzW2orMippLTFdOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgaWYoIW5leHRCbG9jayB8fCAhbmV4dEJsb2NrLnBoeXNpY0lkIHx8IG5leHRCbG9jay5hbmdsZT5ob3ZlckFuZ2xlICYmIG5leHRCbG9jay5hbmdsZTxNYXRoLlBJLWhvdmVyQW5nbGUpIHtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHRoaXMuZmxpcChpLCAxKS50aGVuKChibG9jayk9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmKCFibG9jaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmhvdmVySW5mbztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoZWV0UGh5c2ljcy5zZXRQYXJhbWV0cihibG9jay5waHlzaWNJZCwgJ3ZlbG9jaXR5JywgMCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhvdmVySW5mbyA9IHtcclxuICAgICAgICAgICAgICAgICAgcGVuZGluZ3M6IDFcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcy50aGVuKChibG9jayk9PiB7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5ob3ZlckluZm8gJiYgdGhpcy5ob3ZlckluZm8ucGVuZGluZ3M8MSkge1xyXG4gICAgICAgICAgICAgICAgYmxvY2sgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5ob3ZlckluZm87XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKGJsb2NrKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyLnR1cm5PZmZFdmVudHMoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICBwID0gYmxvY2suZ2V0UHJvcHMoKTtcclxuICAgICAgICAgICAgICAgIGJsb2NrLmZvcmNlID0gdGhpcy5zaGVldFBoeXNpY3MuZ2V0VGFyZ2V0Rm9yY2VDbGIocC5tYXNzKmJsb2NrLmdldFNpemUoKSwgaT8gTWF0aC5QSS1ob3ZlckFuZ2xlOiBob3ZlckFuZ2xlKTtcclxuICAgICAgICAgICAgICAgIGJsb2NrLmNvcm5lckZvcmNlID0gKCk9PiAoaT8gLTE6IDEpKlNoZWV0UGh5c2ljcy5ob3ZlckNvcm5lckZvcmNlQ2xiKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoZWV0UGh5c2ljcy5zZXRQYXJhbWV0cihibG9jay5waHlzaWNJZCwgJ2FuZ2xlJywgaT8gTWF0aC5QSS0wLjUqaG92ZXJBbmdsZTogMC41KmhvdmVyQW5nbGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ob3ZlckluZm8gPSB7XHJcbiAgICAgICAgICAgICAgICAgIG4sXHJcbiAgICAgICAgICAgICAgICAgIGJsb2NrXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGUoMS8zMCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5ob3ZlckluZm8gJiYgZS50eXBlPT09J21vdXNlb3V0Jykge1xyXG4gICAgICAgIGlmKHRoaXMuaG92ZXJJbmZvLnBlbmRpbmdzIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAtLXRoaXMuaG92ZXJJbmZvLnBlbmRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKG49PT10aGlzLmhvdmVySW5mby5uKSB7XHJcbiAgICAgICAgICB0aGlzLmNsZWFySG92ZXJJbmZvKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYoZS50eXBlPT09J21vdXNlZG93bicpIHtcclxuICAgICAgICB0aGlzLmNvcm5lckNsaWNrRGF0YSA9IHtcclxuICAgICAgICAgIHg6IGUucGFnZVgsXHJcbiAgICAgICAgICB5OiBlLnBhZ2VZXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKGUudHlwZT09PSdjbGljaycpIHtcclxuICAgICAgICBpZihNYXRoLnNxcnQoTWF0aC5wb3codGhpcy5jb3JuZXJDbGlja0RhdGEueC1lLnBhZ2VYLDIpK01hdGgucG93KHRoaXMuY29ybmVyQ2xpY2tEYXRhLnktZS5wYWdlWSwyKSk8NSkge1xyXG4gICAgICAgICAgY29uc3QgaG92ZXIgPSB0aGlzLmdldEJsb2NrQnlQYWdlKG4pO1xyXG4gICAgICAgICAgaWYoaG92ZXIucGh5c2ljSWQpIHtcclxuICAgICAgICAgICAgY29uc3QgaWQgPSBob3Zlci5waHlzaWNJZCxcclxuICAgICAgICAgICAgICAgICAgcHJvcHMgPSBob3Zlci5nZXRQcm9wcygpO1xyXG4gICAgICAgICAgICB0aGlzLnNoZWV0UGh5c2ljcy5zZXRQYXJhbWV0cihpZCwgJ3ZlbG9jaXR5JywgKGk/IC0xOiAxKSpwcm9wcy5zdGFydFZlbG9jaXR5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuY29ybmVyQ2xpY2tEYXRhO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRTaGVldEJsb2NrKHAsIGJsb2NrKSB7XHJcbiAgICB0aGlzLnNoZWV0QmxvY2tzLnNwbGljZShwLCAwLCBibG9jayk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVNoZWV0QmxvY2soYmxvY2ssIDIpO1xyXG4gICAgdGhpcy50aHJlZVNoZWV0QmxvY2tzLmFkZChibG9jay50aHJlZSk7XHJcbiAgfVxyXG5cclxuICBzdWJzY3JpYmVTaGVldEJsb2NrKGJsb2NrLCBvZmZzZXQpIHtcclxuICAgIGNvbnN0IGV2ZW50Q29udmVydGVyID0gbmV3IEN1c3RvbUV2ZW50Q29udmVydGVyKHRoaXMudmlzdWFsLnduZCwgdGhpcy52aXN1YWwuZG9jLCBDaXJjbGVUYXJnZXQudGVzdCksXHJcbiAgICAgICAgICByID0gMC4xNSxcclxuICAgICAgICAgIHRhcmdldCA9IG5ldyBDaXJjbGVUYXJnZXQoMS0wLjUqciwgMC41KnIsIHIpO1xyXG4gICAgdGFyZ2V0LmJsb2NrID0gYmxvY2s7XHJcbiAgICB0YXJnZXQuY2FsbGJhY2sgPSB0aGlzLmNvcm5lckNhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICBldmVudENvbnZlcnRlci5hZGRDdXN0b20odGFyZ2V0KTtcclxuICAgIGJsb2NrLmNvcm5lclRhcmdldCA9IHRhcmdldDtcclxuICAgIGJsb2NrLnRocmVlLnVzZXJEYXRhLm1vdXNlQ2FsbGJhY2sgPSAoZSwgZGF0YSk9PiB7XHJcbiAgICAgIGNvbnN0IGkgPSBkYXRhLmZhY2UubWF0ZXJpYWxJbmRleDtcclxuICAgICAgaWYoaTwyKSB7XHJcbiAgICAgICAgY29uc3QgbiA9IGk9PT0wPyBvZmZzZXQrMipibG9jay5wLmZpcnN0OiBvZmZzZXQrMipibG9jay5wLmxhc3QtMTtcclxuICAgICAgICBldmVudENvbnZlcnRlci5jb252ZXJ0KGUsIHt4OiBpPT09MD8gZGF0YS51di54OiAxLWRhdGEudXYueCwgeTogZGF0YS51di55LCBpLCBufSk7XHJcbiAgICAgICAgdGhpcy5wYWdlTWFuYWdlci50cmFuc2ZlckV2ZW50VG9UZXh0dXJlKG4sIGUsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgYmxvY2sudGhyZWUudXNlckRhdGEudG91Y2hDYWxsYmFjayA9IChlLCBkYXRhKT0+IHtcclxuICAgICAgY29uc3QgaSA9IGRhdGEuZmFjZS5tYXRlcmlhbEluZGV4O1xyXG4gICAgICBpZihpPDIpIHtcclxuICAgICAgICBjb25zdCBuID0gaT09PTA/IG9mZnNldCsyKmJsb2NrLnAuZmlyc3Q6IG9mZnNldCsyKmJsb2NrLnAubGFzdC0xO1xyXG4gICAgICAgIHRoaXMucGFnZU1hbmFnZXIudHJhbnNmZXJFdmVudFRvVGV4dHVyZShuLCBlLCBkYXRhKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMudmlzdWFsLmRyYWcuYWRkVGhyZWUoYmxvY2sudGhyZWUpO1xyXG4gICAgdGhpcy52aXN1YWwubW91c2VFdmVudHMuYWRkVGhyZWUoYmxvY2sudGhyZWUpO1xyXG4gICAgdGhpcy52aXN1YWwudG91Y2hFdmVudHMuYWRkVGhyZWUoYmxvY2sudGhyZWUpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlU2hlZXRCbG9jayhibG9jaykge1xyXG4gICAgdGhpcy52aXN1YWwubW91c2VFdmVudHMucmVtb3ZlVGhyZWUoYmxvY2sudGhyZWUpO1xyXG4gICAgdGhpcy52aXN1YWwudG91Y2hFdmVudHMucmVtb3ZlVGhyZWUoYmxvY2sudGhyZWUpO1xyXG4gICAgdGhpcy52aXN1YWwuZHJhZy5yZW1vdmVUaHJlZShibG9jay50aHJlZSk7XHJcbiAgICB0aGlzLnRocmVlU2hlZXRCbG9ja3MucmVtb3ZlKGJsb2NrLnRocmVlKTtcclxuICAgIGJsb2NrLmRpc3Bvc2UoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNoZWV0QmxvY2tzKGZpcnN0LCBzaXplKSB7XHJcbiAgICBjb25zdCBibG9ja3MgPSB0aGlzLnNoZWV0QmxvY2tzLnNwbGljZShmaXJzdCwgc2l6ZSk7XHJcbiAgICBmb3IobGV0IGJsb2NrIG9mIGJsb2Nrcykge1xyXG4gICAgICB0aGlzLnJlbW92ZVNoZWV0QmxvY2soYmxvY2spO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGV4dHVyZShtYXRlcmlhbCwgbikge1xyXG4gICAgdGhpcy5wYWdlTWFuYWdlci5zZXRUZXh0dXJlKG1hdGVyaWFsLCBuKTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VUZXh0dXJlKG1hdGVyaWFsLCBuKSB7XHJcbiAgICB0aGlzLnNldFRleHR1cmUobWF0ZXJpYWwsIG4rMik7XHJcbiAgfVxyXG5cclxuICBzZXRMZWZ0Q292ZXJUZXh0dXJlKG1hdGVyaWFsLCBuKSB7XHJcbiAgICB0aGlzLnNldFRleHR1cmUobWF0ZXJpYWwsIG4pO1xyXG4gIH1cclxuXHJcbiAgc2V0UmlnaHRDb3ZlclRleHR1cmUobWF0ZXJpYWwsIG4pIHtcclxuICAgIHRoaXMuc2V0VGV4dHVyZShtYXRlcmlhbCwgbisyKih0aGlzLnAuc2hlZXRzKzEpKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmaW5pc2hBbmltYXRpb25DbGIoYW5nbGUpIHtcclxuICAgIHRoaXMuYmxvY2suc2V0KHRoaXMuYm9vay5nZXRDbG9zZWRCbG9ja0FuZ2xlKGFuZ2xlKS5jbG9zZWRBbmdsZSwnY2xvc2VkJywwKTtcclxuICAgIGNvbnN0IGkgPSB0aGlzLmJvb2suc2hlZXRCbG9ja3MuaW5kZXhPZih0aGlzLmJsb2NrKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIGlmKGFuZ2xlPT09MCkge1xyXG4gICAgICAgIHRoaXMuYm9vay5tZXJnZVNoZWV0QmxvY2tzKGksIHRoaXMuYm9vay5zaGVldEJsb2Nrcy5sZW5ndGgtaSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ib29rLm1lcmdlU2hlZXRCbG9ja3MoMCwgaSsxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY0Jsb2NrRm9yY2UoYmxvY2ssIG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpIHtcclxuICAgIHJldHVybiBibG9jay5mb3JjZT8gYmxvY2suZm9yY2Uob2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodCk6IDA7XHJcbiAgfVxyXG5cclxuICBjYWxjQmxvY2tDb3JuZXJGb3JjZShibG9jaywgb2JqZWN0LCBhbmdsZSwgdmVsb2NpdHksIGNvcm5lckhlaWdodCkge1xyXG4gICAgcmV0dXJuIGJsb2NrLmNvcm5lckZvcmNlPyBibG9jay5jb3JuZXJGb3JjZShvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KTogMDtcclxuICB9XHJcblxyXG4gIG5vdGlmeUJlZm9yZUFuaW1hdGlvbigpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBpZih0aGlzLmFuaW1hdGlvbk5vdGlmaWNhdGlvbikge1xyXG4gICAgICByZXMgPSBQcm9taXNlLnJlamVjdCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uTm90aWZpY2F0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgICB0eXBlOiAnYmVmb3JlQW5pbWF0aW9uJ1xyXG4gICAgICB9KTtcclxuICAgICAgcmVzID0gdGhpcy5sYXllck1hbmFnZXIuaGlkZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIG5vdGlmeUFmdGVyQW5pbWF0aW9uKCkge1xyXG4gICAgaWYodGhpcy5hbmltYXRpb25Ob3RpZmljYXRpb24pIHtcclxuICAgICAgZGVsZXRlIHRoaXMuYW5pbWF0aW9uTm90aWZpY2F0aW9uO1xyXG4gICAgICB0aGlzLmxheWVyTWFuYWdlci5zaG93KCk7XHJcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCh7XHJcbiAgICAgICAgdHlwZTogJ2FmdGVyQW5pbWF0aW9uJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbm5lY3RQaHlzaWNzKGJsb2NrLCBtYXNzLCBhbmdsZSwgdmVsb2NpdHksIGZsZXhpYmlsaXR5LCBjb3ZlckhlaWdodCwgc2ltdWxhdGVDbGIsIHJlbW92ZUNsYiwgcHJvZ3Jlc3NDbGIpIHtcclxuICAgIGNvbnN0IHR5cGUgPSAoKT0+IHRoaXMuaG92ZXJJbmZvPyAnaG92ZXInOiAodGhpcy5kcmFnSW5mbz8gJ2RyYWcnOiAnZnJlZScpLFxyXG4gICAgICByZXMgPSB0aGlzLnNoZWV0UGh5c2ljcy5nZXRTaXplKCk/IFByb21pc2UucmVzb2x2ZSgpOiB0aGlzLm5vdGlmeUJlZm9yZUFuaW1hdGlvbigpO1xyXG4gICAgcmV0dXJuIHJlcy50aGVuKCgpPT4ge1xyXG4gICAgICBibG9jay5waHlzaWNJZCA9IHRoaXMuc2hlZXRQaHlzaWNzLmFkZE9iamVjdChcclxuICAgICAgICBtYXNzLFxyXG4gICAgICAgIGFuZ2xlLFxyXG4gICAgICAgIHZlbG9jaXR5LFxyXG4gICAgICAgIGZsZXhpYmlsaXR5LFxyXG4gICAgICAgIGNvdmVySGVpZ2h0LFxyXG4gICAgICAgIChhbmdsLCBjaCk9PiB7XHJcbiAgICAgICAgICBzaW11bGF0ZUNsYihhbmdsLCBjaCk7XHJcbiAgICAgICAgICBwcm9ncmVzc0NsYihibG9jaywgTWF0aC5hYnMoYW5nbGUtYW5nbCkvTWF0aC5QSSwgJ3Byb2Nlc3MnLCB0eXBlKCkpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGFuZ2wsIGNoKT0+IHtcclxuICAgICAgICAgIHJlbW92ZUNsYihhbmdsLCBjaCk7XHJcbiAgICAgICAgICBkZWxldGUgYmxvY2sucGh5c2ljSWQ7XHJcbiAgICAgICAgICBwcm9ncmVzc0NsYihibG9jaywgTWF0aC5hYnMoYW5nbGUtYW5nbCkvTWF0aC5QSSwgJ2ZpbmlzaCcsIHR5cGUoKSk7XHJcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ge1xyXG4gICAgICAgICAgICBpZighdGhpcy5zaGVldFBoeXNpY3MuZ2V0U2l6ZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ub3RpZnlBZnRlckFuaW1hdGlvbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KT0+IHRoaXMuY2FsY0Jsb2NrRm9yY2UoYmxvY2ssIG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpLFxyXG4gICAgICAgIChvYmplY3QsIGFuZ2xlLCB2ZWxvY2l0eSwgY29ybmVySGVpZ2h0KT0+IHRoaXMuY2FsY0Jsb2NrQ29ybmVyRm9yY2UoYmxvY2ssIG9iamVjdCwgYW5nbGUsIHZlbG9jaXR5LCBjb3JuZXJIZWlnaHQpXHJcbiAgICAgICk7XHJcbiAgICAgIHByb2dyZXNzQ2xiKGJsb2NrLCAwLCAnaW5pdCcsIHR5cGUoKSk7XHJcbiAgICAgIHJldHVybiBibG9jaztcclxuICAgIH0pLmNhdGNoKCgpPT4gdW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShkdCkge1xyXG4gICAgdGhpcy5sYXN0TW91c2VQb3MudCs9ZHQ7XHJcbiAgICBpZih0aGlzLmlzUHJvY2Vzc2luZygpICYmIHRoaXMubGFzdE1vdXNlUG9zLnBhZ2VYIT09dW5kZWZpbmVkICYmIHRoaXMubGFzdE1vdXNlUG9zLnQtKHRoaXMubGFzdE1vdXNlUG9zLmxhc3RUIHx8IDApPjAuMjUgJiYgIXRoaXMuaG92ZXJJbmZvICYmICF0aGlzLmRyYWdJbmZvKSB7XHJcbiAgICAgIHRoaXMubGFzdE1vdXNlUG9zLmxhc3RUID0gdGhpcy5sYXN0TW91c2VQb3MudDtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+IHtcclxuICAgICAgICAkKHRoaXMudmlzdWFsLmVsZW1lbnQpLnRyaWdnZXIoJC5FdmVudCgnbW91c2Vtb3ZlJywgdGhpcy5sYXN0TW91c2VQb3MpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNoZWV0UGh5c2ljcy5zaW11bGF0ZShkdCk7XHJcbiAgfVxyXG5cclxuICBzcGxpdFNoZWV0QmxvY2soaSwgbGVmdFNpemUpIHtcclxuICAgIGNvbnN0IGJsb2NrID0gdGhpcy5zaGVldEJsb2Nrc1tpXTtcclxuICAgIGlmKGJsb2NrICYmIGxlZnRTaXplPGJsb2NrLmdldFNpemUoKSkge1xyXG4gICAgICBjb25zdCBuZXdCbG9jayA9IG5ldyBTaGVldEJsb2NrKHRoaXMudmlzdWFsLCB7Li4udGhpcy5wLCBzZXRUZXh0dXJlOiB0aGlzLnNldFBhZ2VUZXh0dXJlLmJpbmQodGhpcyl9LCBibG9jay5wLmZpcnN0LCBibG9jay5wLmZpcnN0K2xlZnRTaXplLCBibG9jay5hbmdsZSwgYmxvY2suc3RhdGUpO1xyXG4gICAgICBibG9jay5zZXQoYmxvY2suYW5nbGUsIGJsb2NrLnN0YXRlLCBibG9jay5jb3JuZXIuaGVpZ2h0LCBibG9jay5wLmZpcnN0K2xlZnRTaXplLCBibG9jay5wLmxhc3QpO1xyXG4gICAgICB0aGlzLmFkZFNoZWV0QmxvY2soaSwgbmV3QmxvY2spO1xyXG4gICAgICByZXR1cm4gW25ld0Jsb2NrLCBibG9ja107XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtZXJnZVNoZWV0QmxvY2tzKGZpcnN0LCBzaXplKSB7XHJcbiAgICBpZihmaXJzdDx0aGlzLnNoZWV0QmxvY2tzLmxlbmd0aCkge1xyXG4gICAgICBzaXplID0gTWF0aC5taW4odGhpcy5zaGVldEJsb2Nrcy5sZW5ndGgtZmlyc3QsIHNpemUpO1xyXG4gICAgICBjb25zdCBmaXJzdEJsb2NrID0gdGhpcy5zaGVldEJsb2Nrc1tmaXJzdF0sIGxhc3RCbG9jayA9IHRoaXMuc2hlZXRCbG9ja3NbZmlyc3Qrc2l6ZS0xXTtcclxuICAgICAgZmlyc3RCbG9jay5zZXQoZmlyc3RCbG9jay5hbmdsZSwgZmlyc3RCbG9jay5zdGF0ZSwgZmlyc3RCbG9jay5jb3JuZXIuaGVpZ2h0LCBmaXJzdEJsb2NrLnAuZmlyc3QsIGxhc3RCbG9jay5wLmxhc3QpO1xyXG4gICAgICB0aGlzLnJlbW92ZVNoZWV0QmxvY2tzKGZpcnN0KzEsIHNpemUtMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTaGVldEJsb2NrcyhhbmdsZSwgc3RhdGUpIHtcclxuICAgIGlmKHN0YXRlPT09J2Nsb3NlZCcpIHtcclxuICAgICAgdGhpcy5jbG9zZWRBbmdsZSA9IGFuZ2xlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zaGVldEJsb2Nrcy5mb3JFYWNoKChzKT0+IHtcclxuICAgICAgaWYoIXMucGh5c2ljSWQpIHtcclxuICAgICAgICBzLnNldChhbmdsZSwgc3RhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldChhbmdsZSwgaGVpZ2h0PTApIHtcclxuICAgIHRoaXMuYW5nbGUgPSBhbmdsZTtcclxuICAgIGNvbnN0IFBJID0gTWF0aC5QSTtcclxuICAgIGlmKGFuZ2xlPFBJLzQpIHtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KDApO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtUEkvMisyKmFuZ2xlKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KFBJLzIsJ29wZW5lZCcsaGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoMCwnY2xvc2VkJyk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgwKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldCgwLCdjbG9zZWQnLDApO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihhbmdsZTwyKlBJLzQpIHtcclxuICAgICAgY29uc3QgYT0yKihhbmdsZS1QSS80KTtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KGEpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtYSk7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChQSS8yK2EsJ29wZW5lZCcsaGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoYSwnY2xvc2VkJyk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgtYSk7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoYSwnY2xvc2VkJywwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoYW5nbGU8MypQSS80KSB7XHJcbiAgICAgIGNvbnN0IGE9MiooYW5nbGUtUEkvMik7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldChQSS8yKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLVBJLzIpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoUEksJ29wZW5lZCcsMCk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgtUEkvMik7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoYSwnb3BlbmVkJyxoZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihhbmdsZTw0KlBJLzQpIHtcclxuICAgICAgY29uc3QgYT0yKihhbmdsZS0zKlBJLzQpK1BJLzI7XHJcbiAgICAgIHRoaXMuYmluZGVyLnNldChhKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLWEpO1xyXG4gICAgICB0aGlzLmxlZnRDb3Zlci5zZXQoYSwnY2xvc2VkJywwKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoYSwnY2xvc2VkJyk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgtUEkvMik7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoUEkvMiwnb3BlbmVkJyxoZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZihhbmdsZTw1KlBJLzQpIHtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KFBJKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldExlZnQoLVBJKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KFBJLCdjbG9zZWQnLDApO1xyXG5cclxuICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhQSSwnY2xvc2VkJyk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgtUEkvMi0yKihhbmdsZS1QSSkpO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KFBJLzIsJ29wZW5lZCcsaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoYW5nbGU8NipQSS80KSB7XHJcbiAgICAgIGNvbnN0IGE9MiooYW5nbGUtNSpQSS80KTtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KFBJLWEpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtUEkrYSk7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChQSS1hLCdjbG9zZWQnLDApO1xyXG5cclxuICAgICAgdGhpcy5zZXRTaGVldEJsb2NrcyhQSS1hLCdjbG9zZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KC1QSSthKTtcclxuICAgICAgdGhpcy5yaWdodENvdmVyLnNldChQSS8yLWEsJ29wZW5lZCcsaGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoYW5nbGU8NypQSS80KSB7XHJcbiAgICAgIGNvbnN0IGE9MiooYW5nbGUtNipQSS80KTtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KFBJLzIpO1xyXG5cclxuICAgICAgdGhpcy5iaW5kZXIuc2V0TGVmdCgtUEkvMik7XHJcbiAgICAgIHRoaXMubGVmdENvdmVyLnNldChQSS1hLCdvcGVuZWQnLGhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRSaWdodCgtUEkvMik7XHJcbiAgICAgIHRoaXMucmlnaHRDb3Zlci5zZXQoMCwnb3BlbmVkJywwKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYoYW5nbGU8OCpQSS80KSB7XHJcbiAgICAgIGNvbnN0IGE9MiooYW5nbGUtNypQSS80KTtcclxuICAgICAgdGhpcy5iaW5kZXIuc2V0KFBJLzItYSk7XHJcblxyXG4gICAgICB0aGlzLmJpbmRlci5zZXRMZWZ0KC1QSS8yKTtcclxuICAgICAgdGhpcy5sZWZ0Q292ZXIuc2V0KFBJLzIsJ29wZW5lZCcsaGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMuc2V0U2hlZXRCbG9ja3MoUEkvMi1hLCdjbG9zZWQnKTtcclxuXHJcbiAgICAgIHRoaXMuYmluZGVyLnNldFJpZ2h0KC1QSS8yK2EpO1xyXG4gICAgICB0aGlzLnJpZ2h0Q292ZXIuc2V0KFBJLzItYSwnY2xvc2VkJywwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBjcmVhdGVTaWRlVGV4dHVyZShjb2xvcikge1xyXG4gICAgY29uc3QgakMgPSAkKCc8Y2FudmFzIHdpZHRoPVwiOFwiIGhlaWdodD1cIjhcIj48L2NhbnZhcz4nKTtcclxuICAgIGNvbnN0IGN0eCA9IGpDWzBdLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBjdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKGNvbG9yLCAxKTtcclxuICAgIGN0eC5yZWN0KDAsIDAsIDgsIDcpO1xyXG4gICAgY3R4LmZpbGwoKTtcclxuICAgIGN0eC5iZWdpblBhdGgoKTtcclxuICAgIGN0eC5maWxsU3R5bGUgPSBHcmFwaFV0aWxzLmNvbG9yMlJnYmEoR3JhcGhVdGlscy5pbnZlcnNlQ29sb3IoY29sb3IsMC41KSwgMSk7XHJcbiAgICBjdHgucmVjdCgwLCA3LCA4LCAxKTtcclxuICAgIGN0eC5maWxsKCk7XHJcbiAgICByZXR1cm4gakNbMF07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcHJlcGFyZVByb3BzKHByb3BzKSB7XHJcbiAgICByZXR1cm4gQm9vay5jYWxjUHJvcHMoQm9vay5tZXJnZVByb3BzKGJvb2tQcm9wcygpLCBwcm9wcykpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lcmdlUHJvcHMoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgc2Vjb25kID0gc2Vjb25kIHx8IHt9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uZmlyc3QsXHJcbiAgICAgIC4uLnNlY29uZCxcclxuICAgICAgc2hlZXQ6IHtcclxuICAgICAgICAuLi5maXJzdC5zaGVldCxcclxuICAgICAgICAuLi5zZWNvbmQuc2hlZXQsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvdmVyOiB7XHJcbiAgICAgICAgLi4uZmlyc3QuY292ZXIsXHJcbiAgICAgICAgLi4uc2Vjb25kLmNvdmVyLFxyXG4gICAgICB9LFxyXG4gICAgICBwYWdlOiB7XHJcbiAgICAgICAgLi4uZmlyc3QucGFnZSxcclxuICAgICAgICAuLi5zZWNvbmQucGFnZSxcclxuICAgICAgfSxcclxuICAgICAgY3NzTGF5ZXJQcm9wczoge1xyXG4gICAgICAgIC4uLmZpcnN0LmNzc0xheWVyUHJvcHMsXHJcbiAgICAgICAgLi4uc2Vjb25kLmNzc0xheWVyUHJvcHMsXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2FsY1Byb3BzKHByb3BzKSB7XHJcbiAgICBjb25zdCBwID0ge1xyXG4gICAgICAuLi5wcm9wcyxcclxuICAgICAgc2hlZXQ6IHtcclxuICAgICAgICAuLi5wcm9wcy5zaGVldFxyXG4gICAgICB9LFxyXG4gICAgICBjb3Zlcjoge1xyXG4gICAgICAgIC4uLnByb3BzLnNoZWV0LFxyXG4gICAgICAgIC4uLnByb3BzLmNvdmVyXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhZ2U6IHtcclxuICAgICAgICAuLi5wcm9wcy5zaGVldCxcclxuICAgICAgICAuLi5wcm9wcy5wYWdlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNzc0xheWVyUHJvcHM6IHtcclxuICAgICAgICAuLi5wcm9wcy5jc3NMYXllclByb3BzLFxyXG4gICAgICAgICRcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIHNjYWxlID0gMTAsXHJcbiAgICBoZWlnaHQgPSBzY2FsZSpwLmhlaWdodCxcclxuICAgIHdpZHRoID0gc2NhbGUqcC53aWR0aCxcclxuICAgIGZsaXBQcm9ncmVzc0NsYiA9ICgpPT4gdW5kZWZpbmVkLFxyXG4gICAgc2hlZXQgPSB7XHJcbiAgICAgIHNpZGVUZXh0dXJlOiBwLnNoZWV0LnNpZGVUZXh0dXJlIHx8IEJvb2suY3JlYXRlU2lkZVRleHR1cmUocC5zaGVldC5jb2xvciksXHJcbiAgICB9LFxyXG4gICAgY292ZXIgPSB7XHJcbiAgICAgIC4uLnNoZWV0LFxyXG4gICAgICAuLi5wLmNvdmVyLFxyXG4gICAgICBkZXB0aDogc2NhbGUqcC5jb3Zlci5kZXB0aCxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgcGFkZGluZzogc2NhbGUqcC5jb3Zlci5wYWRkaW5nXHJcbiAgICB9LFxyXG4gICAgcGFnZSA9IHtcclxuICAgICAgLi4uc2hlZXQsXHJcbiAgICAgIC4uLnAucGFnZSxcclxuICAgICAgZGVwdGg6IHNjYWxlKnAucGFnZS5kZXB0aCxcclxuICAgICAgd2lkdGg6IGNvdmVyLndpZHRoIC0gY292ZXIucGFkZGluZyxcclxuICAgICAgaGVpZ2h0OiBjb3Zlci5oZWlnaHQgLSAyKmNvdmVyLnBhZGRpbmdcclxuICAgIH0sXHJcbiAgICBtYXJrZXIgPSB7XHJcbiAgICAgIHVzZTogZmFsc2UsXHJcbiAgICAgIGNvbG9yOiAwWEZGMDAwMCxcclxuICAgICAgc2l6ZTogc2NhbGUqMC4wMDFcclxuICAgIH07XHJcbiAgICBpZihjb3Zlci5jb2xvciE9PXNoZWV0LmNvbG9yICYmICFwLmNvdmVyLnNpZGVUZXh0dXJlKSB7XHJcbiAgICAgIGNvdmVyLnNpZGVUZXh0dXJlID0gQm9vay5jcmVhdGVTaWRlVGV4dHVyZShjb3Zlci5jb2xvcik7XHJcbiAgICB9XHJcbiAgICBpZihwYWdlLmNvbG9yIT09c2hlZXQuY29sb3IgJiYgIXAucGFnZS5zaWRlVGV4dHVyZSkge1xyXG4gICAgICBwYWdlLnNpZGVUZXh0dXJlID0gQm9vay5jcmVhdGVTaWRlVGV4dHVyZShwYWdlLmNvbG9yKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7Li4ucCwgc2NhbGUsIGhlaWdodCwgd2lkdGgsIGZsaXBQcm9ncmVzc0NsYiwgY292ZXIsIHBhZ2UsIG1hcmtlcn07XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL0Jvb2suanMiLCJpbXBvcnQgeyQsIFRIUkVFfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IENvbnRyb2xsZXIgZnJvbSAnQ29udHJvbGxlcic7XHJcbmltcG9ydCB7cHJvcHMgYXMgIGJvb2tDb250cm9sbGVyUHJvcHN9IGZyb20gJy4uL3Byb3BzL2Jvb2tDb250cm9sbGVyJztcclxuaW1wb3J0IEV2ZW50c1RvQWN0aW9ucyBmcm9tICdFdmVudHNUb0FjdGlvbnMnO1xyXG5pbXBvcnQgU3RhdHMgZnJvbSAnc3RhdHMuanMnO1xyXG5pbXBvcnQgT2JqZWN0M0RXYXRjaGVyIGZyb20gJ09iamVjdDNEV2F0Y2hlcic7XHJcbmltcG9ydCBGdWxsU2NyZWVuIGZyb20gJ0Z1bGxTY3JlZW4nO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9va0NvbnRyb2xsZXIgZXh0ZW5kcyBDb250cm9sbGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoYm9vaywgdmlldywgcHJvcHMpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25Db250cm9scyA9IHRydWU7XHJcbiAgICB0aGlzLmJvb2sgPSBib29rO1xyXG4gICAgdGhpcy52aXN1YWwgPSBib29rLnZpc3VhbDtcclxuICAgIHRoaXMucCA9IEJvb2tDb250cm9sbGVyLnByZXBhcmVQcm9wcyhwcm9wcyk7XHJcbiAgICB0aGlzLnAucnRsID0gYm9vay5wLnJ0bDtcclxuICAgIHRoaXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHRoaXMudmlzdWFsLnduZC5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XHJcblxyXG4gICAgdGhpcy5vcmJpdCA9IGJvb2sudmlzdWFsLmdldE9yYml0KCk7XHJcbiAgICBib29rLnNldEZsaXBQcm9ncmVzc0NsYih0aGlzLnVwZGF0ZVZpZXdJZlN0YXRlLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy52aWV3ID0gdmlldztcclxuICAgIHRoaXMuYmluZEFjdGlvbnMoKTtcclxuXHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICBzbWFydFBhbjogIXRoaXMuYWN0aW9uc1snY21kU21hcnRQYW4nXS5hY3RpdmUsXHJcbiAgICAgIHNpbmdsZVBhZ2U6IHRoaXMuYWN0aW9uc1snY21kU2luZ2xlUGFnZSddLmFjdGl2ZSB8fCB0aGlzLmFjdGlvbnNbJ2NtZFNpbmdsZVBhZ2UnXS5hY3RpdmVGb3JNb2JpbGUgJiYgdGhpcy5kZXZpY2VQaXhlbFJhdGlvPjEsXHJcbiAgICAgIHN0YXRzOiB0aGlzLmFjdGlvbnNbJ2NtZFN0YXRzJ10uYWN0aXZlLFxyXG4gICAgICBsaWdodGluZzogdGhpcy5wLmxpZ2h0aW5nLmRlZmF1bHQsXHJcbiAgICAgIGFjdGl2ZVNpZGU6IDFcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5ib3hzID0gW25ldyBUSFJFRS5Cb3gzKCksIG5ldyBUSFJFRS5Cb3gzKCldO1xyXG4gICAgdGhpcy5ib29rV2F0Y2hlciA9IG5ldyBPYmplY3QzRFdhdGNoZXIodGhpcy52aXN1YWwsICgpPT4ge1xyXG4gICAgICBpZih0aGlzLnN0YXRlLnNpbmdsZVBhZ2UpIHtcclxuICAgICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZVNpZGUpIHtcclxuICAgICAgICAgIHRoaXMuYm94c1swXS5zZXRGcm9tT2JqZWN0KGJvb2sucmlnaHRDb3Zlci50aHJlZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5ib3hzWzBdLnNldEZyb21PYmplY3QoYm9vay5sZWZ0Q292ZXIudGhyZWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmJveHNbMF0uc2V0RnJvbU9iamVjdChib29rLmxlZnRDb3Zlci50aHJlZSk7XHJcbiAgICAgICAgdGhpcy5ib3hzWzFdLnNldEZyb21PYmplY3QoYm9vay5yaWdodENvdmVyLnRocmVlKTtcclxuICAgICAgICB0aGlzLmJveHNbMF0udW5pb24odGhpcy5ib3hzWzFdKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5ib3hzWzBdO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmJvb2tXYXRjaGVyLnNjYWxlID0gdGhpcy5wLnNjYWxlLmRlZmF1bHQ7XHJcbiAgICB0aGlzLmJvb2suc2V0Wm9vbSh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlLCB0aGlzLnN0YXRlLnNpbmdsZVBhZ2UpO1xyXG5cclxuICAgIHRoaXMuU3RhdHMgPSBuZXcgU3RhdHMoKTtcclxuICAgIHRoaXMuU3RhdHMuZG9tRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICB0aGlzLlN0YXRzLmRvbUVsZW1lbnQuc3R5bGUudG9wID0gJzBweCc7XHJcblxyXG4gICAgdGhpcy52aXN1YWwuc2V0RXh0cmFMaWdodGluZyh0aGlzLnN0YXRlLmxpZ2h0aW5nKTtcclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIG9uU2NyZWVuTW9kZUNoYW5nZWQ6IHRoaXMub25TY3JlZW5Nb2RlQ2hhbmdlZC5iaW5kKHRoaXMpLFxyXG4gICAgICBzdGF0czogdGhpcy5TdGF0cy51cGRhdGUuYmluZCh0aGlzLlN0YXRzKSxcclxuICAgICAgb25VcGRhdGVWaWV3OiB0aGlzLnVwZGF0ZVZpZXcuYmluZCh0aGlzKVxyXG4gICAgfVxyXG4gICAgRnVsbFNjcmVlbi5hZGRFdmVudExpc3RlbmVyKHRoaXMudmlldy5nZXRQYXJlbnRDb250YWluZXIoKS5vd25lckRvY3VtZW50LCB0aGlzLmJpbmRzLm9uU2NyZWVuTW9kZUNoYW5nZWQpO1xyXG5cclxuICAgIHRoaXMuY21kU21hcnRQYW4oKTtcclxuXHJcbiAgICBpZih0aGlzLnZpZXcudGVtcGxhdGVPYmplY3QuYXBwTG9hZGVkKSB7XHJcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy52aWV3LnRlbXBsYXRlT2JqZWN0LmFwcExvYWRlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5ib29rLmVuYWJsZUxvYWRpbmdBbmltYXRpb24odGhpcy5wLmxvYWRpbmdBbmltYXRpb24uYm9vayk7XHJcbiAgICBpZih0aGlzLnAubG9hZGluZ0FuaW1hdGlvbi5za2luKSB7XHJcbiAgICAgIHRoaXMuaW5pdExvYWRpbmdBbmltYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJvb2suZW5hYmxlTG9hZGluZ0FuaW1hdGlvbih0aGlzLnAubG9hZGluZ0FuaW1hdGlvbi5ib29rKTtcclxuICAgIHRoaXMuYm9vay5zZXRBdXRvUmVzb2x1dGlvbih0aGlzLnAuYXV0b1Jlc29sdXRpb24uZW5hYmxlZCwgdGhpcy5wLmF1dG9SZXNvbHV0aW9uLmNvZWZmaWNpZW50KTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBGdWxsU2NyZWVuLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy52aWV3LmdldFBhcmVudENvbnRhaW5lcigpLm93bmVyRG9jdW1lbnQsIHRoaXMuYmluZHMub25TY3JlZW5Nb2RlQ2hhbmdlZCk7XHJcbiAgICBkZWxldGUgdGhpcy5ib29rO1xyXG4gICAgZGVsZXRlIHRoaXMudmlldztcclxuICAgIGRlbGV0ZSB0aGlzLnZpc3VhbDtcclxuICB9XHJcblxyXG4gIGluaXRMb2FkaW5nQW5pbWF0aW9uKCkge1xyXG4gICAgY29uc3QgaGFuZGxlciA9ICgpPT4ge1xyXG4gICAgICBjb25zdCBwYWdlcyA9IHRoaXMuYm9vay5nZXRUb3BQYWdlcygpO1xyXG4gICAgICBsZXQgdmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICBmb3IobGV0IG4gb2YgcGFnZXMpIHtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuYm9vay5nZXRQYWdlU3RhdGUobik7XHJcbiAgICAgICAgdmlzaWJsZSA9IHN0YXRlPT09dW5kZWZpbmVkIHx8IHN0YXRlPT09J2xvYWRpbmcnO1xyXG4gICAgICAgIGlmKHZpc2libGUpIHtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZExvYWRpbmcnLCB7XHJcbiAgICAgICAgdmlzaWJsZVxyXG4gICAgICB9KTtcclxuICAgIH07XHJcbiAgICB0aGlzLmJvb2suYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JlQW5pbWF0aW9uJywgaGFuZGxlcik7XHJcbiAgICB0aGlzLmJvb2suYWRkRXZlbnRMaXN0ZW5lcignYWZ0ZXJBbmltYXRpb24nLCBoYW5kbGVyKTtcclxuICAgIHRoaXMuYm9vay5hZGRFdmVudExpc3RlbmVyKCdsb2FkUGFnZScsIGhhbmRsZXIpO1xyXG4gICAgdGhpcy5ib29rLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZFBhZ2UnLCBoYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGVuYWJsZU5hdmlnYXRpb24oZW5hYmxlKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25Db250cm9scyA9IGVuYWJsZTtcclxuICB9XHJcblxyXG4gIHNldFRvY0N0cmwodG9jQ3RybCkge1xyXG4gICAgdGhpcy50b2NDdHJsID0gdG9jQ3RybDtcclxuICAgIHRoaXMudG9jQ3RybC5vbkNoYW5nZSA9IHRoaXMudXBkYXRlVmlldy5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmludGVyKHByaW50ZXIpIHtcclxuICAgIHRoaXMucHJpbnRlciA9IHByaW50ZXI7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIHNldFNvdW5kcyhzb3VuZHMpIHtcclxuICAgIHRoaXMuc291bmRzID0gc291bmRzO1xyXG4gICAgc291bmRzLnNldEVuYWJsZWQodGhpcy5hY3Rpb25zWydjbWRTb3VuZHMnXS5hY3RpdmUpO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25TY3JlZW5Nb2RlQ2hhbmdlZChlKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNhblpvb21JbigpIHtcclxuICAgIHJldHVybiAhdGhpcy5zdGF0ZS5zbWFydFBhbiB8fCBNYXRoLmFicyh0aGlzLmJvb2tXYXRjaGVyLnNjYWxlLXRoaXMucC5zY2FsZS5tYXgpPnRoaXMucC5lcHM7XHJcbiAgfVxyXG5cclxuICBjYW5ab29tT3V0KCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnN0YXRlLnNtYXJ0UGFuIHx8IE1hdGguYWJzKHRoaXMuYm9va1dhdGNoZXIuc2NhbGUtdGhpcy5wLnNjYWxlLm1pbik+dGhpcy5wLmVwcztcclxuICB9XHJcblxyXG4gIGNhbkRlZmF1bHRab29tKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc21hcnRQYW47XHJcbiAgfVxyXG5cclxuICBzZXRCb29rWm9vbShzY2FsZSkge1xyXG4gICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgaWYodGhpcy5ib29rV2F0Y2hlci5zY2FsZT09PXNjYWxlKSB7XHJcbiAgICAgICAgdGhpcy5ib29rLnNldFpvb20oc2NhbGUsIHRoaXMuc3RhdGUuc2luZ2xlUGFnZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgY21kWm9vbUluKCkge1xyXG4gICAgaWYodGhpcy5zdGF0ZS5zbWFydFBhbikge1xyXG4gICAgICB0aGlzLmJvb2tXYXRjaGVyLnNjYWxlID0gTWF0aC5taW4odGhpcy5wLnNjYWxlLm1heCwgdGhpcy5ib29rV2F0Y2hlci5zY2FsZSt0aGlzLnAuc2NhbGUuZGVsdGEpO1xyXG4gICAgICB0aGlzLnNldEJvb2tab29tKHRoaXMuYm9va1dhdGNoZXIuc2NhbGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMub3JiaXQuem9vbUluKDYuNip0aGlzLnAuc2NhbGUuZGVsdGEvMC4zMik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNtZFpvb21PdXQoKSB7XHJcbiAgICBpZih0aGlzLnN0YXRlLnNtYXJ0UGFuKSB7XHJcbiAgICAgIHRoaXMuYm9va1dhdGNoZXIuc2NhbGUgPSBNYXRoLm1heCh0aGlzLnAuc2NhbGUubWluLCB0aGlzLmJvb2tXYXRjaGVyLnNjYWxlLXRoaXMucC5zY2FsZS5kZWx0YSk7XHJcbiAgICAgIHRoaXMuc2V0Qm9va1pvb20odGhpcy5ib29rV2F0Y2hlci5zY2FsZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcmJpdC56b29tT3V0KDYuNip0aGlzLnAuc2NhbGUuZGVsdGEvMC4zMik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNtZERlZmF1bHRab29tKCkge1xyXG4gICAgaWYodGhpcy5zdGF0ZS5zbWFydFBhbikge1xyXG4gICAgICB0aGlzLmJvb2tXYXRjaGVyLnNjYWxlID0gdGhpcy5wLnNjYWxlLmRlZmF1bHQ7XHJcbiAgICAgIHRoaXMuc2V0Qm9va1pvb20odGhpcy5ib29rV2F0Y2hlci5zY2FsZSk7XHJcbiAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY21kVG9jKCkge1xyXG4gICAgaWYodGhpcy50b2NDdHJsKSB7XHJcbiAgICAgIHRoaXMudG9jQ3RybC50b2dsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY21kRmFzdEJhY2t3YXJkKCkge1xyXG4gICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBMZWZ0KDUpKTtcclxuICB9XHJcblxyXG4gIGNtZEJhY2t3YXJkKCkge1xyXG4gICAgaWYodGhpcy5zdGF0ZS5zaW5nbGVQYWdlKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZlU2lkZSA9ICh0aGlzLmdldFBhZ2UoKSsxKSUyO1xyXG4gICAgICBpZih0aGlzLnN0YXRlLmFjdGl2ZVNpZGUpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNpZGUgPSAwO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhcnRGbGlwKHRoaXMuYm9vay5mbGlwTGVmdCgxKSkudGhlbigoYmxvY2spPT4ge1xyXG4gICAgICAgICAgaWYoYmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVTaWRlID0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhcnRGbGlwKHRoaXMuYm9vay5mbGlwTGVmdCgxKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbWRGb3J3YXJkKCkge1xyXG4gICAgaWYodGhpcy5zdGF0ZS5zaW5nbGVQYWdlKSB7XHJcbiAgICAgIHRoaXMuc3RhdGUuYWN0aXZlU2lkZSA9ICh0aGlzLmdldFBhZ2UoKSsxKSUyO1xyXG4gICAgICBpZighdGhpcy5zdGF0ZS5hY3RpdmVTaWRlKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVTaWRlID0gMTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXJ0RmxpcCh0aGlzLmJvb2suZmxpcFJpZ2h0KDEpKS50aGVuKChibG9jayk9PiB7XHJcbiAgICAgICAgICBpZihibG9jaykge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmFjdGl2ZVNpZGUgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBSaWdodCgxKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbWRGYXN0Rm9yd2FyZCgpIHtcclxuICAgIHRoaXMuc3RhcnRGbGlwKHRoaXMuYm9vay5mbGlwUmlnaHQoNSkpO1xyXG4gIH1cclxuXHJcbiAgY21kU2F2ZSgpIHtcclxuICAgIHdpbmRvdy5vcGVuKHRoaXMucC5kb3dubG9hZFVSTCwgJ19ibGFuaycpO1xyXG4gIH1cclxuXHJcbiAgY21kUHJpbnQoKSB7XHJcbiAgICB0aGlzLnByaW50ZXIucHJpbnQoKTtcclxuICB9XHJcblxyXG4gIGNtZEZ1bGxTY3JlZW4oKSB7XHJcbiAgICBpZighRnVsbFNjcmVlbi5hY3RpdmF0ZWQoKSkge1xyXG4gICAgICBGdWxsU2NyZWVuLnJlcXVlc3QodGhpcy52aWV3LmdldFBhcmVudENvbnRhaW5lcigpKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBGdWxsU2NyZWVuLmNhbmNlbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY21kU21hcnRQYW4oKSB7XHJcbiAgICB0aGlzLnN0YXRlLnNtYXJ0UGFuID0gIXRoaXMuc3RhdGUuc21hcnRQYW47XHJcbiAgICBpZih0aGlzLnN0YXRlLnNtYXJ0UGFuKSB7XHJcbiAgICAgIHRoaXMub3JiaXQubWluQXppbXV0aEFuZ2xlID0gMDtcclxuICAgICAgdGhpcy5vcmJpdC5tYXhBemltdXRoQW5nbGUgPSAwO1xyXG4gICAgICB0aGlzLm9yYml0Lm1pblBvbGFyQW5nbGUgPSAwO1xyXG4gICAgXHR0aGlzLm9yYml0Lm1heFBvbGFyQW5nbGUgPSBNYXRoLlBJLzQ7XHJcbiAgICAgIHRoaXMuYm9va1dhdGNoZXIuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vcmJpdC5taW5BemltdXRoQW5nbGUgPSAtSW5maW5pdHk7XHJcbiAgICAgIHRoaXMub3JiaXQubWF4QXppbXV0aEFuZ2xlID0gSW5maW5pdHk7XHJcbiAgICAgIHRoaXMub3JiaXQubWluUG9sYXJBbmdsZSA9IDA7XHJcbiAgICBcdHRoaXMub3JiaXQubWF4UG9sYXJBbmdsZSA9IE1hdGguUEk7XHJcbiAgICAgIHRoaXMuYm9va1dhdGNoZXIuZW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjbWRTaW5nbGVQYWdlKCkge1xyXG4gICAgdGhpcy5zdGF0ZS5zaW5nbGVQYWdlID0gIXRoaXMuc3RhdGUuc2luZ2xlUGFnZTtcclxuICAgIHRoaXMuc2V0Qm9va1pvb20odGhpcy5ib29rV2F0Y2hlci5zY2FsZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNtZFNvdW5kcygpIHtcclxuICAgIGlmKHRoaXMuc291bmRzKSB7XHJcbiAgICAgIHRoaXMuc291bmRzLnRvZ2xlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNtZFN0YXRzKCkge1xyXG4gICAgdGhpcy5zdGF0ZS5zdGF0cyA9ICF0aGlzLnN0YXRlLnN0YXRzO1xyXG4gICAgaWYodGhpcy5zdGF0ZS5zdGF0cykge1xyXG4gICAgICAkKHRoaXMudmlldy5nZXRDb250YWluZXIoKSkuYXBwZW5kKHRoaXMuU3RhdHMuZG9tRWxlbWVudCk7XHJcbiAgICAgIHRoaXMudmlzdWFsLmFkZFJlbmRlckNhbGxiYWNrKHRoaXMuYmluZHMuc3RhdHMpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICQodGhpcy52aWV3LmdldENvbnRhaW5lcigpKS5maW5kKHRoaXMuU3RhdHMuZG9tRWxlbWVudCkucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMudmlzdWFsLnJlbW92ZVJlbmRlckNhbGxiYWNrKHRoaXMuYmluZHMuc3RhdHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBjbWRMaWdodGluZ1VwKCkge1xyXG4gICAgdGhpcy5zdGF0ZS5saWdodGluZyA9IE1hdGgubWluKHRoaXMuc3RhdGUubGlnaHRpbmcrdGhpcy5wLmxpZ2h0aW5nLmRlbHRhLCB0aGlzLnAubGlnaHRpbmcubWF4KTtcclxuICAgIHRoaXMudmlzdWFsLnNldEV4dHJhTGlnaHRpbmcodGhpcy5zdGF0ZS5saWdodGluZyk7XHJcbiAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICB9XHJcblxyXG4gIGNtZExpZ2h0aW5nRG93bigpIHtcclxuICAgIHRoaXMuc3RhdGUubGlnaHRpbmcgPSBNYXRoLm1heCh0aGlzLnN0YXRlLmxpZ2h0aW5nLXRoaXMucC5saWdodGluZy5kZWx0YSwgdGhpcy5wLmxpZ2h0aW5nLm1pbik7XHJcbiAgICB0aGlzLnZpc3VhbC5zZXRFeHRyYUxpZ2h0aW5nKHRoaXMuc3RhdGUubGlnaHRpbmcpO1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICBnb1RvUGFnZShwYWdlKSB7XHJcbiAgICBpZih0aGlzLnAucnRsKSB7XHJcbiAgICAgIHBhZ2UgPSB0aGlzLmJvb2suZ2V0UGFnZXMoKS0xLXBhZ2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBwYWdlTnVtID0gTWF0aC5tYXgoTWF0aC5taW4ocGFnZSwgdGhpcy5ib29rLmdldFBhZ2VzKCktMSksMCk7XHJcbiAgICB0aGlzLnN0YXRlLmFjdGl2ZVNpZGUgPSAocGFnZU51bSsxKSUyO1xyXG4gICAgbGV0IHRhcmdldCA9IE1hdGgubWF4KE1hdGgubWluKHBhZ2UtMStwYWdlJTIsIHRoaXMuYm9vay5nZXRQYWdlcygpLTEpLDApLCBjdXJyZW50ID0gdGhpcy5ib29rLmdldFBhZ2UoKSwgZmxpcHMgPSBbXSwgY292cyA9IDA7O1xyXG4gICAgaWYodGFyZ2V0IT1jdXJyZW50KSB7XHJcbiAgICAgIGlmKGN1cnJlbnQ9PT0wKSB7XHJcbiAgICAgICAgZmxpcHMucHVzaCgxKTtcclxuICAgICAgICBjdXJyZW50Kz0xO1xyXG4gICAgICAgICsrY292cztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKGN1cnJlbnQ9PT10aGlzLmJvb2suZ2V0UGFnZXMoKS0xKSB7XHJcbiAgICAgICAgZmxpcHMucHVzaCgtMSk7XHJcbiAgICAgICAgY3VycmVudC09MjtcclxuICAgICAgICArK2NvdnM7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGN2ID0gMDtcclxuICAgICAgaWYodGFyZ2V0PT09MCkge1xyXG4gICAgICAgIGN2ID0gLTE7XHJcbiAgICAgICAgdGFyZ2V0Kz0xO1xyXG4gICAgICAgICsrY292cztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKHRhcmdldD09PXRoaXMuYm9vay5nZXRQYWdlcygpLTEpIHtcclxuICAgICAgICBjdiA9IDE7XHJcbiAgICAgICAgdGFyZ2V0LT0yO1xyXG4gICAgICAgICsrY292cztcclxuICAgICAgfVxyXG4gICAgICBpZih0YXJnZXQtY3VycmVudCkge1xyXG4gICAgICAgIGZsaXBzLnB1c2goTWF0aC5jZWlsKCh0YXJnZXQtY3VycmVudCkvMikpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKGN2KSB7XHJcbiAgICAgICAgZmxpcHMucHVzaChjdik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZXRDbGIgPSAoZmwsIHRpbWUsIGNsYik9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgaWYoZmw8MCkge1xyXG4gICAgICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBMZWZ0KC1mbCwgY2xiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zdGFydEZsaXAodGhpcy5ib29rLmZsaXBSaWdodChmbCwgY2xiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCB0aW1lKTtcclxuICAgIH07XHJcblxyXG4gICAgaWYoY292cz09PTIpIHtcclxuICAgICAgc2V0Q2xiKGZsaXBzWzBdLCAwLCAoYmxvY2ssIHByb2dyZXNzLCBzdGF0ZSk9PiB7XHJcbiAgICAgICAgaWYoc3RhdGU9PSdmaW5pc2gnICYmIHByb2dyZXNzPT0xKSB7XHJcbiAgICAgICAgICBzZXRDbGIoZmxpcHNbZmxpcHMubGVuZ3RoLTFdLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBzZXRDbGIoZmxpcHNbMV0sIDUwMCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IHRpbWUgPSAwO1xyXG4gICAgICBmb3IobGV0IGZsIG9mIGZsaXBzKSB7XHJcbiAgICAgICAgc2V0Q2xiKGZsLCB0aW1lKTtcclxuICAgICAgICB0aW1lKz0yNTA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0RmxpcChmbGlwUmVzKSB7XHJcbiAgICByZXR1cm4gZmxpcFJlcz8gZmxpcFJlcy50aGVuKChibG9jayk9PiB7XHJcbiAgICAgIGlmKGJsb2NrKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaEFzeW5jKHtcclxuICAgICAgICAgIHR5cGU6ICdzdGFydEZsaXAnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGJsb2NrO1xyXG4gICAgfSk6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgZW5kRmxpcChibG9jaykge1xyXG4gICAgdGhpcy5kaXNwYXRjaEFzeW5jKHtcclxuICAgICAgdHlwZTogJ2VuZEZsaXAnXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBibG9jaztcclxuICB9XHJcblxyXG4gIGdldFBhZ2UoKSB7XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5ib29rLmdldFBhZ2UoKTtcclxuICAgIHJldHVybiBwYWdlPyBNYXRoLm1pbih0aGlzLmJvb2suZ2V0UGFnZSgpK3RoaXMuc3RhdGUuYWN0aXZlU2lkZSwgdGhpcy5ib29rLmdldFBhZ2VzKCktMSk6IDA7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlRm9yR1VJKCkge1xyXG4gICAgbGV0IG4gPSAodGhpcy5zdGF0ZS5zaW5nbGVQYWdlPyB0aGlzLmdldFBhZ2UoKTogdGhpcy5ib29rLmdldFBhZ2UoKSkrMTtcclxuICAgIGlmKHRoaXMucC5ydGwpIHtcclxuICAgICAgbiA9IHRoaXMuYm9vay5nZXRQYWdlcygpLW4rMTtcclxuICAgIH1cclxuICAgIHJldHVybiBuO1xyXG4gIH1cclxuXHJcbiAgaW5wUGFnZShlLCBkYXRhKSB7XHJcbiAgICB0aGlzLmdvVG9QYWdlKGRhdGEtMSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWaWV3SWZTdGF0ZShibG9jaywgcHJvZ3Jlc3MsIHN0YXRlLCB0eXBlKSB7XHJcbiAgICBpZihzdGF0ZT09PSdpbml0JyB8fCBzdGF0ZT09PSdmaW5pc2gnKSB7XHJcbiAgICAgIHNldFRpbWVvdXQodGhpcy51cGRhdGVWaWV3LmJpbmQodGhpcyksIDEwMCk7XHJcbiAgICB9XHJcbiAgICBpZihzdGF0ZT09PSdmaW5pc2gnKSB7XHJcbiAgICAgIHRoaXMuZW5kRmxpcChibG9jayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWaWV3U3RhdGUoKSB7XHJcbiAgICB0aGlzLnZpZXdTdGF0ZSA9IHtcclxuICAgICAgJ2NtZFpvb21Jbic6IHtcclxuICAgICAgICBlbmFibGU6IHRoaXMuY2FuWm9vbUluKCksXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRab29tSW4nXS5lbmFibGVkLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgJ2NtZFpvb21PdXQnOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0aGlzLmNhblpvb21PdXQoKSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbJ2NtZFpvb21PdXQnXS5lbmFibGVkLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgJ2NtZERlZmF1bHRab29tJzoge1xyXG4gICAgICAgIGVuYWJsZTogdGhpcy5jYW5EZWZhdWx0Wm9vbSgpLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snY21kRGVmYXVsdFpvb20nXS5lbmFibGVkLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy5jYW5EZWZhdWx0Wm9vbSgpICYmIE1hdGguYWJzKHRoaXMuYm9va1dhdGNoZXIuc2NhbGUtdGhpcy5wLnNjYWxlLmRlZmF1bHQpPHRoaXMucC5lcHNcclxuICAgICAgfSxcclxuICAgICAgJ2NtZFRvYyc6IHtcclxuICAgICAgICBlbmFibGU6ICEhdGhpcy50b2NDdHJsLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snY21kVG9jJ10uZW5hYmxlZCAmJiB0aGlzLnRvY0N0cmwsXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLnRvY0N0cmwgJiYgdGhpcy50b2NDdHJsLnZpc2libGVcclxuICAgICAgfSxcclxuICAgICAgJ2lucFBhZ2VzJzoge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuYm9vay5nZXRQYWdlcygpXHJcbiAgICAgIH0sXHJcbiAgICAgICdpbnBQYWdlJzoge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlOiAhdGhpcy5ib29rLmlzUHJvY2Vzc2luZygpICYmIHRoaXMubmF2aWdhdGlvbkNvbnRyb2xzLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmdldFBhZ2VGb3JHVUkoKVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kU2F2ZSc6IHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRTYXZlJ10uZW5hYmxlZCAmJiAhIXRoaXMucC5kb3dubG9hZFVSTCxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRQcmludCc6IHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRQcmludCddLmVuYWJsZWQgJiYgISF0aGlzLnByaW50ZXIsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kRnVsbFNjcmVlbic6IHtcclxuICAgICAgICBlbmFibGU6IEZ1bGxTY3JlZW4uYXZhaWxhYmxlKCksXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRGdWxsU2NyZWVuJ10uZW5hYmxlZCxcclxuICAgICAgICBhY3RpdmU6IEZ1bGxTY3JlZW4uYXZhaWxhYmxlKCkgJiYgRnVsbFNjcmVlbi5hY3RpdmF0ZWQoKVxyXG4gICAgICB9LFxyXG4gICAgICAnd2lkU2V0dGluZ3MnOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snd2lkU2V0dGluZ3MnXS5lbmFibGVkLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgJ2NtZFNtYXJ0UGFuJzoge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLmFjdGlvbnNbJ2NtZFNtYXJ0UGFuJ10uZW5hYmxlZCxcclxuICAgICAgICBhY3RpdmU6IHRoaXMuc3RhdGUuc21hcnRQYW5cclxuICAgICAgfSxcclxuICAgICAgJ2NtZFNpbmdsZVBhZ2UnOiB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snY21kU2luZ2xlUGFnZSddLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLnN0YXRlLnNpbmdsZVBhZ2VcclxuICAgICAgfSxcclxuICAgICAgJ2NtZFNvdW5kcyc6IHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogIHRoaXMuYWN0aW9uc1snY21kU291bmRzJ10uZW5hYmxlZCAmJiAhIXRoaXMuc291bmRzLFxyXG4gICAgICAgIGFjdGl2ZTogISF0aGlzLnNvdW5kcyAmJiB0aGlzLnNvdW5kcy5lbmFibGVkXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRTdGF0cyc6IHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zWydjbWRTdGF0cyddLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLnN0YXRlLnN0YXRzXHJcbiAgICAgIH0sXHJcbiAgICAgICdjbWRMaWdodGluZ1VwJzoge1xyXG4gICAgICAgIGVuYWJsZTogTWF0aC5hYnModGhpcy5zdGF0ZS5saWdodGluZy10aGlzLnAubGlnaHRpbmcubWF4KT50aGlzLnAuZXBzLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snY21kTGlnaHRpbmdVcCddLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICAnY21kTGlnaHRpbmdEb3duJzoge1xyXG4gICAgICAgIGVuYWJsZTogTWF0aC5hYnModGhpcy5zdGF0ZS5saWdodGluZy10aGlzLnAubGlnaHRpbmcubWluKT50aGlzLnAuZXBzLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMuYWN0aW9uc1snY21kTGlnaHRpbmdEb3duJ10uZW5hYmxlZCxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbGVmdCA9IHRoaXMuYm9vay5nZXRMZWZ0RmxpcHBpbmcoKSxcclxuICAgICAgICAgIHJpZ2h0ID0gdGhpcy5ib29rLmdldFJpZ2h0RmxpcHBpbmcoKTtcclxuICAgIGNvbnN0IGZsaXBwZXJzRW5hYmxlID0ge1xyXG4gICAgICBjbWRGYXN0QmFja3dhcmQ6ICEhbGVmdCAmJiB0aGlzLm5hdmlnYXRpb25Db250cm9scyxcclxuICAgICAgY21kQmFja3dhcmQ6ICEhbGVmdCAmJiB0aGlzLm5hdmlnYXRpb25Db250cm9scyxcclxuICAgICAgY21kRm9yd2FyZDogISFyaWdodCAmJiB0aGlzLm5hdmlnYXRpb25Db250cm9scyxcclxuICAgICAgY21kRmFzdEZvcndhcmQ6ICEhcmlnaHQgJiYgdGhpcy5uYXZpZ2F0aW9uQ29udHJvbHNcclxuICAgIH07XHJcbiAgICBmb3IobGV0IG5hbWUgb2YgT2JqZWN0LmtleXMoZmxpcHBlcnNFbmFibGUpKSB7XHJcbiAgICAgIHRoaXMudmlld1N0YXRlW25hbWVdID0ge1xyXG4gICAgICAgIGVuYWJsZTogZmxpcHBlcnNFbmFibGVbbmFtZV0sXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5hY3Rpb25zW25hbWVdLmVuYWJsZWQsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZpZXcoKSB7XHJcbiAgICBpZih0aGlzLnZpZXcpIHtcclxuICAgICAgdGhpcy51cGRhdGVWaWV3U3RhdGUoKTtcclxuICAgICAgZm9yKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMudmlld1N0YXRlKSkge1xyXG4gICAgICAgIHRoaXMudmlldy5zZXRTdGF0ZShuYW1lLCB0aGlzLnZpZXdTdGF0ZVtuYW1lXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEFjdGlvbnMoKSB7XHJcbiAgICBjb25zdCBpc1N3aXBwaW5nID0gKG5hbWUpPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5hY3Rpb25zLnRvdWNoQ21kU3dpcGUuZW5hYmxlZCAmJiB0aGlzLmFjdGlvbnMudG91Y2hDbWRTd2lwZS5jb2RlPT09dGhpcy5hY3Rpb25zW25hbWVdLmNvZGUgJiYgdGhpcy5zdGF0ZS5zbWFydFBhbiAmJiB0aGlzLmJvb2tXYXRjaGVyLnNjYWxlPD0xO1xyXG4gICAgfSwgY21kcyA9IHt9O1xyXG5cclxuICAgIGZvcihsZXQgbmFtZSBpbiB0aGlzKSB7XHJcbiAgICAgIGlmKG5hbWUuaW5kZXhPZignY21kJyk9PT0wKSB7XHJcbiAgICAgICAgY21kc1tuYW1lXSA9IHtcclxuICAgICAgICAgIGFjdGl2YXRlOiAoLi4uYXJncyk9PiB7XHJcbiAgICAgICAgICAgIGlmKHRoaXMudmlld1N0YXRlICYmIHRoaXMudmlld1N0YXRlW25hbWVdLmVuYWJsZSkge1xyXG4gICAgICAgICAgICAgIHRoaXNbbmFtZV0oLi4uYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4uY21kcyxcclxuICAgICAgY21kUGFuTGVmdDoge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSk9PiB0aGlzLm9yYml0LmFjdGlvbnMucGFuKGUsIHtcclxuICAgICAgICAgIHN0YXRlOiAnbW92ZScsXHJcbiAgICAgICAgICBkeDogLXRoaXMucC5wYW4uc3BlZWQsXHJcbiAgICAgICAgICBkeTogMFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhblJpZ2h0OiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlKT0+IHRoaXMub3JiaXQuYWN0aW9ucy5wYW4oZSwge1xyXG4gICAgICAgICAgc3RhdGU6ICdtb3ZlJyxcclxuICAgICAgICAgIGR4OiB0aGlzLnAucGFuLnNwZWVkLFxyXG4gICAgICAgICAgZHk6IDBcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQYW5VcDoge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSk9PiB0aGlzLm9yYml0LmFjdGlvbnMucGFuKGUsIHtcclxuICAgICAgICAgIHN0YXRlOiAnbW92ZScsXHJcbiAgICAgICAgICBkeDogMCxcclxuICAgICAgICAgIGR5OiAtdGhpcy5wLnBhbi5zcGVlZFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhbkRvd246IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUpPT4gdGhpcy5vcmJpdC5hY3Rpb25zLnBhbihlLCB7XHJcbiAgICAgICAgICBzdGF0ZTogJ21vdmUnLFxyXG4gICAgICAgICAgZHg6IDAsXHJcbiAgICAgICAgICBkeTogdGhpcy5wLnBhbi5zcGVlZFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kUm90YXRlOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IHRoaXMub3JiaXQuYWN0aW9ucy5yb3RhdGVcclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWREcmFnWm9vbToge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSwgZGF0YSk9PiB7XHJcbiAgICAgICAgICBpZihkYXRhLmR5PjApIHtcclxuICAgICAgICAgICAgdGhpcy5jbWRab29tT3V0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmKGRhdGEuZHk8MCkge1xyXG4gICAgICAgICAgICB0aGlzLmNtZFpvb21JbigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWRQYW46IHtcclxuICAgICAgICBhY3RpdmF0ZTogdGhpcy5vcmJpdC5hY3Rpb25zLnBhblxyXG4gICAgICB9LFxyXG4gICAgICBtb3VzZUNtZFdoZWVsWm9vbToge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSk9PiB7XHJcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICBpZihlLmRlbHRhWTwwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY21kWm9vbU91dCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZihlLmRlbHRhWT4wKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY21kWm9vbUluKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFJvdGF0ZToge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSwgZGF0YSk9PiB7XHJcbiAgICAgICAgICBpZighaXNTd2lwcGluZygndG91Y2hDbWRSb3RhdGUnKSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMub3JiaXQuYWN0aW9ucy5yb3RhdGUoZSwgZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFpvb206IHtcclxuICAgICAgICBhY3RpdmF0ZTogKGUsIGRhdGEpPT4ge1xyXG4gICAgICAgICAgaWYoIWlzU3dpcHBpbmcoJ3RvdWNoQ21kWm9vbScpKSB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgaWYoZGF0YS5keT4wKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbWRab29tT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihkYXRhLmR5PDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmNtZFpvb21JbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFBhbjoge1xyXG4gICAgICAgIGFjdGl2YXRlOiAoZSwgZGF0YSk9PiB7XHJcbiAgICAgICAgICBpZighaXNTd2lwcGluZygndG91Y2hDbWRQYW4nKSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMub3JiaXQuYWN0aW9ucy5wYW4oZSwgZGF0YSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFN3aXBlOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6IChlLCBkYXRhKT0+IHtcclxuICAgICAgICAgIGlmKGlzU3dpcHBpbmcoJ3RvdWNoQ21kU3dpcGUnKSkge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGlmKGRhdGEuc3RhdGU9PT0nc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdG91Y2ggPSAoZS50b3VjaGVzIHx8IGUub3JpZ2luYWxFdmVudC50b3VjaGVzKVt0aGlzLmFjdGlvbnMudG91Y2hDbWRTd2lwZS5jb2RlLTFdO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3dpcGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgICAgaGFuZGxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB4MDogdG91Y2gucGFnZVgsXHJcbiAgICAgICAgICAgICAgICB5MDogdG91Y2gucGFnZVksXHJcbiAgICAgICAgICAgICAgICB4OiB0b3VjaC5wYWdlWCxcclxuICAgICAgICAgICAgICAgIHk6IHRvdWNoLnBhZ2VZXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKGRhdGEuc3RhdGU9PT0nbW92ZScpIHtcclxuICAgICAgICAgICAgICBpZighdGhpcy5zd2lwZURhdGEuaGFuZGxlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2lwZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuc3dpcGVEYXRhLFxyXG4gICAgICAgICAgICAgICAgICB4OiB0aGlzLnN3aXBlRGF0YS54K2RhdGEuZHgsXHJcbiAgICAgICAgICAgICAgICAgIHk6IHRoaXMuc3dpcGVEYXRhLnkrZGF0YS5keVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoTWF0aC5hYnModGhpcy5zd2lwZURhdGEueDAtdGhpcy5zd2lwZURhdGEueCk+MTAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3dpcGVEYXRhLngwPnRoaXMuc3dpcGVEYXRhLng/IHRoaXMuY21kRm9yd2FyZCgpOiB0aGlzLmNtZEJhY2t3YXJkKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3dpcGVEYXRhLmhhbmRsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zd2lwZURhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHdpZFNldHRpbmdzOiB7XHJcbiAgICAgICAgYWN0aXZhdGU6ICgpPT4gdW5kZWZpbmVkXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBiaW5kQWN0aW9ucygpIHtcclxuICAgIHRoaXMuZVRvQSA9IG5ldyBFdmVudHNUb0FjdGlvbnMoJCh0aGlzLnZpc3VhbC5lbGVtZW50KSk7XHJcbiAgICB0aGlzLmVUb0EuYWRkQWN0aW9uKChlKT0+IGUucHJldmVudERlZmF1bHQoKSwgJ2NvbnRleHRtZW51JywgRXZlbnRzVG9BY3Rpb25zLm1vdXNlQnV0dG9ucy5SaWdodCwgMCk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25zID0gdGhpcy5nZXRBY3Rpb25zKCk7XHJcbiAgICBmb3IobGV0IG5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5hY3Rpb25zKSkge1xyXG4gICAgICBjb25zdCBhY3Rpb24gPSB7XHJcbiAgICAgICAgLi4udGhpcy5hY3Rpb25zW25hbWVdLFxyXG4gICAgICAgIC4uLnRoaXMucC5hY3Rpb25zW25hbWVdXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuYWN0aW9uc1tuYW1lXSA9IGFjdGlvbjtcclxuICAgICAgaWYoYWN0aW9uLmVuYWJsZWQpIHtcclxuICAgICAgICBjb25zdCBmbGFncyA9IGFjdGlvbi5mbGFncyB8fCAwO1xyXG4gICAgICAgIGlmKGFjdGlvbi50eXBlKSB7XHJcbiAgICAgICAgICB0aGlzLmVUb0EuYWRkQWN0aW9uKGFjdGlvbi5hY3RpdmF0ZSwgYWN0aW9uLnR5cGUsIGFjdGlvbi5jb2RlLCBmbGFncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoYWN0aW9uLmNvZGUhPT11bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuZVRvQS5hZGRBY3Rpb24oYWN0aW9uLmFjdGl2YXRlLCAna2V5ZG93bicsIGFjdGlvbi5jb2RlLCBmbGFncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcHJlcGFyZVByb3BzKHByb3BzKSB7XHJcbiAgICByZXR1cm4gQm9va0NvbnRyb2xsZXIuY2FsY1Byb3BzKEJvb2tDb250cm9sbGVyLm1lcmdlUHJvcHMoYm9va0NvbnRyb2xsZXJQcm9wcygpLCBwcm9wcykpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHNldEFjdGlvbnMocHJvcHMsIGFjdGlvbnMpIHtcclxuICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyhhY3Rpb25zIHx8IHt9KSkge1xyXG4gICAgICBwcm9wcy5hY3Rpb25zW25hbWVdID0ge1xyXG4gICAgICAgIC4uLnByb3BzLmFjdGlvbnNbbmFtZV0sXHJcbiAgICAgICAgLi4uYWN0aW9uc1tuYW1lXVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIG1lcmdlUHJvcHMoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgc2Vjb25kID0gc2Vjb25kIHx8IHt9O1xyXG4gICAgZnVuY3Rpb24gbWVyZ2UoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgICBzZWNvbmQgPSBzZWNvbmQgfHwge307XHJcbiAgICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICAgIC4uLmZpcnN0LFxyXG4gICAgICAgIC4uLnNlY29uZFxyXG4gICAgICB9O1xyXG4gICAgICBmb3IobGV0IG5hbWUgb2YgT2JqZWN0LmtleXMoZmlyc3QpKSB7XHJcbiAgICAgICAgaWYodHlwZW9mIGZpcnN0W25hbWVdPT09J29iamVjdCcpIHtcclxuICAgICAgICAgIHByb3BzW25hbWVdID0gbWVyZ2UoZmlyc3RbbmFtZV0sIHNlY29uZFtuYW1lXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwcm9wcztcclxuICAgIH1cclxuICAgIGNvbnN0IHByb3BzID0gbWVyZ2UoZmlyc3QsIHNlY29uZCk7XHJcbiAgICBCb29rQ29udHJvbGxlci5zZXRBY3Rpb25zKHByb3BzLCBmaXJzdC5hY3Rpb25zKTtcclxuICAgIEJvb2tDb250cm9sbGVyLnNldEFjdGlvbnMocHJvcHMsIHNlY29uZC5hY3Rpb25zKTtcclxuICAgIHJldHVybiBwcm9wcztcclxuICB9XHJcblxyXG4gIHN0YXRpYyBjYWxjUHJvcHMocHJvcHMpIHtcclxuICAgIHByb3BzLnNjYWxlLmRlbHRhID0gKHByb3BzLnNjYWxlLm1heC1wcm9wcy5zY2FsZS5taW4pL3Byb3BzLnNjYWxlLmxldmVscztcclxuICAgIHByb3BzLmxpZ2h0aW5nLmRlbHRhID0gKHByb3BzLmxpZ2h0aW5nLm1heC1wcm9wcy5saWdodGluZy5taW4pL3Byb3BzLmxpZ2h0aW5nLmxldmVscztcclxuICAgIHJldHVybiBwcm9wcztcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQm9va0NvbnRyb2xsZXIuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9va1ByaW50ZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBib29rLCBzdHlsZVNoZWV0KSB7XHJcbiAgICB0aGlzLmJvb2sgPSBib29rO1xyXG4gICAgdGhpcy5zdHlsZVNoZWV0ID0gc3R5bGVTaGVldDtcclxuICAgIHRoaXMud25kID0gY29udGV4dC53bmQ7XHJcbiAgICB0aGlzLmRvYyA9IGNvbnRleHQuZG9jO1xyXG4gICAgdGhpcy5wYWdlQ2FsbGJhY2sgPSBib29rLmdldFBhZ2VDYWxsYmFjaygpO1xyXG4gICAgY29uc3QgdGVzdCA9IHRoaXMucGFnZUNhbGxiYWNrKDApO1xyXG4gICAgdGhpcy50eXBlID0gdGVzdC50eXBlO1xyXG4gICAgaWYodGhpcy50eXBlPT09J3BkZicpIHtcclxuICAgICAgdGhpcy5wZGZTcmMgPSB0ZXN0LnNyYy5zcmM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBpZih0aGlzLmZyYW1lKSB7XHJcbiAgICAgIHRoaXMuZnJhbWUucmVtb3ZlKCk7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmZyYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpbnQoKSB7XHJcbiAgICBkZWxldGUgdGhpcy5jYW5jZWxlZDtcclxuICAgIGlmKHRoaXMudHlwZT09PSdwZGYnKSB7XHJcbiAgICAgIGxldCBwcmludFduZCwgY2FsbE1hbnVhbGx5ID0gZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMudXNlSUZyYW1lKCkpIHtcclxuICAgICAgICBjYWxsTWFudWFsbHkgPSAhIXRoaXMuZnJhbWU7XHJcbiAgICAgICAgaWYoIXRoaXMuZnJhbWUpIHtcclxuICAgICAgICAgIHRoaXMuZnJhbWUgPSAkKCc8aWZyYW1lIHNyYz1cIicrdGhpcy5wZGZTcmMrJ1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2lmcmFtZT4nKS5hcHBlbmRUbyh0aGlzLmRvYy5ib2R5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJpbnRXbmQgPSB0aGlzLmZyYW1lWzBdLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcHJpbnRXbmQgPSB0aGlzLnduZC5vcGVuKHRoaXMucGRmU3JjKTtcclxuICAgICAgfVxyXG4gICAgICBpZihjYWxsTWFudWFsbHkpIHtcclxuICAgICAgICBwcmludFduZC5wcmludCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICQocHJpbnRXbmQpLm9uKCdsb2FkJywgKCk9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwcmludFduZC5wcmludCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY2F0Y2goZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yZW5kZXJDb250ZW50KCkuXHJcbiAgICAgICAgdGhlbigoY29udGVudCk9PiB7XHJcbiAgICAgICAgICBjb25zdCBwcmludFduZCA9IHRoaXMud25kLm9wZW4oKSxcclxuICAgICAgICAgIHByaW50RG9jID0gcHJpbnRXbmQuZG9jdW1lbnQsXHJcbiAgICAgICAgICBodG1sID0gYFxyXG4gICAgICAgICAgICA8IURPQ1RZUEUgaHRtbD5cclxuICAgICAgICAgICAgPGh0bWw+XHJcbiAgICAgICAgICAgICAgPGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8bWV0YSBjaGFyc2V0PVwidXRmLThcIj5cclxuICAgICAgICAgICAgICAgIDx0aXRsZT4zRCBGbGlwQm9vayAtIFByaW50aW5nPC90aXRsZT5cclxuICAgICAgICAgICAgICAgICR7Y29udGVudC5oZWFkfVxyXG4gICAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCI+XHJcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByaW50RG9jdW1lbnQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnByaW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHByaW50RG9jdW1lbnQsIDEwMCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvc2NyaXB0PlxyXG4gICAgICAgICAgICAgIDwvaGVhZD5cclxuICAgICAgICAgICAgICA8Ym9keSBvbmxvYWQ9XCJpbml0KClcIj5cclxuICAgICAgICAgICAgICAgICR7Y29udGVudC5ib2R5fVxyXG4gICAgICAgICAgICAgIDwvYm9keT5cclxuICAgICAgICAgICAgPC9odG1sPlxyXG4gICAgICAgICAgYDtcclxuICAgICAgICAgIHByaW50RG9jLm9wZW4oKTtcclxuICAgICAgICAgIHByaW50RG9jLndyaXRlKGh0bWwpO1xyXG4gICAgICAgICAgcHJpbnREb2MuY2xvc2UoKTtcclxuICAgICAgICB9KS5cclxuICAgICAgICBjYXRjaCgoZSk9PiBjb25zb2xlLndhcm4oJzNEIEZsaXBCb29rIC0gUHJpbnRpbmcgd2FzIGNhbmNlbGVkJykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3Jlc3Modikge1xyXG4gICAgaWYodGhpcy5jYW5jZWxlZCkge1xyXG4gICAgICB0aHJvdyAnQ2FuY2VsIFByaW50aW5nJztcclxuICAgIH1cclxuICAgIGlmKHRoaXMub25Qcm9ncmVzcykge1xyXG4gICAgICB0aGlzLm9uUHJvZ3Jlc3MoTWF0aC5mbG9vcih2KjEwMCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVyQ29udGVudCgpIHtcclxuICAgIGNvbnN0IHBhZ2VzID0gdGhpcy5ib29rLmdldFBhZ2VzKCksIGhlYWQgPSBuZXcgU2V0KCksIGJvZHkgPSBbXTtcclxuICAgIGxldCBkb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICBmb3IobGV0IHBhZ2U9MDsgcGFnZTxwYWdlczsgKytwYWdlKSB7XHJcbiAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnBhZ2VDYWxsYmFjayhwYWdlKTtcclxuICAgICAgaWYoaW5mby50eXBlPT09J2ltYWdlJykge1xyXG4gICAgICAgIGRvbmUgPSBkb25lLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnByb2dyZXNzKHBhZ2UvcGFnZXMpO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySW1hZ2UoaGVhZCwgYm9keSwgaW5mby5zcmMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYoaW5mby50eXBlPT09J2h0bWwnKSB7XHJcbiAgICAgICAgZG9uZSA9IGRvbmUudGhlbigoKT0+IHtcclxuICAgICAgICAgIHRoaXMucHJvZ3Jlc3MocGFnZS9wYWdlcyk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJIdG1sKGhlYWQsIGJvZHksIGluZm8uc3JjKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRvbmUudGhlbigoKT0+IHtcclxuICAgICAgdGhpcy5wcm9ncmVzcygxKTtcclxuICAgICAgcmV0dXJuIHtoZWFkOiB0aGlzLnJlbmRlckhlYWQoaGVhZCksIGJvZHk6IGJvZHkuam9pbignXFxuJyl9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB3cmFwKGNvbnRlbnQpIHtcclxuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImZiM2QtcHJpbnRlci1wYWdlXCI+JHtjb250ZW50fTwvZGl2PmA7XHJcbiAgfVxyXG5cclxuICByZW5kZXJJbWFnZShoZWFkLCBib2R5LCBzcmMpIHtcclxuICAgIGJvZHkucHVzaChCb29rUHJpbnRlci53cmFwKGA8aW1nIHNyYz1cIiR7c3JjfVwiIC8+YCkpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVySHRtbChoZWFkLCBib2R5LCBzcmMpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+IHtcclxuICAgICAgJC5nZXQoc3JjLCAoaHRtbCk9PiB7XHJcbiAgICAgICAgY29uc3QgbGlua3MgPSBodG1sLm1hdGNoKC88bGluay4qPz4vaWcpIHx8IFtdO1xyXG4gICAgICAgIGZvcihsZXQgbGluayBvZiBsaW5rcykge1xyXG4gICAgICAgICAgaWYobGluay5tYXRjaCgvc3R5bGVzaGVldC9pKSkge1xyXG4gICAgICAgICAgICBjb25zdCBocmVmID0gbGluay5tYXRjaCgvaHJlZlxccyo9XFxzKlsnXCJdKC4qKVsnXCJdL2kpO1xyXG4gICAgICAgICAgICBpZihocmVmKSB7XHJcbiAgICAgICAgICAgICAgaGVhZC5hZGQoaHJlZlsxXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IGh0bWwubWF0Y2goLzxib2R5Lio/PihbXFxTXFxzXSopPFxcL2JvZHk+L2kpO1xyXG4gICAgICAgIGlmKGNvbnRlbnQpIHtcclxuICAgICAgICAgIGJvZHkucHVzaChCb29rUHJpbnRlci53cmFwKGNvbnRlbnRbMV0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9KS5mYWlsKChlKT0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICByZWplY3QoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVuZGVySGVhZChoZWFkKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gW107XHJcbiAgICBoZWFkLmZvckVhY2goKGspPT4gY29udGVudC5wdXNoKGA8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgaHJlZj1cIiR7a31cIj5gKSk7XHJcbiAgICBjb250ZW50LnB1c2godGhpcy5zdHlsZVNoZWV0PyBgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiIGhyZWY9XCIke3RoaXMuc3R5bGVTaGVldH1cIj5gOiBCb29rUHJpbnRlci5kZWZhdWx0U3R5bGVTaGVldCgpKTtcclxuICAgIHJldHVybiBjb250ZW50LmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgdXNlSUZyYW1lKCkge1xyXG4gICAgY29uc3QgaXNDaHJvbWl1bSA9IHRoaXMud25kLmNocm9tZSxcclxuICAgICAgd2luTmF2ID0gdGhpcy53bmQubmF2aWdhdG9yLFxyXG4gICAgICB2ZW5kb3JOYW1lID0gd2luTmF2LnZlbmRvcixcclxuICAgICAgaXNJRWVkZ2UgPSB3aW5OYXYudXNlckFnZW50LmluZGV4T2YoXCJFZGdlXCIpPi0xLFxyXG4gICAgICBpc0lPU0Nocm9tZSA9IHdpbk5hdi51c2VyQWdlbnQubWF0Y2goXCJDcmlPU1wiKTtcclxuICAgIGxldCB1c2U7XHJcbiAgICBpZihpc0lPU0Nocm9tZSl7XHJcbiAgICAgIHVzZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYoaXNDaHJvbWl1bSAmJiB2ZW5kb3JOYW1lPT09J0dvb2dsZSBJbmMuJyAmJiAhaXNJRWVkZ2UpIHtcclxuICAgICAgdXNlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHVzZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0U3R5bGVTaGVldCgpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICAgIDxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cclxuICAgICAgICBib2R5IHtcclxuICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgIHBhZGRpbmc6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC5mYjNkLXByaW50ZXItcGFnZSB7XHJcbiAgICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhbHdheXM7XHJcbiAgICAgICAgfVxyXG4gICAgICA8L3N0eWxlPlxyXG4gICAgYDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQm9va1ByaW50ZXIuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgVmlldyBmcm9tICdWaWV3JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJvb2tWaWV3IGV4dGVuZHMgVmlldyB7XHJcblxyXG4gIHN0YXRpYyBQQUdFX0hBTkRMRVJfREVMQVkgPSAxMDAwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIG9uTG9hZCwgdGVtcGxhdGUsIGhhbmRsZXIpIHtcclxuICAgIHN1cGVyKGNvbnRhaW5lciwgb25Mb2FkLCB0ZW1wbGF0ZSwgaGFuZGxlcik7XHJcbiAgfVxyXG5cclxuICBpbml0VmlldygpIHtcclxuICAgIHRoaXMudmlldyA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy52aWV3Jyk7XHJcbiAgICB0aGlzLmJvb2ttYXJrc1ZpZXcgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcud2lkQm9va21hcmtzJyk7XHJcbiAgICB0aGlzLnRodW1ibmFpbHNWaWV3ID0gdGhpcy5jb250YWluZXIuZmluZCgnLndpZFRodW1ibmFpbHMnKTtcclxuICAgIHRoaXMuc2VhcmNoVmlldyA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy53aWRTZWFyY2gnKTtcclxuICB9XHJcblxyXG4gIGdldEhhbmRsZXJzKGlkKSB7XHJcbiAgICBsZXQgaGFuZGxlcnM7XHJcbiAgICBpZihpZD09PSdpbnBQYWdlJykge1xyXG4gICAgICBoYW5kbGVycyA9IFt7XHJcbiAgICAgICAgaW5wUGFnZTogKGUsIGRhdGEpPT4gdGhpcy5jYWxsTGF0ZXIoc3VwZXIuZ2V0SGFuZGxlcnMoaWQpLCBpZCwgZSwgZGF0YSwgQm9va1ZpZXcuUEFHRV9IQU5ETEVSX0RFTEFZKVxyXG4gICAgICB9XTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBoYW5kbGVycyA9IHN1cGVyLmdldEhhbmRsZXJzKGlkKTtcclxuICAgIH1cclxuICAgIHJldHVybiBoYW5kbGVycztcclxuICB9XHJcblxyXG4gIG9uSXRlbVN0YXRlQ2hhbmdlZChpZCwgc3RhdGUpIHtcclxuICAgIGlmKGlkPT09J2NtZEZ1bGxTY3JlZW4nKSB7XHJcbiAgICAgIGlmKHN0YXRlLmFjdGl2ZSkge1xyXG4gICAgICAgIHRoaXMucGFyZW50Q29udGFpbmVyLmFkZENsYXNzKCdmdWxsc2NyZWVuJyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnRDb250YWluZXIucmVtb3ZlQ2xhc3MoJ2Z1bGxzY3JlZW4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VmlldygpIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXc7XHJcbiAgfVxyXG5cclxuICBnZXRCb29rbWFya3NWaWV3KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYm9va21hcmtzVmlldztcclxuICB9XHJcblxyXG4gIGdldFRodW1ibmFpbHNWaWV3KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGh1bWJuYWlsc1ZpZXc7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hWaWV3KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVmlldztcclxuICB9XHJcblxyXG4gIGdldEZvcm1zKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRMaW5rcygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdjbWRab29tSW4nLFxyXG4gICAgICAnY21kWm9vbU91dCcsXHJcbiAgICAgICdjbWREZWZhdWx0Wm9vbScsXHJcbiAgICAgICdjbWRUb2MnLFxyXG4gICAgICAnY21kRmFzdEJhY2t3YXJkJyxcclxuICAgICAgJ2NtZEJhY2t3YXJkJyxcclxuICAgICAgJ2NtZEZvcndhcmQnLFxyXG4gICAgICAnY21kRmFzdEZvcndhcmQnLFxyXG4gICAgICAnY21kU2F2ZScsXHJcbiAgICAgICdjbWRQcmludCcsXHJcbiAgICAgICdjbWRGdWxsU2NyZWVuJyxcclxuICAgICAgJ2NtZFNtYXJ0UGFuJyxcclxuICAgICAgJ2NtZFNpbmdsZVBhZ2UnLFxyXG4gICAgICAnY21kU291bmRzJyxcclxuICAgICAgJ2NtZFN0YXRzJyxcclxuICAgICAgJ2NtZExpZ2h0aW5nVXAnLFxyXG4gICAgICAnY21kTGlnaHRpbmdEb3duJyxcclxuICAgICAgJ2NtZENsb3NlVG9jJyxcclxuICAgICAgJ2NtZEJvb2ttYXJrcycsXHJcbiAgICAgICdjbWRTZWFyY2gnLFxyXG4gICAgICAnY21kVGh1bWJuYWlscydcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRXaWRnZXRzKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3dpZExvYWRpbmdQcm9ncmVzcycsXHJcbiAgICAgICd3aWRGbG9hdFduZCcsXHJcbiAgICAgICd3aWRUb2NNZW51JyxcclxuICAgICAgJ3dpZEJvb2ttYXJrcycsXHJcbiAgICAgICd3aWRUaHVtYm5haWxzJyxcclxuICAgICAgJ3dpZFNlYXJjaCcsXHJcbiAgICAgICd3aWRTZXR0aW5ncycsXHJcbiAgICAgICd3aWRMb2FkaW5nJ1xyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGdldElucHV0cygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdpbnBQYWdlJyxcclxuICAgICAgJ2lucFBhZ2VzJ1xyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGdldFRleHRzKCkge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgJ3R4dExvYWRpbmdQcm9ncmVzcydcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wbGF0ZSgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGh0bWw6ICd0ZW1wbGF0ZXMvZGVmYXVsdC1ib29rLXZpZXcuaHRtbCcsXHJcbiAgICAgIHN0eWxlczogW1xyXG4gICAgICAgICdjc3MvYmxhY2stYm9vay12aWV3LmNzcydcclxuICAgICAgXSxcclxuICAgICAgbGlua3M6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0JyxcclxuICAgICAgICAgIGhyZWY6ICdjc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MnXHJcbiAgICAgICAgfVxyXG4gICAgICBdLFxyXG4gICAgICBzY3JpcHQ6ICdqcy9kZWZhdWx0LWJvb2stdmlldy5qcydcclxuICAgIH07XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL0Jvb2tWaWV3LmpzIiwiaW1wb3J0IEJvb2tQcm9wc0J1aWxkZXIgZnJvbSAnLi9Cb29rUHJvcHNCdWlsZGVyJztcclxuaW1wb3J0IEltYWdlRmFjdG9yeSBmcm9tICdJbWFnZUZhY3RvcnknO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xiQm9va1Byb3BzQnVpbGRlciBleHRlbmRzIEJvb2tQcm9wc0J1aWxkZXIge1xyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHBhZ2VDYWxsYmFjaywgcGFnZXMsIG9uUmVhZHkpIHtcclxuICAgIHN1cGVyKG9uUmVhZHkpO1xyXG4gICAgdGhpcy5jYWxjU2hlZXRzKHBhZ2VzKTtcclxuICAgIHRoaXMucGFnZUNhbGxiYWNrID0gcGFnZUNhbGxiYWNrO1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgcGFnZUNhbGxiYWNrOiBwYWdlQ2FsbGJhY2suYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgIHRoaXMuaW1hZ2VGYWN0b3J5ID0gbmV3IEltYWdlRmFjdG9yeShjb250ZXh0KTtcclxuXHJcbiAgICBpZihwYWdlcz4wKSB7XHJcbiAgICAgIGNvbnN0IHRlc3QgPSB0aGlzLmltYWdlRmFjdG9yeS5idWlsZChwYWdlQ2FsbGJhY2soMCksIDAsIHRoaXMuZGVmYXVsdHMuc2hlZXQud2lkdGhUZXhlbHMsIHRoaXMuZGVmYXVsdHMuc2hlZXQuaGVpZ2h0VGV4ZWxzLCB0aGlzLmRlZmF1bHRzLnNoZWV0LmNvbG9yKTtcclxuICAgICAgdGVzdC5vbkxvYWQgPSAoKT0+IHtcclxuICAgICAgICB0aGlzLmNhbGNQcm9wcyh0ZXN0LndpZHRoLCB0ZXN0LmhlaWdodCk7XHJcbiAgICAgICAgdGVzdC5kaXNwb3NlKCk7XHJcbiAgICAgICAgdGhpcy5yZWFkeSgpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucHJvcHMgPSB0aGlzLmRlZmF1bHRzO1xyXG4gICAgICB0aGlzLnJlYWR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL0NsYkJvb2tQcm9wc0J1aWxkZXIuanMiLCJpbXBvcnQgU2hlZXRCbG9jayBmcm9tICcuL1NoZWV0QmxvY2snO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ292ZXIgZXh0ZW5kcyBTaGVldEJsb2NrIHtcclxuXHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBwLCBhbmdsZSwgc3RhdGUpIHtcclxuICAgIHN1cGVyKHZpc3VhbCwgcCwgMCwgMSwgYW5nbGUsIHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGdldFByb3BzKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4udGhpcy5wLmNvdmVyLFxyXG4gICAgICBzaGVldHM6IDFcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBsb2FkUG9pbnRzKCkge1xyXG4gICAgY29uc3Qgb3BlbmVkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFsyLDMsNF0sXHJcbiAgICAgIFsyLDMsNCw1LDZdXHJcbiAgICBdLFxyXG4gICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXMgPSBbXHJcbiAgICAgIFswLDEsMl0sXHJcbiAgICAgIFswLDEsMl1cclxuICAgIF0sXHJcbiAgICBpbnRlcnBvbGF0aW9uUG9pbnRzID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgeDogW1xyXG4gICAgICAgICAgICAgWzAsMC4yODc3LDAuNjM0NywwLjgxNzQsMS4wMDAwXSxcclxuICAgICAgICAgICAgIFswLDAuMjgzMSwwLjYyNTYsMC44MDgyLDAuOTkwOV0sXHJcbiAgICAgICAgICAgICBbMCwwLjI2MDMsMC41OTM2LDAuNzc2MywwLjk1ODldLFxyXG4gICAgICAgICAgICAgWzAsMC4xMzcwLDAuMzg4MSwwLjUzNDIsMC42NzU4XSxcclxuICAgICAgICAgICAgIFswLDAsMCwwLDBdXHJcbiAgICAgICAgXSxcclxuICAgICAgICB5OiBbXHJcbiAgICAgICAgICAgICBbMCwwLDAsMCwwXSxcclxuICAgICAgICAgICAgIFswLDAuMDIsMC4wMDUsLTAuMDAxLC0wLjAwMjVdLFxyXG4gICAgICAgICAgICAgWzAsMC4wNCwwLjAxLC0wLjAwMiwtMC4wMDVdLFxyXG4gICAgICAgICAgICAgWzAsIDAuMjQ2NiwgMC40Nzk1LCAwLjU3MDgsIDAuNjc1OF0sXHJcbiAgICAgICAgICAgICBbMCwgMC4yODc3LCAwLjYzNDcsIDAuODE3NCwgMS4wMDAwXVxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHg6IFtcclxuICAgICAgICAgICAgIFswLDAuMjg3NywwLjYzNDcsMC44MTc0LDEuMDAwMF0sXHJcbiAgICAgICAgICAgICBbMCwwLjI4MzEsMC42MjU2LDAuODA4MiwwLjk5MDldLFxyXG4gICAgICAgICAgICAgWzAsMC4yNjAzLDAuNTkzNiwwLjc3NjMsMC45NTg5XSxcclxuICAgICAgICAgICAgIFswLjAwMCwwLjIzMywwLjU2MywwLjc0NiwwLjkyN10sXHJcbiAgICAgICAgICAgICBbMC4wMDAsMC4xNDQsMC40MzMsMC42MTMsMC43OTZdLFxyXG4gICAgICAgICAgICAgWzAuMDAwLDAuMDcwLDAuMjg4LDAuNDU1LDAuNjI2XSxcclxuICAgICAgICAgICAgIFswLDAsMCwwLDBdXHJcbiAgICAgICAgXSxcclxuICAgICAgICB5OiBbXHJcbiAgICAgICAgICAgICBbMCwwLDAsMCwwXSxcclxuICAgICAgICAgICAgIFswLDAuMDIsMC4wMDUsLTAuMDAxLC0wLjAwMjVdLFxyXG4gICAgICAgICAgICAgWzAsMC4wNCwwLjAxLC0wLjAwMiwtMC4wMDVdLFxyXG4gICAgICAgICAgICAgWzAuMDAwLDAuMTY4LDAuMjY5LDAuMjcwLDAuMjU1XSxcclxuICAgICAgICAgICAgIFswLjAwMCwwLjI0NSwwLjQzNSwwLjQ1OCwwLjQ2MF0sXHJcbiAgICAgICAgICAgICBbMC4wMDAsMC4yNzgsMC41NDQsMC42MTQsMC42NzNdLFxyXG4gICAgICAgICAgICAgWzAsIDAuMjg3NywgMC42MzQ3LCAwLjgxNzQsIDEuMDAwMF1cclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpbnRlcnBvbGF0aW9uUG9pbnRzLFxyXG4gICAgICBvcGVuZWRJbnRlcnBvbGF0aW9uSW5kZWNlcyxcclxuICAgICAgY2xvc2VkSW50ZXJwb2xhdGlvbkluZGVjZXNcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQ292ZXIuanMiLCJpbXBvcnQgU2hlZXRDc3NMYXllciBmcm9tICcuL1NoZWV0Q3NzTGF5ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3NzTGF5ZXJzTWFuYWdlciB7XHJcbiAgY29uc3RydWN0b3IoYm9vaykge1xyXG4gICAgdGhpcy5ib29rID0gYm9vaztcclxuICAgIHRoaXMucHJvcHMgPSBib29rLnAuY3NzTGF5ZXJQcm9wcztcclxuICAgIHRoaXMudmlzdWFsID0gYm9vay52aXN1YWw7XHJcbiAgICB0aGlzLnBhZ2VNYW5hZ2VyID0gYm9vay5wYWdlTWFuYWdlcjtcclxuICAgIHRoaXMud3JhcHBlcnMgPSB7fTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZXMoKSB7XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5ib29rLmdldFBhZ2UoKSwgcGFnZXMgPSB0aGlzLmJvb2suZ2V0UGFnZXMoKTtcclxuICAgIHJldHVybiBwYWdlPT09MCB8fCBwYWdlPT09cGFnZXMtMT8gW3BhZ2VdOiBbcGFnZSwgcGFnZSsxXTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICBmb3IobGV0IHcgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLndyYXBwZXJzKSkge1xyXG4gICAgICB3LmxheWVycy5mb3JFYWNoKChsKT0+IGwuZGlzcG9zZSgpKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLndyYXBwZXJzO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpIHtcclxuICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XHJcbiAgICBmb3IobGV0IG4gb2YgdGhpcy5nZXRBY3RpdmVzKCkpIHtcclxuICAgICAgY29uc3QgdyA9IHRoaXMud3JhcHBlcnNbbl07XHJcbiAgICAgIGlmKHcpIHtcclxuICAgICAgICBpZih3LnN0YXRlPT09J3JlYWR5JyAmJiB3LmxheWVycy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5ib29rLmdldEJsb2NrQnlQYWdlKG4pO1xyXG4gICAgICAgICAgdy5sYXllcnMuZm9yRWFjaCgobCk9PiB7XHJcbiAgICAgICAgICAgIGlmKGwuaXNIaWRkZW4oKSkge1xyXG4gICAgICAgICAgICAgIGwudXBkYXRlKGJsb2NrKTtcclxuICAgICAgICAgICAgICBsLnNob3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHcgPSB0aGlzLndyYXBwZXJzW25dID0ge1xyXG4gICAgICAgICAgc3RhdGU6ICdsb2FkaW5nJyxcclxuICAgICAgICAgIGxheWVyczogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VNYW5hZ2VyLmdldExheWVycyhuLCAobGF5ZXJzKT0+IHtcclxuICAgICAgICAgICAgaWYobGF5ZXJzLmxlbmd0aCAmJiB0aGlzLndyYXBwZXJzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmJvb2suZ2V0QmxvY2tCeVBhZ2Uobik7XHJcbiAgICAgICAgICAgICAgZm9yKGxldCBsIG9mIGxheWVycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2wgPSBuZXcgU2hlZXRDc3NMYXllcih0aGlzLnZpc3VhbCwgYmxvY2ssIHRoaXMucHJvcHMpO1xyXG4gICAgICAgICAgICAgICAgdy5sYXllcnMucHVzaChzbCk7XHJcbiAgICAgICAgICAgICAgICBzbC5zZXQobC5jc3MsIGwuaHRtbCwgbC5qcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgICAgICAgICBpZighdGhpcy5oaWRkZW4gJiYgfnRoaXMuZ2V0QWN0aXZlcygpLmluZGV4T2YobikpIHtcclxuICAgICAgICAgICAgICAgICAgdy5sYXllcnMuZm9yRWFjaCgobCk9PiBsLnNob3coKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHcuc3RhdGUgPSAncmVhZHknO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcclxuICAgIGNvbnN0IHdhaXQgPSBbXTtcclxuICAgIGZvcihsZXQgdyBvZiBPYmplY3QudmFsdWVzKHRoaXMud3JhcHBlcnMpKSB7XHJcbiAgICAgIHcubGF5ZXJzLmZvckVhY2goKGwpPT4gd2FpdC5wdXNoKGwuaGlkZSgpKSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdCk7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvQ3NzTGF5ZXJzTWFuYWdlci5qcyIsImltcG9ydCB7JCwgVEhSRUV9IGZyb20gJy4uL2xpYnMnXHJcbmltcG9ydCBDYWNoZSBmcm9tICdDYWNoZSc7XHJcbmltcG9ydCBMb2FkaW5nQW5pbWF0aW9uIGZyb20gJ0xvYWRpbmdBbmltYXRpb24nO1xyXG5pbXBvcnQgSW1hZ2VGYWN0b3J5IGZyb20gJ0ltYWdlRmFjdG9yeSc7XHJcbmltcG9ydCBCYXNlTWF0aFV0aWxzIGZyb20gJ0Jhc2VNYXRoVXRpbHMnO1xyXG5pbXBvcnQgVGV4dHVyZUFuaW1hdG9yIGZyb20gJ1RleHR1cmVBbmltYXRvcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYWdlTWFuYWdlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgYm9vaywgcCkge1xyXG4gICAgdGhpcy52aXN1YWwgPSB2aXN1YWw7XHJcbiAgICB0aGlzLmJvb2sgPSBib29rO1xyXG4gICAgdGhpcy5wYWdlUXVlcnkgPSAnJztcclxuICAgIHRoaXMucCA9IHA7XHJcbiAgICB0aGlzLnBhZ2VDYWNoZSA9IG5ldyBDYWNoZShwLmNhY2hlZFBhZ2VzKTtcclxuICAgIHRoaXMucmVzb3VyY2VzQ2FjaGUgPSBuZXcgQ2FjaGUoKTtcclxuICAgIHRoaXMuY2FudmFzID0gJCgnPGNhbnZhcz4nKVswXTtcclxuICAgIHRoaXMuaW1hZ2VGYWN0b3J5ID0gbmV3IEltYWdlRmFjdG9yeSh7Li4udmlzdWFsLCBkaXNwYXRjaEV2ZW50OiBib29rLmRpc3BhdGNoRXZlbnQuYmluZChib29rKSwgcmVuZGVyQ2FudmFzOiB0aGlzLmNhbnZhcywgcmVuZGVyQ2FudmFzQ3R4OiB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpfSwgdGhpcy5yZXNvdXJjZXNDYWNoZSk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5ncyA9IFtdO1xyXG4gICAgdGhpcy5yZW5kZXJRdWV1ZSA9IFtdO1xyXG4gICAgdGhpcy5wYWdlUmVxdWVzdHMgPSBbXTtcclxuICAgIHRoaXMucHJlZGljdGVkUmVxdWVzdHMgPSBbXTtcclxuXHJcbiAgICB0aGlzLnRtcE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCk7XHJcbiAgICB2aXN1YWwuYWRkT2JqZWN0KG5ldyBUSFJFRS5NZXNoKG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDAsIDApLCB0aGlzLnRtcE1hdGVyaWFsKSk7XHJcblxyXG4gICAgdGhpcy5sb2FkaW5nQW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMubG9hZGluZyA9IHt9O1xyXG4gICAgdGhpcy5sb2FkaW5nW3AuY292ZXIuY29sb3JdID0gdGhpcy5jcmVhdGVMb2FkaW5nVGV4dHVyZShwLmNvdmVyKTtcclxuICAgIGlmKHAucGFnZS5jb2xvciE9PXAuY292ZXIuY29sb3IpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nW3AucGFnZS5jb2xvcl0gPSB0aGlzLmNyZWF0ZUxvYWRpbmdUZXh0dXJlKHAucGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50dXJuT25FdmVudHMoKTtcclxuXHJcbiAgICB2aXN1YWwuYWRkUmVuZGVyQ2FsbGJhY2sodGhpcy51cGRhdGUuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVMb2FkaW5nVGV4dHVyZShwKSB7XHJcbiAgICBjb25zdCBzcHJpdGVUaWxlcyA9IDYsXHJcbiAgICAgIHNjYWxlID0gTWF0aC5zcXJ0KDQuNSoyMTAqNC41KjI5Ny8ocC53aWR0aFRleGVscypwLmhlaWdodFRleGVscykpLFxyXG4gICAgICBhbmltYXRpb24gPSBuZXcgTG9hZGluZ0FuaW1hdGlvbihzY2FsZSpwLndpZHRoVGV4ZWxzLCBzY2FsZSpwLmhlaWdodFRleGVscywgcC5jb2xvciksXHJcbiAgICAgIGFuaW1hdG9yID0gbmV3IFRleHR1cmVBbmltYXRvcihhbmltYXRpb24uY3JlYXRlU3ByaXRlKHNwcml0ZVRpbGVzKSwgc3ByaXRlVGlsZXMsIDEsIHNwcml0ZVRpbGVzLCAwLjIpO1xyXG4gICAgYW5pbWF0aW9uLmRpc3Bvc2UoKTtcclxuICAgIHJldHVybiBhbmltYXRvcjtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnR1cm5PZmZFdmVudHMoKTtcclxuICAgIGZvcihsZXQgY29sb3Igb2YgT2JqZWN0LmtleXModGhpcy5sb2FkaW5nKSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdbY29sb3JdLmRpc3Bvc2UoKTtcclxuICAgIH1cclxuICAgIGRlbGV0ZSB0aGlzLmxvYWRpbmc7XHJcbiAgICB0aGlzLnJlc291cmNlc0NhY2hlLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMucGFnZUNhY2hlLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHRoaXMuY2FudmFzLndpZHRoID0gMDtcclxuICAgIGRlbGV0ZSB0aGlzLmNhbnZhcztcclxuICB9XHJcblxyXG4gIGlzQ292ZXIobikge1xyXG4gICAgcmV0dXJuIG48MiB8fCBuPj0yKih0aGlzLnAuc2hlZXRzKzEpO1xyXG4gIH1cclxuXHJcbiAgaXNNb2JpbGUoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMudmlzdWFsLnduZC5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpPjE7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlU3RhdGUobikge1xyXG4gICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5wYWdlQ2FjaGUuZ2V0KG4pO1xyXG4gICAgcmV0dXJuIG9iamVjdD8gb2JqZWN0LnN0YXRlOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBlbmFibGVMb2FkaW5nQW5pbWF0aW9uKGVuYWJsZSkge1xyXG4gICAgdGhpcy5sb2FkaW5nQW5pbWF0aW9uID0gZW5hYmxlO1xyXG4gICAgZm9yKGxldCBvIG9mIHRoaXMubG9hZGluZ3MpIHtcclxuICAgICAgdGhpcy5zZXR1cE1hdGVyaWFsKG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGR0KSB7XHJcbiAgICBpZih0aGlzLmxvYWRpbmdBbmltYXRpb24pIHtcclxuICAgICAgY29uc3QgbG9hZGluZyA9IHt9O1xyXG4gICAgICBmb3IobGV0IG8gb2YgdGhpcy5sb2FkaW5ncykge1xyXG4gICAgICAgIGlmKG8uaXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgbG9hZGluZ1tvLmNvbG9yXSA9IHRydWU7O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IGNvbG9yIG9mIE9iamVjdC5rZXlzKGxvYWRpbmcpKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nW2NvbG9yXS51cGRhdGUoZHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVGcm9tTG9hZGluZ3Mobykge1xyXG4gICAgY29uc3QgaSA9IHRoaXMubG9hZGluZ3MuaW5kZXhPZihvKTtcclxuICAgIGlmKH5pKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ3Muc3BsaWNlKGksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRnJvbVJlbmRlclF1ZXVlKG8pIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnJlbmRlclF1ZXVlLmluZGV4T2Yobyk7XHJcbiAgICBpZih+aSkge1xyXG4gICAgICB0aGlzLnJlbmRlclF1ZXVlLnNwbGljZShpLCAxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hQYWdlUXVlcnkobiwgcXVlcnk9JycpIHtcclxuICAgIHRoaXMucGFnZVF1ZXJ5ID0gcXVlcnk7XHJcbiAgICBjb25zdCBvYmplY3QgPSB0aGlzLnBhZ2VDYWNoZS5nZXQobik7XHJcbiAgICBpZihvYmplY3QgJiYgb2JqZWN0LndyYXBwZXIgJiYgb2JqZWN0LndyYXBwZXIuc2V0UXVlcnkpIHtcclxuICAgICAgaWYoIXRoaXMucGFnZUNhY2hlLnJlbW92ZShuKSkge1xyXG4gICAgICAgIG9iamVjdC53cmFwcGVyLnNldFF1ZXJ5KHF1ZXJ5KTtcclxuICAgICAgICB0aGlzLnB1c2hJblJlbmRlclF1ZXVlKG9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hab29tKCkge1xyXG4gICAgaWYodGhpcy5wLmF1dG9SZXNvbHV0aW9uLmVuYWJsZSkge1xyXG4gICAgICBjb25zdCBlcyA9IFtdO1xyXG4gICAgICB0aGlzLnBhZ2VDYWNoZS5mb3JFYWNoKChlKT0+IHtcclxuICAgICAgICBlcy5wdXNoKGUpO1xyXG4gICAgICB9KTtcclxuICAgICAgZXMuZm9yRWFjaCgoZSk9PiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gZVsxXTtcclxuICAgICAgICBpZihvYmplY3QgJiYgb2JqZWN0LndyYXBwZXIpIHtcclxuICAgICAgICAgIGlmKCF0aGlzLnBhZ2VDYWNoZS5yZW1vdmUoZVswXSkpIHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoSW5SZW5kZXJRdWV1ZShvYmplY3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYXllcnMobiwgY2xiKSB7XHJcbiAgICBpZih0aGlzLnAuY3NzTGF5ZXJzTG9hZGVyKSB7XHJcbiAgICAgIHRoaXMucC5jc3NMYXllcnNMb2FkZXIobiwgKC4uLmFyZ3MpPT4ge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMucGFnZUNhY2hlLmdldChuKTtcclxuICAgICAgICBpZihvYmplY3QpIHtcclxuICAgICAgICAgIGlmKG9iamVjdC5zdGF0ZSE9PSdhY3RpdmUnKSB7XHJcbiAgICAgICAgICAgIG9iamVjdC5wZW5kaW5ncy5wdXNoKHtjbGIsIGFyZ3N9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjbGIoLi4uYXJncyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjbGIoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZVBlbmRpbmdzKHBlbmRpbmdzKSB7XHJcbiAgICBmb3IobGV0IHAgb2YgcGVuZGluZ3MpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBwLmNsYiguLi5wLmFyZ3MpO1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwZW5kaW5ncy5zcGxpY2UoMCwgcGVuZGluZ3MubGVuZ3RoKTtcclxuICB9XHJcblxyXG4gIHJ0bFBhZ2VOKG4pIHtcclxuICAgIHJldHVybiB0aGlzLnAucnRsPyAyKih0aGlzLnAuc2hlZXRzKzIpLTEtbjogbjtcclxuICB9XHJcblxyXG4gIGxvYWQobWF0ZXJpYWwsIG4pIHtcclxuICAgIGNvbnN0IHBpID0gdGhpcy5wLnBhZ2VDYWxsYmFjayh0aGlzLnJ0bFBhZ2VOKG4pKSwgcCA9IHRoaXMuaXNDb3ZlcihuKT8gdGhpcy5wLmNvdmVyOiB0aGlzLnAucGFnZTtcclxuICAgIGNvbnN0IG8gPSB7XHJcbiAgICAgIG4sXHJcbiAgICAgIHRleHR1cmU6IG5ldyBUSFJFRS5UZXh0dXJlKCksXHJcbiAgICAgIHdyYXBwZXI6IG51bGwsXHJcbiAgICAgIHN0YXRlOiAnbG9hZGluZycsXHJcbiAgICAgIGxvY2tlZDogKG4pPT4gby5zdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IG8uc3RhdGUgPT09ICdyZW5kZXJpbmcnIHx8IHRoaXMuYm9vay5pc0FjdGl2ZVBhZ2UobiksXHJcbiAgICAgIGNvbG9yOiBwLmNvbG9yLFxyXG4gICAgICBpc0FjdGl2ZTogKCk9PiB0aGlzLmJvb2suaXNBY3RpdmVQYWdlKG4pLFxyXG4gICAgICBpc1RvcDogKCk9PiB+dGhpcy5ib29rLmdldFRvcFBhZ2VzKCkuaW5kZXhPZihuKSxcclxuICAgICAgZGlzcG9zZTogKCk9PiB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tTG9hZGluZ3Mobyk7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tUmVuZGVyUXVldWUobyk7XHJcbiAgICAgICAgaWYoby53cmFwcGVyICYmIG8ud3JhcHBlci5kaXNwb3NlKSB7XHJcbiAgICAgICAgICBvLndyYXBwZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvLnRleHR1cmUuZGlzcG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvLnRleHR1cmU7XHJcbiAgICAgICAgZGVsZXRlIG8ud3JhcHBlcjtcclxuICAgICAgfSxcclxuICAgICAgcGVuZGluZ3M6IFtdXHJcbiAgICB9O1xyXG4gICAgby50ZXh0dXJlLm1pbkZpbHRlciA9IFRIUkVFLkxpbmVhckZpbHRlcjtcclxuICAgIHRoaXMubG9hZGluZ3MucHVzaChvKTtcclxuICAgIHRoaXMuc2V0TWF0ZXJpYWwobywgbWF0ZXJpYWwpO1xyXG5cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB7XHJcbiAgICAgIGlmKG8udGV4dHVyZSkge1xyXG4gICAgICAgIG8ud2lkdGhUZXhlbHMgPSBwaS53aWR0aFRleGVscyB8fCBwLndpZHRoVGV4ZWxzO1xyXG4gICAgICAgIG8uaGVpZ2h0VGV4ZWxzID0gcGkuaGVpZ2h0VGV4ZWxzIHx8IHAuaGVpZ2h0VGV4ZWxzO1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuY2FsY1Jlc29sdXRpb24obyk7XHJcbiAgICAgICAgby53cmFwcGVyID0gdGhpcy5pbWFnZUZhY3RvcnkuYnVpbGQocGksIHBpLm51bWJlcj09PXVuZGVmaW5lZD8gbjogcGkubnVtYmVyLCByZXMud2lkdGgsIHJlcy5oZWlnaHQsIHAuY29sb3IsIHRoaXMucC5pbmplY3Rvcik7XHJcbiAgICAgICAgaWYoby53cmFwcGVyLnNldFF1ZXJ5KSB7XHJcbiAgICAgICAgICBvLndyYXBwZXIuc2V0UXVlcnkodGhpcy5wYWdlUXVlcnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvLnNpbXVsYXRlID0gcGkuaW50ZXJhY3RpdmU/IChvLndyYXBwZXIuc2ltdWxhdGUgfHwgKCgpPT4gdW5kZWZpbmVkKSkuYmluZChvLndyYXBwZXIpOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgby53cmFwcGVyLm9uTG9hZCA9ICgpPT4ge1xyXG4gICAgICAgICAgdGhpcy5wdXNoSW5SZW5kZXJRdWV1ZShvKTtcclxuICAgICAgICAgIHRoaXMuYm9vay5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgICAgICAgdHlwZTogJ2xvYWRlZFBhZ2UnLFxyXG4gICAgICAgICAgICBwYWdlOiBuXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIG8ud3JhcHBlci5vbkNoYW5nZSA9IChpbWFnZSk9PiB7XHJcbiAgICAgICAgICBpZihvLnRleHR1cmUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tTG9hZGluZ3Mobyk7XHJcbiAgICAgICAgICAgIGlmKG8ubWF0ZXJpYWwpIHtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLm1hcCA9IG8udGV4dHVyZTtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKDB4RkZGRkZGKTtcclxuICAgICAgICAgICAgICBvLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvLnRleHR1cmUuaW1hZ2UgPSBpbWFnZTtcclxuICAgICAgICAgICAgby50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgby50ZXh0dXJlLm9uVXBkYXRlID0gKCk9PiB7XHJcbiAgICAgICAgICAgICAgaWYoby5zdGF0ZSAhPT0gJ3F1ZXVlZEZvclJlbmRlcicpIHtcclxuICAgICAgICAgICAgICAgIG8uc3RhdGUgPSAnYWN0aXZlJztcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVBlbmRpbmdzKG8ucGVuZGluZ3MpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZW5kZXJpbmc7XHJcbiAgICAgICAgICAgICAgLy90aGlzLnVwZGF0ZVJlbmRlclF1ZXVlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMudG1wTWF0ZXJpYWwubWFwID0gby50ZXh0dXJlO1xyXG4gICAgICAgICAgICB0aGlzLnRtcE1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYm9vay5kaXNwYXRjaEV2ZW50KHtcclxuICAgICAgdHlwZTogJ2xvYWRQYWdlJyxcclxuICAgICAgcGFnZTogblxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdlQ2FjaGUucHV0KG4sIG8pO1xyXG4gIH1cclxuXHJcbiAgaXNTaW5nbGVQYWdlKG8pIHtcclxuICAgIHJldHVybiB0aGlzLnAuc2luZ2xlUGFnZSB8fCAhby5uIHx8IG8ubj09PXRoaXMuYm9vay5nZXRQYWdlcygpLTE7XHJcbiAgfVxyXG5cclxuICBjYWxjUmVzb2x1dGlvbihvKSB7XHJcbiAgICBsZXQgcmVzO1xyXG4gICAgaWYodGhpcy5wLmF1dG9SZXNvbHV0aW9uLmVuYWJsZSkge1xyXG4gICAgICBjb25zdCBrID0gTWF0aC5taW4oKHRoaXMuaXNTaW5nbGVQYWdlKG8pPyAxOiAwLjUpKnRoaXMudmlzdWFsLndpZHRoKCkvby53aWR0aFRleGVscywgdGhpcy52aXN1YWwuaGVpZ2h0KCkvby5oZWlnaHRUZXhlbHMpO1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgd2lkdGg6IHRoaXMucC5hdXRvUmVzb2x1dGlvbi5rKnRoaXMucC56b29tKmsqby53aWR0aFRleGVscyxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMucC5hdXRvUmVzb2x1dGlvbi5rKnRoaXMucC56b29tKmsqby5oZWlnaHRUZXhlbHNcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgd2lkdGg6IG8ud2lkdGhUZXhlbHMsXHJcbiAgICAgICAgaGVpZ2h0OiBvLmhlaWdodFRleGVsc1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHB1c2hJblJlbmRlclF1ZXVlKG8pIHtcclxuICAgIGlmKG8uc3RhdGUgIT09ICdxdWV1ZWRGb3JSZW5kZXInKSB7XHJcbiAgICAgIG8uc3RhdGUgPSAncXVldWVkRm9yUmVuZGVyJztcclxuICAgICAgdGhpcy5yZW5kZXJRdWV1ZS5wdXNoKG8pO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVSZW5kZXJRdWV1ZSgpIHtcclxuICAgIGlmKHRoaXMuY2FudmFzKSB7XHJcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnA7XHJcbiAgICAgIGlmKCF0aGlzLnJlbmRlcmluZyAmJiAocC5yZW5kZXJXaGlsZUZsaXBwaW5nIHx8ICF0aGlzLmJvb2suaXNQcm9jZXNzaW5nKCkpKSB7XHJcbiAgICAgICAgbGV0IGFjdGl2ZSwgdG9wO1xyXG4gICAgICAgIGZvcihsZXQgbyBvZiB0aGlzLnJlbmRlclF1ZXVlKSB7XHJcbiAgICAgICAgICBpZighYWN0aXZlICYmIG8uaXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICBhY3RpdmUgPSBvO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoby5pc1RvcCgpKSB7XHJcbiAgICAgICAgICAgIHRvcCA9IG87XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlbmRlcmluZyA9IHRvcCB8fCBhY3RpdmU7XHJcbiAgICAgICAgaWYodGhpcy5pc01vYmlsZSgpICYmIHAucmVuZGVySW5hY3RpdmVQYWdlc09uTW9iaWxlIHx8ICF0aGlzLmlzTW9iaWxlKCkgJiYgcC5yZW5kZXJJbmFjdGl2ZVBhZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmluZyA9IHRoaXMucmVuZGVyaW5nIHx8IHRoaXMucmVuZGVyUXVldWVbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucmVuZGVyaW5nKSB7XHJcbiAgICAgICAgICBpZih0aGlzLnJlbmRlcmluZy53cmFwcGVyLnN0YXJ0UmVuZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRnJvbVJlbmRlclF1ZXVlKHRoaXMucmVuZGVyaW5nKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcuc3RhdGUgPSAncmVuZGVyaW5nJztcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcud3JhcHBlci5zZXRSZXNvbHV0aW9uKHRoaXMuY2FsY1Jlc29sdXRpb24odGhpcy5yZW5kZXJpbmcpKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmcud3JhcHBlci5zdGFydFJlbmRlcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnJlbmRlcmluZztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgc2V0VGltZW91dCh0aGlzLnVwZGF0ZVJlbmRlclF1ZXVlLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0dXJuT25FdmVudHMoKSB7XHJcbiAgICB0aGlzLnRyYW5zZmVyRXZlbnRzID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHR1cm5PZmZFdmVudHMoKSB7XHJcbiAgICBjb25zdCBtb3VzZXVwID0gJC5FdmVudCgnbW91c2V1cCcpLCBtb3VzZW91dCA9ICQuRXZlbnQoJ21vdXNlb3V0Jyk7XHJcbiAgICB0aGlzLnBhZ2VDYWNoZS5mb3JFYWNoKChlbnQpPT4ge1xyXG4gICAgICBjb25zdCBvYmplY3QgPSBlbnRbMV07XHJcbiAgICAgIGlmKG9iamVjdC5zaW11bGF0ZSkge1xyXG4gICAgICAgIG9iamVjdC5zaW11bGF0ZShtb3VzZXVwLCB1bmRlZmluZWQsIDAsIDApO1xyXG4gICAgICAgIG9iamVjdC5zaW11bGF0ZShtb3VzZW91dCwgdW5kZWZpbmVkLCAwLCAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRyYW5zZmVyRXZlbnRzID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cmFuc2ZlckV2ZW50VG9UZXh0dXJlKG4sIGUsIGRhdGEpIHtcclxuICAgIGlmKHRoaXMudHJhbnNmZXJFdmVudHMpIHtcclxuICAgICAgY29uc3QgdG9PYmplY3QgPSB0aGlzLmdldE9yTG9hZFRleHR1cmVPYmplY3QodW5kZWZpbmVkLCBuKTtcclxuICAgICAgaWYodG9PYmplY3Qud3JhcHBlcikge1xyXG4gICAgICAgIGNvbnN0IHt1dn0gPSBkYXRhLCB0b0RvYyA9IHRvT2JqZWN0LndyYXBwZXIuZ2V0U2ltdWxhdGVkRG9jKCk7XHJcbiAgICAgICAgdGhpcy5wYWdlQ2FjaGUuZm9yRWFjaCgoZW50KT0+IHtcclxuICAgICAgICAgIGNvbnN0IG9iamVjdCA9IGVudFsxXTtcclxuICAgICAgICAgIGlmKG9iamVjdC5zaW11bGF0ZSkge1xyXG4gICAgICAgICAgICBvYmplY3Quc2ltdWxhdGUoZSwgdG9Eb2MsIHV2LngsIHV2LnkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkUHJlZGljdGVkUGFnZXMoKSB7XHJcbiAgICB0aGlzLnByZWRpY3RlZFJlcXVlc3RzID0gQmFzZU1hdGhVdGlscy5wcmVkaWN0KHRoaXMucGFnZVJlcXVlc3RzLCB0aGlzLnAucHJlbG9hZFBhZ2VzKTtcclxuICAgIGZvcihsZXQgcCBvZiB0aGlzLnByZWRpY3RlZFJlcXVlc3RzKSB7XHJcbiAgICAgIGlmKHA8dGhpcy5ib29rLmdldFBhZ2VzKCkgJiYgIXRoaXMucGFnZUNhY2hlLmdldChwKSkge1xyXG4gICAgICAgIHRoaXMubG9hZCh1bmRlZmluZWQsIHApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRQYWdlUmVxdWVzdChuKSB7XHJcbiAgICB0aGlzLnBhZ2VSZXF1ZXN0cy5wdXNoKG4pO1xyXG4gICAgaWYodGhpcy5wYWdlUmVxdWVzdHMubGVuZ3RoPnRoaXMucC5wYWdlc0ZvclByZWRpY3RpbmcpIHtcclxuICAgICAgdGhpcy5wYWdlUmVxdWVzdHMuc2hpZnQoKTtcclxuICAgIH1cclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5sb2FkUHJlZGljdGVkUGFnZXMuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBzZXRNYXRlcmlhbChvLCBtYXRlcmlhbCkge1xyXG4gICAgdGhpcy5wYWdlQ2FjaGUuZm9yRWFjaCgoZSk9PiB7XHJcbiAgICAgIGNvbnN0IG9iID0gZVsxXTtcclxuICAgICAgaWYobyE9PW9iICYmIG9iLm1hdGVyaWFsPT09bWF0ZXJpYWwpIHtcclxuICAgICAgICBkZWxldGUgb2IubWF0ZXJpYWw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYobWF0ZXJpYWwgJiYgbWF0ZXJpYWwhPT1vLm1hdGVyaWFsKSB7XHJcbiAgICAgIG8ubWF0ZXJpYWwgPSBtYXRlcmlhbDtcclxuICAgICAgdGhpcy5zZXR1cE1hdGVyaWFsKG8pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0dXBNYXRlcmlhbChvKSB7XHJcbiAgICBvLm1hdGVyaWFsLm1hcCA9IG8udGV4dHVyZS5pbWFnZT8gby50ZXh0dXJlOiAodGhpcy5sb2FkaW5nQW5pbWF0aW9uPyB0aGlzLmxvYWRpbmdbby5jb2xvcl0udGV4dHVyZTogbnVsbCk7XHJcbiAgICBpZighby5tYXRlcmlhbC5tYXApIHtcclxuICAgICAgby5tYXRlcmlhbC5jb2xvciA9IG5ldyBUSFJFRS5Db2xvcihvLmNvbG9yKTtcclxuICAgIH1cclxuICAgIG8ubWF0ZXJpYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T3JMb2FkVGV4dHVyZU9iamVjdChtYXRlcmlhbCwgbikge1xyXG4gICAgbGV0IG9iamVjdCA9IHRoaXMucGFnZUNhY2hlLmdldChuKTtcclxuICAgIGlmKCFvYmplY3QpIHtcclxuICAgICAgb2JqZWN0ID0gdGhpcy5sb2FkKG1hdGVyaWFsLCBuKTtcclxuICAgICAgdGhpcy5hZGRQYWdlUmVxdWVzdChuKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNldE1hdGVyaWFsKG9iamVjdCwgbWF0ZXJpYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmplY3Q7XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0dXJlKG1hdGVyaWFsLCBuKSB7XHJcbiAgICBpZih+dGhpcy5wcmVkaWN0ZWRSZXF1ZXN0cy5pbmRleE9mKG4pKSB7XHJcbiAgICAgIHRoaXMuYWRkUGFnZVJlcXVlc3Qobik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldE9yTG9hZFRleHR1cmVPYmplY3QobWF0ZXJpYWwsIG4pO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1BhZ2VNYW5hZ2VyLmpzIiwiaW1wb3J0IEJvb2tQcm9wc0J1aWxkZXIgZnJvbSAnLi9Cb29rUHJvcHNCdWlsZGVyJztcclxuaW1wb3J0IFBkZiBmcm9tICdQZGYnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGRmQm9va1Byb3BzQnVpbGRlciBleHRlbmRzIEJvb2tQcm9wc0J1aWxkZXIge1xyXG5cclxuICBjb25zdHJ1Y3RvcihzcmMsIG9uUmVhZHkpIHtcclxuICAgIHN1cGVyKG9uUmVhZHkpO1xyXG4gICAgdGhpcy5wZGYgPSBuZXcgUGRmKHNyYyk7XHJcbiAgICB0aGlzLnBhZ2VEZXNjcmlwdGlvbiA9IHtcclxuICAgICAgdHlwZTogJ3BkZicsXHJcbiAgICAgIHNyYzogdGhpcy5wZGYsXHJcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgcGFnZUNhbGxiYWNrOiB0aGlzLnBhZ2VDYWxsYmFjay5iaW5kKHRoaXMpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5wZGYuZ2V0SGFuZGxlcih0aGlzLmluaXQuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5wZGYuZGlzcG9zZSgpO1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdChoYW5kbGVyKSB7XHJcbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGRmLmdldFBhZ2VzTnVtKCk7XHJcbiAgICB0aGlzLmNhbGNTaGVldHMocGFnZXMpO1xyXG4gICAgaWYocGFnZXM+MCkge1xyXG4gICAgICBoYW5kbGVyLmdldFBhZ2UoMSkuXHJcbiAgICAgIHRoZW4oKHBhZ2UpPT4ge1xyXG4gICAgICAgIGNvbnN0IHNpemUgPSBQZGYuZ2V0UGFnZVNpemUocGFnZSk7XHJcbiAgICAgICAgdGhpcy5jYWxjUHJvcHMoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xyXG4gICAgICAgIHRoaXMucmVhZHkoKTtcclxuICAgICAgfSkuXHJcbiAgICAgIGNhdGNoKChlKT0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnByb3BzID0gdGhpcy5kZWZhdWx0cztcclxuICAgICAgdGhpcy5yZWFkeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGFnZUNhbGxiYWNrKG4pIHtcclxuICAgIHJldHVybiB0aGlzLnBhZ2VEZXNjcmlwdGlvbjtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvUGRmQm9va1Byb3BzQnVpbGRlci5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBkZkxpbmtzSGFuZGxlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHBkZiwgY3RybCwgZWxlbWVudCkge1xyXG4gICAgdGhpcy5wZGYgPSBwZGY7XHJcbiAgICB0aGlzLmN0cmwgPSBjdHJsO1xyXG4gICAgdGhpcy5lbGVtZW50ID0gJChlbGVtZW50KTtcclxuICAgIHRoaXMuY3Vyc29ycyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRIYW5kbGVyKGhhbmRsZXIpIHtcclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBkZWZhdWx0SGFuZGxlcih0eXBlLCBkZXN0aW5hdGlvbikge1xyXG4gICAgaWYodHlwZT09PSdpbnRlcm5hbCcpIHtcclxuICAgICAgdGhpcy5jdHJsLmdvVG9QYWdlKGRlc3RpbmF0aW9uKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYodHlwZT09PSdleHRlcm5hbCcpIHtcclxuICAgICAgd2luZG93Lm9wZW4oZGVzdGluYXRpb24sICdfYmxhbmsnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGxIYW5kbGVycyh0eXBlLCBkZXN0aW5hdGlvbikge1xyXG4gICAgaWYoIXRoaXMuaGFuZGxlciB8fCAhdGhpcy5oYW5kbGVyKHR5cGUsIGRlc3RpbmF0aW9uKSkge1xyXG4gICAgICB0aGlzLmRlZmF1bHRIYW5kbGVyKHR5cGUsIGRlc3RpbmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUV2ZW50KGRhdGEpIHtcclxuICAgIGNvbnN0IGUgPSBkYXRhLmV2ZW50LCBhbm5vID0gZGF0YS5hbm5vdGF0aW9uO1xyXG4gICAgc3dpdGNoKGUudHlwZSkge1xyXG4gICAgICBjYXNlICdtb3VzZW92ZXInOiB7XHJcbiAgICAgICAgdGhpcy5jdXJzb3JzLnB1c2godGhpcy5lbGVtZW50LmNzcygnY3Vyc29yJykpO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5jc3MoJ2N1cnNvcicsICdwb2ludGVyJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgY2FzZSAnbW91c2VvdXQnOiB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50LmNzcygnY3Vyc29yJywgdGhpcy5jdXJzb3JzLnBvcCgpIHx8ICcnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICd0b3VjaHRhcCc6XHJcbiAgICAgIGNhc2UgJ2NsaWNrJzoge1xyXG4gICAgICAgIGlmKGFubm8udXJsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbGxIYW5kbGVycygnZXh0ZXJuYWwnLCBhbm5vLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoYW5uby5kZXN0KSB7XHJcbiAgICAgICAgICBsZXQgZGVzdFByb21pc2U7XHJcbiAgICAgICAgICBpZih0eXBlb2YgYW5uby5kZXN0PT09J3N0cmluZycpIHtcclxuICAgICAgICAgICAgZGVzdFByb21pc2UgPSB0aGlzLnBkZi5oYW5kbGVyLmdldERlc3RpbmF0aW9uKGFubm8uZGVzdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGVzdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoYW5uby5kZXN0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRlc3RQcm9taXNlLlxyXG4gICAgICAgICAgICB0aGVuKChkZXN0KT0+IHR5cGVvZiBkZXN0WzBdPT09J251bWJlcic/IGRlc3RbMF06IHRoaXMucGRmLmhhbmRsZXIuZ2V0UGFnZUluZGV4KGRlc3RbMF0pKS5cclxuICAgICAgICAgICAgdGhlbigobnVtYmVyKT0+IHRoaXMuY2FsbEhhbmRsZXJzKCdpbnRlcm5hbCcsIG51bWJlcikpLlxyXG4gICAgICAgICAgICBjYXRjaCgoKT0+IGNvbnNvbGUuZXJyb3IoJ0JhZCBsaW5rJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9QZGZMaW5rc0hhbmRsZXIuanMiLCJpbXBvcnQgRmluZGVyIGZyb20gJ0ZpbmRlcic7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2hFbmdpbmUge1xyXG4gIGNvbnN0cnVjdG9yKHBhZ2VDYWxsYmFjaywgcGFnZXMpIHtcclxuICAgIHRoaXMucGFnZUNhbGxiYWNrID0gcGFnZUNhbGxiYWNrO1xyXG4gICAgdGhpcy5wYWdlcyA9IHBhZ2VzO1xyXG4gICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgfVxyXG5cclxuICBzZXRRdWVyeShxdWVyeSkge1xyXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xyXG4gICAgdGhpcy51cGRhdGUgPSB0cnVlO1xyXG4gICAgdGhpcy5wcm9jZXNzKCk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzKCkge1xyXG4gICAgaWYodGhpcy51cGRhdGUpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucmVzdWx0cztcclxuICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgIGlmKHRoaXMub25QYWdlSGl0c0NoYW5nZWQpIHtcclxuICAgICAgICBmb3IobGV0IHJlcyBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUGFnZUhpdHNDaGFuZ2VkKHVuZGVmaW5lZCwgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBhZ2UgPSAwO1xyXG4gICAgICB0aGlzLnN0YW1wID0gRGF0ZS5ub3coKTtcclxuICAgICAgaWYodGhpcy5xdWVyeS5sZW5ndGg+MSkge1xyXG4gICAgICAgIHRoaXMucHJvY2VzcygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYodGhpcy5wYWdlPHRoaXMucGFnZXMpIHtcclxuICAgICAgICBjb25zdCBzdGFtcCA9IHRoaXMuc3RhbXA7XHJcbiAgICAgICAgdGhpcy5maW5kKHRoaXMucGFnZUNhbGxiYWNrKHRoaXMucGFnZSkpLlxyXG4gICAgICAgICAgdGhlbigoY29udGV4dHMpPT4ge1xyXG4gICAgICAgICAgICBpZihzdGFtcCA9PT0gdGhpcy5zdGFtcCkge1xyXG4gICAgICAgICAgICAgIGlmKGNvbnRleHRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRleHRzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKyt0aGlzLnBhZ2U7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy5vblBhZ2VIaXRzQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VIaXRzQ2hhbmdlZCh0aGlzLnBhZ2UsIHRoaXMucXVlcnkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbmQocGkpIHtcclxuICAgIGxldCBuZXh0O1xyXG4gICAgaWYocGkudHlwZT09PSdwZGYnKSB7XHJcbiAgICAgIG5leHQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PiB7XHJcbiAgICAgICAgcGkuc3JjLmdldEhhbmRsZXIoKCk9PiB7XHJcbiAgICAgICAgICBjb25zdCBuID0gcGkubnVtYmVyPT09dW5kZWZpbmVkPyB0aGlzLnBhZ2U6IHBpLm51bWJlcjtcclxuICAgICAgICAgIGlmKHBpLnNyYy5nZXRQYWdlVHlwZShuKT09PSdyaWdodCcpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShbXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcGkuc3JjLmdldFBhZ2UobikuXHJcbiAgICAgICAgICAgIHRoZW4oKHBhZ2UpPT4ge1xyXG4gICAgICAgICAgICAgIHBhZ2UuZ2V0VGV4dENvbnRlbnQoKS5cclxuICAgICAgICAgICAgICB0aGVuKCh0ZXh0Q29udGVudCk9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBGaW5kZXIodGV4dENvbnRlbnQuaXRlbXMubWFwKChpdGVtKT0+IGl0ZW0uc3RyKSwgdGhpcy5xdWVyeSwge2hpdHM6IGZhbHNlfSkuZ2V0Q29udGV4dHMoKSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pLlxyXG4gICAgICAgICAgICBjYXRjaCgoKT0+IHJlc29sdmUoW10pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbmV4dCA9IFByb21pc2UucmVzb2x2ZShbXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvU2VhcmNoRW5naW5lLmpzIiwiaW1wb3J0IENTU0xheWVyIGZyb20gJ0NTU0xheWVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoZWV0Q3NzTGF5ZXIge1xyXG4gIGNvbnN0cnVjdG9yKHZpc3VhbCwgYmxvY2ssIHByb3BzKSB7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbDtcclxuICAgIGNvbnN0IHNpemUgPSBibG9jay5nZXRUb3BTaXplKCk7XHJcbiAgICB0aGlzLmxheWVyID0gbmV3IENTU0xheWVyKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBwcm9wcyk7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoYmxvY2spO1xyXG4gICAgdGhpcy52aXN1YWwuYWRkQ3NzT2JqZWN0KHRoaXMubGF5ZXIpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMubGF5ZXIuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy52aXN1YWwucmVtb3ZlQ3NzT2JqZWN0KHRoaXMubGF5ZXIpO1xyXG4gIH1cclxuXHJcbiAgaXNIaWRkZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllci5pc0hpZGRlbigpO1xyXG4gIH1cclxuXHJcbiAgaGlkZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxheWVyLmhpZGUoKTtcclxuICB9XHJcblxyXG4gIHNob3coKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXllci5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBzZXQoY3NzLCBodG1sLCBqcykge1xyXG4gICAgdGhpcy5sYXllci5zZXREYXRhKGNzcywgaHRtbCwganMpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKGJsb2NrKSB7XHJcbiAgICB0aGlzLmJsb2NrID0gYmxvY2s7XHJcbiAgICB0aGlzLmJsb2NrLmdldFRvcFdvcmxkUm90YXRpb24odGhpcy5sYXllci5yb3RhdGlvbik7XHJcbiAgICB0aGlzLmJsb2NrLmdldFRvcFdvcmxkUG9zaXRpb24odGhpcy5sYXllci5wb3NpdGlvbik7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL2pzL2NsYXNzZXMvU2hlZXRDc3NMYXllci5qcyIsImltcG9ydCBNYXRoVXRpbHMgZnJvbSAnTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoZWV0UGh5c2ljcyB7XHJcblxyXG4gIHN0YXRpYyB0YXJnZXRGb3JjZUNsYihvLGEsdixjaCkge1xyXG4gICAgY29uc3QgbCA9IGEqdGhpcy5yO1xyXG4gICAgcmV0dXJuIDEwMCp0aGlzLm0qdGhpcy5nKigyLygxK01hdGguZXhwKDEwKihsLXRoaXMudGwpKSktMSktdGhpcy5tKjQwKnY7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaG92ZXJDb3JuZXJGb3JjZUNsYihvLHYsbCxjaCkge1xyXG4gICAgcmV0dXJuIDU7XHJcbiAgfVxyXG5cclxuICBnZXRUYXJnZXRGb3JjZUNsYihtYXNzLCB0YXJnZXRBbmdsZSkge1xyXG4gICAgcmV0dXJuIFNoZWV0UGh5c2ljcy50YXJnZXRGb3JjZUNsYi5iaW5kKHtcclxuICAgICAgZzogdGhpcy5wLmdyYXZpdHksXHJcbiAgICAgIG06IG1hc3MsXHJcbiAgICAgIHRsOiB0YXJnZXRBbmdsZSp0aGlzLnAucixcclxuICAgICAgcjogdGhpcy5wLnJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRyYWdGb3JjZUNsYihvLGEsdixjaCkge1xyXG4gICAgcmV0dXJuIG8uZmxidCpvLm0qKDEwKm8uZypjaC01MCp2LygxK01hdGguZXhwKDMuNSpNYXRoLmFicyhjaCkpKSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZHJhZ0Nvcm5lckZvcmNlQ2xiKG8sYSx2LGNoKSB7XHJcbiAgICByZXR1cm4gMTUqKDIvKDErTWF0aC5leHAoMTAqKGEtdGhpcy50YSkqby5yKSktMSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZ2V0RHJhZ0Nvcm5lckZvcmNlQ2xiKHRhcmdldEFuZ2xlKSB7XHJcbiAgICByZXR1cm4gU2hlZXRQaHlzaWNzLmRyYWdDb3JuZXJGb3JjZUNsYi5iaW5kKHtcclxuICAgICAgdGE6IHRhcmdldEFuZ2xlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHI9MSwgZ3Jhdml0eT0xLCBjb3JuZXJEZXZpYXRpb249MC4xNSwgZnBzPTI0MCkge1xyXG4gICAgdGhpcy5wID0ge1xyXG4gICAgICByLFxyXG4gICAgICBjb3JuZXJEZXZpYXRpb24sXHJcbiAgICAgIGw6IE1hdGguUEkqcixcclxuICAgICAgc3RhcnREdDogMS9mcHMsXHJcbiAgICAgIGdyYXZpdHksXHJcbiAgICAgIG1hcmdpbjogMC4wMDIqcixcclxuICAgICAgaW5mTTogMWU0LFxyXG4gICAgICBhdHRlbXB0czogMTYsXHJcbiAgICAgIG1heEl0ZXJhdGlvbnM6IDEwMFxyXG4gICAgfTtcclxuICAgIHRoaXMub3MgPSBbXTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLm9zID0gW107XHJcbiAgfVxyXG5cclxuICBnZXRTaXplKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3MubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgYWRkT2JqZWN0KG1hc3MsIGFuZ2xlLCB2ZWxvY2l0eSwgZmxleGliaWxpdHksIGNvcm5lckhlaWdodCwgc2ltdWxhdGVDbGIsIHJlbW92ZUNsYiwgZm9yY2VDbGI9KCk9PiAwLCBjb3JuZXJGb3JjZUNsYj0oKT0+IDApIHtcclxuICAgIGNvbnN0IG5vID0ge1xyXG4gICAgICBpZDogTWF0aFV0aWxzLmdldFVuaXF1ZSgpLFxyXG4gICAgICBtOiBtYXNzLFxyXG4gICAgICB2OiB2ZWxvY2l0eSxcclxuICAgICAgbDogYW5nbGUqdGhpcy5wLnIsXHJcbiAgICAgIGY6IGZvcmNlQ2xiLFxyXG4gICAgICBjZjogY29ybmVyRm9yY2VDbGIsXHJcbiAgICAgIGNoOiBjb3JuZXJIZWlnaHQsXHJcbiAgICAgIGZsYnQ6IGZsZXhpYmlsaXR5LFxyXG4gICAgICBzaW11bGF0ZUNsYixcclxuICAgICAgcmVtb3ZlQ2xiXHJcbiAgICB9O1xyXG4gICAgbGV0IGkgPSB0aGlzLm9zLmZpbmRJbmRleCgobyk9PiBuby5sPD1vLmwpO1xyXG4gICAgaSA9IH5pPyBpOiB0aGlzLm9zLmxlbmd0aDtcclxuICAgIHRoaXMub3Muc3BsaWNlKGksIDAsIG5vKTtcclxuICAgIHJldHVybiBuby5pZDtcclxuICB9XHJcblxyXG4gIGdldFBhcmFtZXRyTWFwKG5hbWUpIHtcclxuICAgIGNvbnN0IG1hcCA9IHtcclxuICAgICAgbWFzczogJ20nLFxyXG4gICAgICB2ZWxvY2l0eTogJ3YnLFxyXG4gICAgICBmbGV4aWJpbGl0eTogJ2ZsYnQnLFxyXG4gICAgICBjb3JuZXJIZWlnaHQ6ICdjaCcsXHJcbiAgICAgIHNpbXVsYXRlQ2xiOiAnc2ltdWxhdGVDbGInLFxyXG4gICAgICByZW1vdmVDbGI6ICdyZW1vdmVDbGInLFxyXG4gICAgICBmb3JjZUNsYjogJ2YnLFxyXG4gICAgICBjb3JuZXJGb3JjZUNsYjogJ2NmJ1xyXG4gICAgfTtcclxuICAgIHJldHVybiBtYXBbbmFtZV07XHJcbiAgfVxyXG5cclxuICBzZXRQYXJhbWV0cihpZCwgbmFtZSwgdmFsdWUpIHtcclxuICAgIGNvbnN0IG8gPSB0aGlzLm9zLmZpbmQoKG8pPT4gby5pZD09PWlkKTtcclxuICAgIGlmKG5hbWUgPT09ICdhbmdsZScpIHtcclxuICAgICAgby5sID0gdmFsdWUqdGhpcy5wLnI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgb1t0aGlzLmdldFBhcmFtZXRyTWFwKG5hbWUpXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UGFyYW1ldHIoaWQsIG5hbWUpIHtcclxuICAgIGNvbnN0IG8gPSB0aGlzLm9zLmZpbmQoKG8pPT4gby5pZD09PWlkKTtcclxuICAgIGxldCB2YWx1ZTtcclxuICAgIGlmKG5hbWUgPT09ICdhbmdsZScpIHtcclxuICAgICAgdmFsdWUgPSBvLmwvdGhpcy5wLnI7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFsdWUgPSBvW3RoaXMuZ2V0UGFyYW1ldHJNYXAobmFtZSldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2ltdWxhdGUoVCkge1xyXG4gICAgbGV0IHQ9MCxcclxuICAgICAgICBkdD10aGlzLnAuc3RhcnREdCxcclxuICAgICAgICBhdHRlbXB0PTAsXHJcbiAgICAgICAgaXQ9MDtcclxuXHJcbiAgICB3aGlsZSh0PFQgJiYgaXQ8dGhpcy5wLm1heEl0ZXJhdGlvbnMpIHtcclxuICAgICAgaWYoZHQ+VC10KSB7XHJcbiAgICAgICAgZHQgPSBULXQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgbm9zID0gdGhpcy5pbnRlZ3JhdGUodGhpcy5vcywgZHQpLFxyXG4gICAgICAgICAgICBjaSA9IHRoaXMuZmluZENvbGxpc2lvbnMobm9zKTtcclxuICAgICAgaWYoY2kubnVtPjEgJiYgYXR0ZW1wdDx0aGlzLnAuYXR0ZW1wdHMpIHtcclxuICAgICAgICBkdC89MjtcclxuICAgICAgICArK2F0dGVtcHQ7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgaWYoY2kubnVtPT09MSkge1xyXG4gICAgICAgICAgY29uc3Qgc2NvcyA9IHRoaXMuc29sdmVDb2xsaXNpb24obm9zW2NpLmxhc3QtMV0sIG5vc1tjaS5sYXN0XSk7XHJcbiAgICAgICAgICBub3NbY2kubGFzdC0xXSA9IHNjb3NbMF07XHJcbiAgICAgICAgICBub3NbY2kubGFzdF0gPSBzY29zWzFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGNpLm51bT4xKSB7XHJcbiAgICAgICAgICBjb25zdCBncyA9IFtdO1xyXG4gICAgICAgICAgbGV0IGxhc3QgPSAtMjtcclxuICAgICAgICAgIGZvcihsZXQgaSBvZiBjaS5hbGwpIHtcclxuICAgICAgICAgICAgaWYoaS1sYXN0PjEpIHtcclxuICAgICAgICAgICAgICBncy5wdXNoKFtdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBnc1tncy5sZW5ndGgtMV0ucHVzaChpKTtcclxuICAgICAgICAgICAgbGFzdCA9IGk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb3IobGV0IGcgb2YgZ3MpIHtcclxuICAgICAgICAgICAgbGV0IHNnLCBpMDtcclxuICAgICAgICAgICAgaWYobm9zW2dbMF1dLmw+TWF0aC5QSS8yKnRoaXMucC5yKSB7XHJcbiAgICAgICAgICAgICAgc2cgPSAtMTtcclxuICAgICAgICAgICAgICBpMCA9IGdbZy5sZW5ndGgtMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2cgPSAxO1xyXG4gICAgICAgICAgICAgIGkwID0gZ1swXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IobGV0IGk9aTA7IGk8bm9zLmxlbmd0aCAmJiBpPi0xOyBpKz1zZykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG8gPSBub3NbaStzZ107XHJcbiAgICAgICAgICAgICAgaWYobyAmJiBzZyooby5sLW5vc1tpXS5sKTw9dGhpcy5wLm1hcmdpbikge1xyXG4gICAgICAgICAgICAgICAgby5sPW5vc1tpXS5sK3NnKjIqdGhpcy5wLm1hcmdpbjtcclxuICAgICAgICAgICAgICAgIGlmKG8ubD50aGlzLnAubCB8fCBvLmw8MCkge1xyXG4gICAgICAgICAgICAgICAgICBvLmwgPSBvLmw+dGhpcy5wLmw/IHRoaXMucC5sOiAwO1xyXG4gICAgICAgICAgICAgICAgICBvLmNoID0gMDtcclxuICAgICAgICAgICAgICAgICAgby52PTA7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0JhZCBjb2xsaXNpb24nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcyA9IG5vcztcclxuICAgICAgICB0aGlzLmZpbmRBbmRTb2x2ZUNvcm5lckNvbGxpc2lvbnMoKTtcclxuICAgICAgICB0Kz1kdDtcclxuICAgICAgICBkdD10aGlzLnAuc3RhcnREdDtcclxuICAgICAgICBhdHRlbXB0PTA7XHJcbiAgICAgIH1cclxuICAgICAgKytpdDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZVN0YXRpY3MoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVN0YXRpY3MoKSB7XHJcbiAgICBjb25zdCBub3MgPSBbXSwgbm90aWZ5ID0gW1tdLFtdXTtcclxuICAgIGZvcihsZXQgbyBvZiB0aGlzLm9zKSB7XHJcbiAgICAgIGlmKG8uc2ltdWxhdGVDbGIpIHtcclxuICAgICAgICBvLnNpbXVsYXRlQ2xiKG8ubC90aGlzLnAuciwgby5jaCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYoKG8ubD09PXRoaXMucC5sIHx8IG8ubD09PTApICYmIG8udj09PTApIHtcclxuICAgICAgICBpZihvLnJlbW92ZUNsYiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBub3RpZnlbKG8ubCE9PXRoaXMucC5sKSswXS5wdXNoKG8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBub3MucHVzaChvKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vcyA9IG5vcztcclxuICAgIGZvcihsZXQgbyBvZiBub3RpZnlbMF0ucmV2ZXJzZSgpKSB7XHJcbiAgICAgIG8ucmVtb3ZlQ2xiKE1hdGguUEksIG8uY2gpO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBvIG9mIG5vdGlmeVsxXSkge1xyXG4gICAgICBvLnJlbW92ZUNsYigwLCBvLmNoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbmRBbmRTb2x2ZUNvcm5lckNvbGxpc2lvbnMoKSB7XHJcbiAgICBpZih0aGlzLm9zLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBvcyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAuLi50aGlzLm9zWzBdLFxyXG4gICAgICAgICAgbDogMCxcclxuICAgICAgICAgIG06IHRoaXMucC5pbmZNLFxyXG4gICAgICAgICAgY2g6IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIC4uLnRoaXMub3MsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgLi4udGhpcy5vc1swXSxcclxuICAgICAgICAgIGw6IDEuMDUqdGhpcy5wLmwsXHJcbiAgICAgICAgICBtOiB0aGlzLnAuaW5mTSxcclxuICAgICAgICAgIGNoOiAwXHJcbiAgICAgICAgfVxyXG4gICAgICBdO1xyXG5cclxuICAgICAgZm9yKGxldCBpPTE7IGk8b3MubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICBjb25zdCBhPW9zW2ktMV0sIGI9b3NbaV0sXHJcbiAgICAgICAgICAgICAgYWw9YS5sK3RoaXMucC5jb3JuZXJEZXZpYXRpb24qYS5jaCp0aGlzLnAucixcclxuICAgICAgICAgICAgICBibD1iLmwrdGhpcy5wLmNvcm5lckRldmlhdGlvbipiLmNoKnRoaXMucC5yO1xyXG4gICAgICAgIGlmKDEuMDUqYWw+YmwgJiYgYS5jaD5iLmNoKSB7XHJcbiAgICAgICAgICBjb25zdCBkQ2ggPSBhLmNoLWIuY2gsIGR2PWEubS9hLmZsYnQrYi5tL2IuZmxidCwga2E9YS5tL2EuZmxidC9kdiwga2I9Yi5tL2IuZmxidC9kdjtcclxuICAgICAgICAgIGEuY2g9YS5jaC1rYipkQ2g7XHJcbiAgICAgICAgICBiLmNoPWIuY2gra2EqZENoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc29sdmVDb2xsaXNpb24oYSwgYikge1xyXG4gICAgY29uc3QgbW09KGIubSthLm0pLFxyXG4gICAgICBhdiA9ICgtYS52KmIubSthLm0qYS52KzIqYi5tKmIudikvbW0sXHJcbiAgICAgIGJ2ID0gKGIubSpiLnYtYi52KmEubSsyKmEubSphLnYpL21tO1xyXG4gICAgcmV0dXJuIFt7Li4uYSwgdjogYXZ9LCB7Li4uYiwgdjogYnZ9XTtcclxuICB9XHJcblxyXG4gIGZpbmRDb2xsaXNpb25zKG9zKSB7XHJcbiAgICBjb25zdCBjaSA9IHtcclxuICAgICAgbnVtOiAwLFxyXG4gICAgICBsYXN0OiAwLFxyXG4gICAgICBhbGw6IFtdXHJcbiAgICB9O1xyXG4gICAgZm9yKGxldCBpID0gMTsgaTxvcy5sZW5ndGggJiYgY2kubnVtPDI7ICsraSkge1xyXG4gICAgICBpZihvc1tpLTFdLmw+b3NbaV0ubCB8fCB0aGlzLmlzQ29sbGlzaW9uKG9zW2ktMV0sIG9zW2ldKSkge1xyXG4gICAgICAgIGlmKG9zW2ktMV0ubD5vc1tpXS5sKSB7XHJcbiAgICAgICAgICArK2NpLm51bTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKytjaS5udW07XHJcbiAgICAgICAgY2kubGFzdCA9IGk7XHJcbiAgICAgICAgaWYoY2kuYWxsLmluZGV4T2YoaS0xKT09PS0xKSB7XHJcbiAgICAgICAgICBjaS5hbGwucHVzaChpLTEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjaS5hbGwuaW5kZXhPZihpKT09PS0xKSB7XHJcbiAgICAgICAgICBjaS5hbGwucHVzaChpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjaTtcclxuICB9XHJcblxyXG4gIGlzQ29sbGlzaW9uKGEsIGIpIHtcclxuICAgIHJldHVybiBNYXRoLmFicyhhLmwtYi5sKTx0aGlzLnAubWFyZ2luICYmIGEudj5iLnY7XHJcbiAgfVxyXG5cclxuICBpbnRlZ3JhdGUob3MsIGR0KSB7XHJcbiAgICBjb25zdCBub3MgPSBbXTtcclxuICAgIGZvcihsZXQgbyBvZiBvcykge1xyXG4gICAgICBjb25zdCB2bCA9IE1hdGhVdGlscy5yazQoXHJcbiAgICAgICAgdGhpcy5keS5iaW5kKHtcclxuICAgICAgICAgIGc6IHRoaXMucC5ncmF2aXR5LFxyXG4gICAgICAgICAgcjogdGhpcy5wLnIsXHJcbiAgICAgICAgICBtOiBvLm0sXHJcbiAgICAgICAgICBmOiBvLmYsXHJcbiAgICAgICAgICBjZjogby5jZixcclxuICAgICAgICAgIGNoOiBvLmNoLFxyXG4gICAgICAgICAgZmxidDogby5mbGJ0XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgMCxcclxuICAgICAgICBkdCxcclxuICAgICAgICBbby52LCBvLmwsIG8uY2hdXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG5vID0ge1xyXG4gICAgICAgIC4uLm8sXHJcbiAgICAgICAgdjogdmxbMF0sXHJcbiAgICAgICAgbDogdmxbMV0sXHJcbiAgICAgICAgY2g6IHZsWzJdXHJcbiAgICAgIH07XHJcbiAgICAgIGlmKG5vLmw8PTAgfHwgbm8ubD49dGhpcy5wLmwpIHtcclxuICAgICAgICBuby5sPW5vLmw8PTA/IDA6IHRoaXMucC5sO1xyXG4gICAgICAgIG5vLnY9MDtcclxuICAgICAgICBuby5jaD0wO1xyXG4gICAgICB9XHJcbiAgICAgIG5vcy5wdXNoKG5vKTtcclxuICAgIH1cclxuICAgIHJldHVybiBub3M7XHJcbiAgfVxyXG5cclxuICBkeSh0LHkpIHtcclxuICAgIGNvbnN0IHY9eVswXSwgbD15WzFdLCBjaD15WzJdLCBmPXRoaXMuZih0aGlzLGwvdGhpcy5yLHYsY2gpLCBjZj10aGlzLmNmKHRoaXMsbC90aGlzLnIsdixjaCk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICAoLXRoaXMuZypNYXRoLmNvcyhsL3RoaXMucikqdGhpcy5tK2YpL3RoaXMubSxcclxuICAgICAgdiswLjAxKihNYXRoLnJhbmRvbSgpLTAuNSksXHJcbiAgICAgIHRoaXMuZmxidCooKDIvKDErTWF0aC5leHAoLTAuMipjZikpLTEpKigxLTIvKDErTWF0aC5leHAoLTUqKE1hdGguYWJzKGNoKS0yKSkpKS1jaClcclxuICAgIF07XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1NoZWV0UGh5c2ljcy5qcyIsIlxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU291bmRzRW52aXJvbWVudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlPXt9KSB7XHJcbiAgICB0aGlzLnNvdW5kcyA9IHRlbXBsYXRlLnNvdW5kcyB8fCB7fTtcclxuICAgIHRoaXMuYXVkaW8gPSB7fTtcclxuICAgIGlmKHRoaXMuc291bmRzLnN0YXJ0RmxpcCkge1xyXG4gICAgICB0aGlzLmF1ZGlvLnN0YXJ0RmxpcCA9IG5ldyBBdWRpbyh0aGlzLnNvdW5kcy5zdGFydEZsaXApO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5zb3VuZHMuZW5kRmxpcCkge1xyXG4gICAgICB0aGlzLmF1ZGlvLmVuZEZsaXAgPSBuZXcgQXVkaW8odGhpcy5zb3VuZHMuZW5kRmxpcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRFbmFibGVkKGVuYWJsZWQpIHtcclxuICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICB0b2dsZSgpIHtcclxuICAgIHRoaXMuZW5hYmxlZCA9ICF0aGlzLmVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgZGVsZXRlIHRoaXMuYXVkaW8uc3RhcnRGbGlwO1xyXG4gICAgZGVsZXRlIHRoaXMuYXVkaW8uZW5kRmxpcDtcclxuICB9XHJcblxyXG4gIHN0YXJ0RmxpcCgpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCAmJiB0aGlzLmF1ZGlvLnN0YXJ0RmxpcCkge1xyXG4gICAgICB0aGlzLmF1ZGlvLnN0YXJ0RmxpcC5wbGF5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmRGbGlwKCkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkICYmIHRoaXMuYXVkaW8uc3RhcnRGbGlwKSB7XHJcbiAgICAgIHRoaXMuYXVkaW8uc3RhcnRGbGlwLnBhdXNlKCk7XHJcbiAgICAgIHRoaXMuYXVkaW8uc3RhcnRGbGlwLmN1cnJlbnRUaW1lID0gMDtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZW5hYmxlZCAmJiB0aGlzLmF1ZGlvLmVuZEZsaXApIHtcclxuICAgICAgdGhpcy5hdWRpby5lbmRGbGlwLnBsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN1YnNjcmliZUZsaXBzKGVtaXR0ZXIpIHtcclxuICAgIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lcignc3RhcnRGbGlwJywgdGhpcy5zdGFydEZsaXAuYmluZCh0aGlzKSk7XHJcbiAgICBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZEZsaXAnLCB0aGlzLmVuZEZsaXAuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9jbGFzc2VzL1NvdW5kc0Vudmlyb21lbnQuanMiLCJpbXBvcnQgV2lkZ2V0Q29udHJvbGxlciBmcm9tICdXaWRnZXRDb250cm9sbGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvY0NvbnRyb2xsZXIgZXh0ZW5kcyBXaWRnZXRDb250cm9sbGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IodmlldywgYm9va0N0cmwpIHtcclxuICAgIHN1cGVyKHZpZXcpO1xyXG4gICAgdGhpcy5ib29rQ3RybCA9IGJvb2tDdHJsO1xyXG4gICAgdGhpcy50YWIgPSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBzZXRUaHVtYm5haWxzKHRodW1ibmFpbHMpIHtcclxuICAgIHRoaXMudGh1bWJuYWlscyA9IHRodW1ibmFpbHM7XHJcbiAgICB0aHVtYm5haWxzLm9uTmF2aWdhdGUgPSB0aGlzLm5hdmlnYXRlVGh1bWJuYWlscy5iaW5kKHRoaXMpO1xyXG4gICAgaWYodGhpcy50YWIgPT09ICdub25lJykge1xyXG4gICAgICB0aGlzLnRhYiA9ICd0aHVtYm5haWxzJztcclxuICAgIH1cclxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0U2VhcmNoKHNlYXJjaCkge1xyXG4gICAgdGhpcy5zZWFyY2ggPSBzZWFyY2g7XHJcbiAgICBzZWFyY2gub25OYXZpZ2F0ZSA9IHRoaXMubmF2aWdhdGVTZWFyY2guYmluZCh0aGlzKTtcclxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Qm9va21hcmtzKGJvb2ttYXJrcywgcGRmKSB7XHJcbiAgICB0aGlzLmJvb2ttYXJrcyA9IGJvb2ttYXJrcztcclxuICAgIHRoaXMucGRmID0gcGRmO1xyXG4gICAgYm9va21hcmtzLm9uTmF2aWdhdGUgPSB0aGlzLm5hdmlnYXRlQm9va21hcmtzLmJpbmQodGhpcyk7XHJcbiAgICBpZihib29rbWFya3MuZ2V0U2l6ZSgpKSB7XHJcbiAgICAgIHRoaXMudGFiID0gJ2Jvb2ttYXJrcyc7XHJcbiAgICAgIHRoaXMuaXNCb29rbWFya3MgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBjbWRCb29rbWFya3MoKSB7XHJcbiAgICB0aGlzLnRhYiA9ICdib29rbWFya3MnO1xyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBjbWRUaHVtYm5haWxzKCkge1xyXG4gICAgdGhpcy50YWIgPSAndGh1bWJuYWlscyc7XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGNtZFNlYXJjaCgpIHtcclxuICAgIHRoaXMudGFiID0gJ3NlYXJjaCc7XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGNtZENsb3NlVG9jKCkge1xyXG4gICAgdGhpcy5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRodW1ibmFpbHMobnVtYmVyKSB7XHJcbiAgICB0aGlzLmJvb2tDdHJsLmdvVG9QYWdlKG51bWJlcik7XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVNlYXJjaChudW1iZXIpIHtcclxuICAgIHRoaXMuYm9va0N0cmwuZ29Ub1BhZ2UobnVtYmVyKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlQm9va21hcmtzKGl0ZW0pIHtcclxuICAgIGlmKGl0ZW0udXJsKSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGl0ZW0udXJsLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmKGl0ZW0uZGVzdCkge1xyXG4gICAgICBsZXQgZGVzdFByb21pc2U7XHJcbiAgICAgIGlmKHR5cGVvZiBpdGVtLmRlc3Q9PT0nc3RyaW5nJykge1xyXG4gICAgICAgIGRlc3RQcm9taXNlID0gdGhpcy5wZGYuaGFuZGxlci5nZXREZXN0aW5hdGlvbihpdGVtLmRlc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRlc3RQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGl0ZW0uZGVzdCk7XHJcbiAgICAgIH1cclxuICAgICAgZGVzdFByb21pc2UuXHJcbiAgICAgICAgdGhlbigoZGVzdCk9PiB0aGlzLnBkZi5oYW5kbGVyLmdldFBhZ2VJbmRleChkZXN0WzBdKSkuXHJcbiAgICAgICAgdGhlbigobnVtYmVyKT0+IHRoaXMuYm9va0N0cmwuZ29Ub1BhZ2UobnVtYmVyKSkuXHJcbiAgICAgICAgY2F0Y2goKCk9PiBjb25zb2xlLmVycm9yKCdCYWQgYm9va21hcmsnKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWaWV3KCkge1xyXG4gICAgaWYodGhpcy52aWV3KSB7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnd2lkVG9jTWVudScsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZFRodW1ibmFpbHMnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRoaXMudGFiPT09J3RodW1ibmFpbHMnLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnd2lkU2VhcmNoJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLnRhYj09PSdzZWFyY2gnLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnd2lkQm9va21hcmtzJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLnRhYj09PSdib29rbWFya3MnLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnY21kQm9va21hcmtzJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogdGhpcy50YWI9PT0nYm9va21hcmtzJ1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCdjbWRDbG9zZVRvYycsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ2NtZFRodW1ibmFpbHMnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLnRhYj09PSd0aHVtYm5haWxzJ1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCdjbWRTZWFyY2gnLCB7XHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiB0aGlzLnRhYj09PSdzZWFyY2gnXHJcbiAgICAgIH0pO1xyXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4gdGhpcy50aHVtYm5haWxzLnNldEVuYWJsZSh0aGlzLnZpc2libGUgJiYgdGhpcy50YWI9PT0ndGh1bWJuYWlscycpKTtcclxuICAgICAgc3VwZXIudXBkYXRlVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vanMvY2xhc3Nlcy9Ub2NDb250cm9sbGVyLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBUaHJlZVV0aWxzIGZyb20gJ1RocmVlVXRpbHMnO1xyXG5cclxuY29uc3QgcmVzWCA9IDExLFxyXG4gICAgICByZXNZID0gMixcclxuICAgICAgcmVzWiA9IDE1LFxyXG4gICAgICBzY2FsZSA9IDEsXHJcbiAgICAgIGZhY2VzID0gW107XHJcblxyXG5jb25zdCBmcm9udEdlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoc2NhbGUsIHNjYWxlLCByZXNYLTEsIHJlc1ktMSk7XHJcbmZyb250R2VvbWV0cnkudHJhbnNsYXRlKDAuNSpzY2FsZSwwLjUqc2NhbGUsc2NhbGUpO1xyXG5jb25zdCBiYWNrR2VvbWV0cnkgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeShzY2FsZSwgc2NhbGUsIHJlc1gtMSwgcmVzWS0xKTtcclxuYmFja0dlb21ldHJ5LnJvdGF0ZVkoTWF0aC5QSSk7XHJcbmJhY2tHZW9tZXRyeS50cmFuc2xhdGUoMC41KnNjYWxlLDAuNSpzY2FsZSwwKTtcclxuY29uc3QgbGVmdEdlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoc2NhbGUsIHNjYWxlLCByZXNaLTEsIHJlc1ktMSk7XHJcbmxlZnRHZW9tZXRyeS5yb3RhdGVZKC1NYXRoLlBJLzIpO1xyXG5sZWZ0R2VvbWV0cnkudHJhbnNsYXRlKDAsMC41KnNjYWxlLDAuNSpzY2FsZSk7XHJcbmNvbnN0IHJpZ2h0R2VvbWV0cnkgPSBuZXcgVEhSRUUuUGxhbmVHZW9tZXRyeShzY2FsZSwgc2NhbGUsIHJlc1otMSwgcmVzWS0xKTtcclxucmlnaHRHZW9tZXRyeS5yb3RhdGVZKE1hdGguUEkvMik7XHJcbnJpZ2h0R2VvbWV0cnkudHJhbnNsYXRlKHNjYWxlLDAuNSpzY2FsZSwwLjUqc2NhbGUpO1xyXG5jb25zdCB0b3BHZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KHNjYWxlLCBzY2FsZSwgcmVzWC0xLCByZXNaLTEpO1xyXG50b3BHZW9tZXRyeS5yb3RhdGVYKC1NYXRoLlBJLzIpO1xyXG50b3BHZW9tZXRyeS50cmFuc2xhdGUoMC41KnNjYWxlLHNjYWxlLDAuNSpzY2FsZSk7XHJcbmNvbnN0IGJvdHRvbUdlb21ldHJ5ID0gdG9wR2VvbWV0cnkuY2xvbmUoKTtcclxuYm90dG9tR2VvbWV0cnkudHJhbnNsYXRlKDAsLXNjYWxlLDApO1xyXG5mb3IobGV0IGYgb2YgYm90dG9tR2VvbWV0cnkuZmFjZXMpIHtcclxuICBbZi5hLCBmLmJdID0gW2YuYiwgZi5hXTtcclxufVxyXG5cclxuY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuR2VvbWV0cnkoKTtcclxuZ2VvbWV0cnkudmVydGljZXMgPSBbLi4uYm90dG9tR2VvbWV0cnkudmVydGljZXMsIC4uLnRvcEdlb21ldHJ5LnZlcnRpY2VzXTtcclxuXHJcbmNvbnN0IGFkZEZhY2VzID0gKGZzLCBtYXApPT4ge1xyXG4gIGZvcihsZXQgZiBvZiBmcykge1xyXG4gICAgZ2VvbWV0cnkuZmFjZXMucHVzaChuZXcgVEhSRUUuRmFjZTMobWFwKGYuYSksIG1hcChmLmIpLCBtYXAoZi5jKSkpO1xyXG4gIH1cclxuICBmYWNlcy5wdXNoKGdlb21ldHJ5LmZhY2VzLmxlbmd0aCk7XHJcbn07XHJcblxyXG5jb25zdCBtYXBWZXJ0aWNlcyA9IChzcmMsIGRzdCk9PiB7XHJcbiAgY29uc3QgbWFwID0gW107XHJcbiAgY29uc3QgZXEgPSAoYSwgYik9PiBNYXRoLmFicyhhLngtYi54KStNYXRoLmFicyhhLnktYi55KStNYXRoLmFicyhhLnotYi56KTwxZS00O1xyXG4gIGZvcihsZXQgaT0wOyBpPHNyYy5sZW5ndGg7ICsraSkge1xyXG4gICAgZm9yKGxldCBqPTA7IGo8ZHN0Lmxlbmd0aDsgKytqKSB7XHJcbiAgICAgIGlmKGVxKHNyY1tpXSwgZHN0W2pdKSkge1xyXG4gICAgICAgIG1hcFtpXT1qO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBtYXA7XHJcbn07XHJcblxyXG5jb25zdCBmcm9udE1hcCA9IG1hcFZlcnRpY2VzKGZyb250R2VvbWV0cnkudmVydGljZXMsIGdlb21ldHJ5LnZlcnRpY2VzKTtcclxuY29uc3QgYmFja01hcCA9IG1hcFZlcnRpY2VzKGJhY2tHZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkudmVydGljZXMpO1xyXG5jb25zdCBsZWZ0TWFwID0gbWFwVmVydGljZXMobGVmdEdlb21ldHJ5LnZlcnRpY2VzLCBnZW9tZXRyeS52ZXJ0aWNlcyk7XHJcbmNvbnN0IHJpZ2h0TWFwID0gbWFwVmVydGljZXMocmlnaHRHZW9tZXRyeS52ZXJ0aWNlcywgZ2VvbWV0cnkudmVydGljZXMpO1xyXG5cclxuYWRkRmFjZXModG9wR2VvbWV0cnkuZmFjZXMsIChpKT0+IGkrYm90dG9tR2VvbWV0cnkudmVydGljZXMubGVuZ3RoKTtcclxuYWRkRmFjZXMoYm90dG9tR2VvbWV0cnkuZmFjZXMsIChpKT0+IGkpO1xyXG5hZGRGYWNlcyhmcm9udEdlb21ldHJ5LmZhY2VzLCAoaSk9PiBmcm9udE1hcFtpXSk7XHJcbmFkZEZhY2VzKGJhY2tHZW9tZXRyeS5mYWNlcywgKGkpPT4gYmFja01hcFtpXSk7XHJcbmFkZEZhY2VzKGxlZnRHZW9tZXRyeS5mYWNlcywgKGkpPT4gbGVmdE1hcFtpXSk7XHJcbmFkZEZhY2VzKHJpZ2h0R2VvbWV0cnkuZmFjZXMsIChpKT0+IHJpZ2h0TWFwW2ldKTtcclxuZmFjZXMucG9wKCk7XHJcblxyXG5UaHJlZVV0aWxzLmNvbXB1dGVGYWNlVmVydGV4VXZzKGdlb21ldHJ5LCBmYWNlcyk7XHJcblxyXG5nZW9tZXRyeS5jb21wdXRlVmVydGV4Tm9ybWFscygpO1xyXG4vL2dlb21ldHJ5LmNvbXB1dGVGYWNlTm9ybWFscygpO1xyXG5nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdTcGhlcmUoKTtcclxuLy9nZW9tZXRyeS5jb21wdXRlQm91bmRpbmdCb3goKTtcclxuZ2VvbWV0cnkudmVydGljZXNOZWVkVXBkYXRlID0gdHJ1ZTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHRyZXNYLFxyXG5cdHJlc1ksXHJcblx0cmVzWixcclxuXHRmYWNlcyxcclxuXHRnZW9tZXRyeVxyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9tb2RlbHMvc2hlZXRCbG9jay5qcyIsImNvbnN0IG1vdXNlQnV0dG9ucyA9IHtcclxuICBMZWZ0OiAwLFxyXG4gIE1pZGRsZTogMSxcclxuICBSaWdodDogMlxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3BzKCkge1xyXG4gIHJldHVybiB7XHJcbiAgICBlcHM6IDFlLTQsXHJcbiAgICBza2luOiB7XHJcbiAgICAgIGRlZmF1bHQ6ICdzaG9ydC13aGl0ZS1ib29rLXZpZXcnLFxyXG4gICAgfSxcclxuICAgIHNjYWxlOiB7XHJcbiAgICAgIGRlZmF1bHQ6IDAuOSxcclxuICAgICAgbWluOiAwLjksXHJcbiAgICAgIG1heDogMi41LFxyXG4gICAgICBsZXZlbHM6IDdcclxuICAgIH0sXHJcbiAgICBsaWdodGluZzoge1xyXG4gICAgICBkZWZhdWx0OiAwLjcsXHJcbiAgICAgIG1pbjogMCxcclxuICAgICAgbWF4OiAxLFxyXG4gICAgICBsZXZlbHM6IDdcclxuICAgIH0sXHJcbiAgICBwYW46IHtcclxuICAgICAgc3BlZWQ6IDUwXHJcbiAgICB9LFxyXG4gICAgbG9hZGluZ0FuaW1hdGlvbjoge1xyXG4gICAgICBza2luOiBmYWxzZSxcclxuICAgICAgYm9vazogdHJ1ZVxyXG4gICAgfSxcclxuICAgIGF1dG9SZXNvbHV0aW9uOiB7XHJcbiAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIGNvZWZmaWNpZW50OiAxLjVcclxuICAgIH0sXHJcbiAgICBhY3Rpb25zOiB7XHJcbiAgICAgIGNtZFpvb21Jbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFpvb21PdXQ6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZERlZmF1bHRab29tOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAnZGJsY2xpY2snLFxyXG4gICAgICAgIGNvZGU6IDBcclxuICAgICAgfSxcclxuICAgICAgY21kVG9jOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRGYXN0QmFja3dhcmQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRCYWNrd2FyZDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRm9yd2FyZDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRmFzdEZvcndhcmQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTYXZlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQcmludDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY21kRnVsbFNjcmVlbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgd2lkU2V0dGluZ3M6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFNtYXJ0UGFuOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFNpbmdsZVBhZ2U6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgYWN0aXZlRm9yTW9iaWxlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTb3VuZHM6IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRTdGF0czoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRMaWdodGluZ1VwOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRMaWdodGluZ0Rvd246IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhbkxlZnQ6IHtcclxuICAgICAgICBlbmFibGVkOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgICBjbWRQYW5SaWdodDoge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIGNtZFBhblVwOiB7XHJcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgY21kUGFuRG93bjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1vdXNlQ21kUm90YXRlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAnbW91c2VkcmFnJyxcclxuICAgICAgICBjb2RlOiBtb3VzZUJ1dHRvbnMuUmlnaHRcclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWREcmFnWm9vbToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ21vdXNlZHJhZycsXHJcbiAgICAgICAgY29kZTogbW91c2VCdXR0b25zLk1pZGRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtb3VzZUNtZFBhbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ21vdXNlZHJhZycsXHJcbiAgICAgICAgY29kZTogbW91c2VCdXR0b25zLkxlZnRcclxuICAgICAgfSxcclxuICAgICAgbW91c2VDbWRXaGVlbFpvb206IHtcclxuICAgICAgICBlbmFibGVkOiB0cnVlLFxyXG4gICAgICAgIHR5cGU6ICdtb3VzZXdoZWVsJyxcclxuICAgICAgICBjb2RlOiAwXHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kUm90YXRlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAndG91Y2hkcmFnJyxcclxuICAgICAgICBjb2RlOiAzXHJcbiAgICAgIH0sXHJcbiAgICAgIHRvdWNoQ21kWm9vbToge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ3RvdWNoZHJhZycsXHJcbiAgICAgICAgY29kZTogMlxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFBhbjoge1xyXG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgdHlwZTogJ3RvdWNoZHJhZycsXHJcbiAgICAgICAgY29kZTogMVxyXG4gICAgICB9LFxyXG4gICAgICB0b3VjaENtZFN3aXBlOiB7XHJcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcclxuICAgICAgICB0eXBlOiAndG91Y2hkcmFnJyxcclxuICAgICAgICBjb2RlOiAxXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG59O1xyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9qcy9wcm9wcy9ib29rQ29udHJvbGxlci5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBJbWFnZUJhc2UgZnJvbSAnLi9JbWFnZUJhc2UnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmxhbmtJbWFnZSBleHRlbmRzIEltYWdlQmFzZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7XHJcbiAgICBzdXBlcihjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBjb2xvcik7XHJcblxyXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkuXHJcbiAgICAgIHRoZW4oKCk9PiB7XHJcbiAgICAgICAgdGhpcy5zdGFydFJlbmRlciA9ICgpPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJCbGFua1BhZ2UoKTtcclxuICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZpbmlzaExvYWQoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0JsYW5rSW1hZ2UuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm9va21hcmtzIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCBpdGVtcywgZ2V0VGl0bGU9KGkpPT4gaS50aXRsZSwgZ2V0SXRlbXM9KGkpPT5pLml0ZW1zKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMubWFwID0gW107XHJcbiAgICB0aGlzLmdldFRpdGxlID0gZ2V0VGl0bGU7XHJcbiAgICB0aGlzLmdldEl0ZW1zID0gZ2V0SXRlbXM7XHJcbiAgICB0aGlzLm5vZGVzID0gdGhpcy5tYXBOb2RlcyhpdGVtcywgdGhpcy5tYXApO1xyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIHRvZ2xlOiAoZSk9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGxldCBsaSA9ICQoZS50YXJnZXQpO1xyXG4gICAgICAgIHdoaWxlKGxpWzBdICYmIGxpWzBdIT09Y29udGFpbmVyWzBdICYmICFsaS5oYXNDbGFzcygnaXRlbScpKSB7XHJcbiAgICAgICAgICBsaSA9ICQobGlbMF0ucGFyZW50Tm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGxpLmhhc0NsYXNzKCdpdGVtJykpIHtcclxuICAgICAgICAgIGxldCBjbWQgPSAkKGUudGFyZ2V0KTtcclxuICAgICAgICAgIHdoaWxlKGNtZFswXSAmJiBjbWRbMF0hPT1saVswXSAmJiAhY21kLmhhc0NsYXNzKCdjbWQnKSkge1xyXG4gICAgICAgICAgICBjbWQgPSAkKGNtZFswXS5wYXJlbnROb2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKGNtZC5oYXNDbGFzcygnY21kJykpIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubWFwW2xpLmF0dHIoJ2RhdGEtaWQnKV07XHJcbiAgICAgICAgICAgIGlmKGNtZC5oYXNDbGFzcygndG9nbGUnKSkge1xyXG4gICAgICAgICAgICAgIG5vZGUubWluaW1pemVkID0gIW5vZGUubWluaW1pemVkO1xyXG4gICAgICAgICAgICAgIGlmKG5vZGUubWluaW1pemVkKSB7XHJcbiAgICAgICAgICAgICAgICBsaS5maW5kKCd1bCcpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgbGkuZmluZCgnLnRvZ2xlJykuYWRkQ2xhc3MoJ21pbmltaXplZCcpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxpLmZpbmQoJy50b2dsZScpLnJlbW92ZUNsYXNzKCdtaW5pbWl6ZWQnKTtcclxuICAgICAgICAgICAgICAgIGxpLmFwcGVuZCgodGhpcy5yZW5kZXJOb2RlKG5vZGUpLm1hdGNoKC88dWwuKjxcXC91bD4vKSB8fCBbJyddKVswXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMub25OYXZpZ2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk5hdmlnYXRlKG5vZGUuaXRlbSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29udGFpbmVyLm9uKCdjbGljaycsIHRoaXMuYmluZHMudG9nbGUpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIGdldFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXAubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY29udGFpbmVyLm9mZignY2xpY2snLCB0aGlzLmJpbmRzLnRvZ2xlKTtcclxuICAgIHRoaXMuY29udGFpbmVyLmh0bWwoJycpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKCkge1xyXG4gICAgdGhpcy5jb250YWluZXIuaHRtbCh0aGlzLnJlbmRlck5vZGVzKHRoaXMubm9kZXMpKTtcclxuICB9XHJcblxyXG4gIGZvckVhY2goZiwgbm9kZXM9dGhpcy5ub2Rlcykge1xyXG4gICAgZm9yKGxldCBub2RlIG9mIChub2RlcyB8fCBbXSkpIHtcclxuICAgICAgZihub2RlKTtcclxuICAgICAgdGhpcy5mb3JFYWNoKGYsIG5vZGUuY2hpbGRyZW4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwYW5kKCkge1xyXG4gICAgdGhpcy5mb3JFYWNoKChuKT0+IG4ubWluaW1pemVkID0gZmFsc2UpO1xyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuICB9XHJcblxyXG4gIG1pbmltaXplKCkge1xyXG4gICAgdGhpcy5mb3JFYWNoKChuKT0+IG4ubWluaW1pemVkID0gdHJ1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyTm9kZShub2RlKSB7XHJcbiAgICByZXR1cm4gWyc8ZGl2IGNsYXNzPVwiYXJlYVwiPicsXHJcbiAgICAgIG5vZGUuY2hpbGRyZW4/ICc8YSBocmVmPVwiI1wiIGNsYXNzPVwiY21kIHRvZ2xlJyArIChub2RlLm1pbmltaXplZD8gJyBtaW5pbWl6ZWQnOiAnJykgKyAnXCI+PGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1yaWdodFwiPjwvaT48L2E+ICc6ICc8aSBjbGFzcz1cIndoaXRlLXNwYWNlXCI+PC9pPiAnLFxyXG4gICAgICAnPGEgY2xhc3M9XCJjbWRcIiB0aXRsZT1cIicsIG5vZGUudGl0bGUsJ1wiIGhyZWY9XCIjXCI+Jywgbm9kZS50aXRsZSwgJzwvYT48L2Rpdj4nLFxyXG4gICAgICBub2RlLm1pbmltaXplZD8gJyc6IHRoaXMucmVuZGVyTm9kZXMobm9kZS5jaGlsZHJlbilcclxuICAgIF0uam9pbignJyk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJOb2Rlcyhub2Rlcykge1xyXG4gICAgbGV0IHJlcyA9IFsnPGRpdiBjbGFzcz1cImJvb2ttYXJrc1wiPiddO1xyXG4gICAgaWYobm9kZXMgJiYgbm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJlcy5wdXNoKCc8dWwgY2xhc3M9XCJsZXZlbC0nLCBub2Rlc1swXS5sZXZlbCwgJ1wiPicpO1xyXG4gICAgICBmb3IobGV0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgICByZXMucHVzaChbXHJcbiAgICAgICAgICAnPGxpIGNsYXNzPVwiaXRlbVwiIGRhdGEtaWQ9XCInLCBub2RlLmlkLCdcIj4nLFxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlck5vZGUobm9kZSksXHJcbiAgICAgICAgICAnPC9saT4nXS5qb2luKCcnKSk7XHJcbiAgICAgIH1cclxuICAgICAgcmVzLnB1c2goJzwvdWw+Jyk7XHJcbiAgICB9XHJcbiAgICByZXMucHVzaCgnPC9kaXY+Jyk7XHJcbiAgICByZXR1cm4gcmVzLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgbWFwTm9kZXMoaXRlbXMsIG1hcD1bXSwgbGV2ZWw9MCkge1xyXG4gICAgbGV0IG5vZGVzID0gbnVsbDtcclxuICAgIGlmKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICBub2Rlcz1bXTtcclxuICAgICAgZm9yKGxldCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBtYXAubGVuZ3RoO1xyXG4gICAgICAgIG1hcC5wdXNoKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHtcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGUoaXRlbSksXHJcbiAgICAgICAgICBsZXZlbCxcclxuICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICBtaW5pbWl6ZWQ6IHRydWUsXHJcbiAgICAgICAgICBjaGlsZHJlbjogdGhpcy5tYXBOb2Rlcyh0aGlzLmdldEl0ZW1zKGl0ZW0pLCBtYXAsIGxldmVsKzEpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIG1hcFtpZF0gPSBub2RlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Cb29rbWFya3MuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGV0ZWN0b3Ige1xyXG5cclxuXHRzdGF0aWMgY2FudmFzID0gISEgd2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcclxuXHJcblx0c3RhdGljIHdlYmdsID0gKGZ1bmN0aW9uKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcblx0XHRcdHJldHVybiAhISAod2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dCAmJiAoY2FudmFzLmdldENvbnRleHQoJ3dlYmdsJykgfHwgY2FudmFzLmdldENvbnRleHQoJ2V4cGVyaW1lbnRhbC13ZWJnbCcpKSk7XHJcblx0XHR9XHJcblx0XHRjYXRjaCAoZSkge1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblx0fSkoKTtcclxuXHJcblx0c3RhdGljIHdvcmtlcnMgPSAhISB3aW5kb3cuV29ya2VyO1xyXG5cclxuXHRzdGF0aWMgZmlsZWFwaSA9IHdpbmRvdy5GaWxlICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlTGlzdCAmJiB3aW5kb3cuQmxvYjtcclxuXHJcblx0c3RhdGljIGdldFdlYkdMRXJyb3JNZXNzYWdlKCkge1xyXG5cdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0ZWxlbWVudC5pZCA9ICd3ZWJnbC1lcnJvci1tZXNzYWdlJztcclxuXHRcdGVsZW1lbnQuc3R5bGUuZm9udEZhbWlseSA9ICdtb25vc3BhY2UnO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxM3B4JztcclxuXHRcdGVsZW1lbnQuc3R5bGUuZm9udFdlaWdodCA9ICdub3JtYWwnO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcclxuXHRcdGVsZW1lbnQuc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmJztcclxuXHRcdGVsZW1lbnQuc3R5bGUuY29sb3IgPSAnIzAwMCc7XHJcblx0XHRlbGVtZW50LnN0eWxlLnBhZGRpbmcgPSAnMS41ZW0nO1xyXG5cdFx0ZWxlbWVudC5zdHlsZS53aWR0aCA9ICc0MDBweCc7XHJcblx0XHRlbGVtZW50LnN0eWxlLm1hcmdpbiA9ICc1ZW0gYXV0byAwJztcclxuXHJcblx0XHRpZiAoIURldGVjdG9yLndlYmdsKSB7XHJcblx0XHRcdGVsZW1lbnQuaW5uZXJIVE1MID0gd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dCA/IFtcclxuXHRcdFx0XHQnWW91ciBncmFwaGljcyBjYXJkIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCA8YSBocmVmPVwiaHR0cDovL2tocm9ub3Mub3JnL3dlYmdsL3dpa2kvR2V0dGluZ19hX1dlYkdMX0ltcGxlbWVudGF0aW9uXCIgc3R5bGU9XCJjb2xvcjojMDAwXCI+V2ViR0w8L2E+LjxiciAvPicsXHJcblx0XHRcdFx0J0ZpbmQgb3V0IGhvdyB0byBnZXQgaXQgPGEgaHJlZj1cImh0dHA6Ly9nZXQud2ViZ2wub3JnL1wiIHN0eWxlPVwiY29sb3I6IzAwMFwiPmhlcmU8L2E+LidcclxuXHRcdFx0XS5qb2luKCdcXG4nKSA6IFtcclxuXHRcdFx0XHQnWW91ciBicm93c2VyIGRvZXMgbm90IHNlZW0gdG8gc3VwcG9ydCA8YSBocmVmPVwiaHR0cDovL2tocm9ub3Mub3JnL3dlYmdsL3dpa2kvR2V0dGluZ19hX1dlYkdMX0ltcGxlbWVudGF0aW9uXCIgc3R5bGU9XCJjb2xvcjojMDAwXCI+V2ViR0w8L2E+Ljxici8+JyxcclxuXHRcdFx0XHQnRmluZCBvdXQgaG93IHRvIGdldCBpdCA8YSBocmVmPVwiaHR0cDovL2dldC53ZWJnbC5vcmcvXCIgc3R5bGU9XCJjb2xvcjojMDAwXCI+aGVyZTwvYT4uJ1xyXG5cdFx0XHRdLmpvaW4oJ1xcbicpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGVsZW1lbnQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkR2V0V2ViR0xNZXNzYWdlKHBhcmFtZXRlcnMpIHtcclxuXHRcdGxldCBwYXJlbnQsIGlkLCBlbGVtZW50O1xyXG5cdFx0cGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgfHwge307XHJcblxyXG5cdFx0cGFyZW50ID0gcGFyYW1ldGVycy5wYXJlbnQgfHwgJChkb2N1bWVudC5ib2R5KTtcclxuXHRcdGlkID0gcGFyYW1ldGVycy5pZCB8fCAnb2xkaWUnO1xyXG5cclxuXHRcdGVsZW1lbnQgPSBEZXRlY3Rvci5nZXRXZWJHTEVycm9yTWVzc2FnZSgpO1xyXG5cdFx0Ly9lbGVtZW50LmlkID0gaWQ7XHJcblxyXG5cdFx0cGFyZW50LmFwcGVuZChlbGVtZW50KTtcclxuXHR9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0RldGVjdG9yLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9jTW91c2VTaW11bGF0b3Ige1xyXG5cclxuICBzdGF0aWMgSE9WRVIgPSAnU0lNVUxBVEVELUhPVkVSJztcclxuICBzdGF0aWMgQUNUSVZFID0gJ1NJTVVMQVRFRC1BQ1RJVkUnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihqRnJhbWUsIGVsZW1lbnQsIGJFbGVtZW50PWRvY3VtZW50LmJvZHkpIHtcclxuICAgIHRoaXMuakZyYW1lID0gakZyYW1lO1xyXG4gICAgdGhpcy53bmQgPSBqRnJhbWVbMF0uY29udGVudFdpbmRvdztcclxuICAgIHRoaXMuZG9jID0gakZyYW1lWzBdLmNvbnRlbnREb2N1bWVudDtcclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQgfHwgZG9jLmJvZHk7XHJcbiAgICB0aGlzLmJFbGVtZW50ID0gYkVsZW1lbnQ7XHJcbiAgICB0aGlzLnJlc2VuZFByb3BlcnRpZXMgPSB0aGlzLmdldERlZmF1bHRSZXNlbmRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLnVuZGVmaW5lZFByb3BlcnRpZXMgPSB0aGlzLmdldERlZmF1bHRVbmRlZmluZWRQcm9wZXJ0aWVzKCk7XHJcbiAgICB0aGlzLmN1cnNvcnMgPSBbXTtcclxuICAgIHRoaXMub25Eb2NDaGFuZ2VDbGJzID0gW107XHJcbiAgICBjb25zdCB0ZXJtcyA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmaW5kOiAnOmhvdmVyJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2U6ICcuJytEb2NNb3VzZVNpbXVsYXRvci5IT1ZFUlxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmluZDogJzphY3RpdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZTogJy4nK0RvY01vdXNlU2ltdWxhdG9yLkFDVElWRVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgXTtcclxuICAgIGxldCBzdHlsZSA9IFsnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPiddO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmRvYy5zdHlsZVNoZWV0cy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBsZXQgc3MgPSB0aGlzLmRvYy5zdHlsZVNoZWV0c1tpXTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzcy5jc3NSdWxlcy5sZW5ndGg7ICsraikge1xyXG4gICAgICAgIGxldCByID0gc3MuY3NzUnVsZXNbal0sIGNzc1RleHQ7XHJcbiAgICAgICAgZm9yKGxldCB0ZXJtIG9mIHRlcm1zKSB7XHJcbiAgICAgICAgICBpZiAofnIuc2VsZWN0b3JUZXh0LmluZGV4T2YodGVybS5maW5kKSkge1xyXG4gICAgICAgICAgICBjc3NUZXh0ID0gKGNzc1RleHQgfHwgci5jc3NUZXh0KS5yZXBsYWNlKG5ldyBSZWdFeHAodGVybS5maW5kLCAnZycpLCB0ZXJtLnJlcGxhY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihjc3NUZXh0KSB7XHJcbiAgICAgICAgICBzdHlsZS5wdXNoKGNzc1RleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3R5bGUucHVzaCgnPC9zdHlsZT4nKTtcclxuICAgICQodGhpcy5kb2MuaGVhZCkuYXBwZW5kKCQoc3R5bGUuam9pbignJykpKTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRDb29yZHMoeCwgeSkge1xyXG4gICAgY29uc3QgakVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudCk7XHJcbiAgICBjb25zdCBvZmZzZXQgPSBqRWxlbWVudC5vZmZzZXQoKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHg6IG9mZnNldC5sZWZ0K2pFbGVtZW50LndpZHRoKCkqeCxcclxuICAgICAgeTogb2Zmc2V0LnRvcCtqRWxlbWVudC5oZWlnaHQoKSooMS15KVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJFdmVudChlbGVtZW50LCBlLCBwLCB0eXBlLCBhZHZhbmNlZFByb3BzKSB7XHJcbiAgICBjb25zdCBwcm9wcyA9IHt9O1xyXG4gICAgZm9yKGxldCBuIG9mIHRoaXMucmVzZW5kUHJvcGVydGllcykge1xyXG4gICAgICBwcm9wc1tuXSA9IGVbbl07XHJcbiAgICB9XHJcbiAgICBmb3IobGV0IG4gb2YgdGhpcy51bmRlZmluZWRQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIHByb3BzW25dID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBuIGluIGFkdmFuY2VkUHJvcHMpIHtcclxuICAgICAgaWYoYWR2YW5jZWRQcm9wcy5oYXNPd25Qcm9wZXJ0eShuKSkge1xyXG4gICAgICAgIHByb3BzW25dID0gYWR2YW5jZWRQcm9wc1tuXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvcHMudmlldyA9IHRoaXMud25kO1xyXG4gICAgcHJvcHMucGFnZVggPSBwLng7XHJcbiAgICBwcm9wcy5wYWdlWSA9IHAueTtcclxuICAgIGNvbnN0IGpFID0gJC5FdmVudCh0eXBlLCBwcm9wcyk7XHJcbiAgICBqRS50aW1lU3RhbXAgPSBlLnRpbWVTdGFtcDtcclxuICAgICQoZWxlbWVudCkudHJpZ2dlcihqRSk7XHJcbiAgfVxyXG5cclxuICBhZGRDbGFzcyhlbGVtZW50LCBuYW1lKSB7XHJcbiAgICAkKGVsZW1lbnQpLmFkZENsYXNzKG5hbWUpO1xyXG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLnduZC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgdGhpcy5jdXJzb3JzLnB1c2goJCh0aGlzLmJFbGVtZW50KS5jc3MoJ2N1cnNvcicpKTtcclxuICAgICQodGhpcy5iRWxlbWVudCkuY3NzKCdjdXJzb3InLCBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdjdXJzb3InKSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDbGFzcyhlbGVtZW50LCBuYW1lKSB7XHJcbiAgICAkKGVsZW1lbnQpLnJlbW92ZUNsYXNzKG5hbWUpO1xyXG4gICAgJCh0aGlzLmJFbGVtZW50KS5jc3MoJ2N1cnNvcicsIHRoaXMuY3Vyc29ycy5wb3AoKSk7XHJcbiAgfVxyXG5cclxuICBlbnRlckVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgdGhpcy5hZGRDbGFzcyhlbGVtZW50LCBEb2NNb3VzZVNpbXVsYXRvci5IT1ZFUik7XHJcbiAgfVxyXG5cclxuICBsZWF2ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhlbGVtZW50LCBEb2NNb3VzZVNpbXVsYXRvci5IT1ZFUik7XHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgdGhpcy5hZGRDbGFzcyhlbGVtZW50LCBEb2NNb3VzZVNpbXVsYXRvci5BQ1RJVkUpO1xyXG4gIH1cclxuXHJcbiAgZGVhY3RpdmF0ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgdGhpcy5yZW1vdmVDbGFzcyhlbGVtZW50LCBEb2NNb3VzZVNpbXVsYXRvci5BQ1RJVkUpO1xyXG4gIH1cclxuXHJcbiAgYWRkRG9jQ2hhbmdlQ2xiKGNsYikge1xyXG4gICAgdGhpcy5vbkRvY0NoYW5nZUNsYnMucHVzaChjbGIpO1xyXG4gIH1cclxuXHJcbiAgbm90aWZ5KCkge1xyXG4gICAgZm9yKGxldCBjbGIgb2YgdGhpcy5vbkRvY0NoYW5nZUNsYnMpIHtcclxuICAgICAgY2xiKHRoaXMud25kLCB0aGlzLmRvYyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbGVtZW50RnJvbVBvaW50KHApIHtcclxuICAgIGxldCBub2RlID0gdGhpcy5kb2MuYm9keSwgbmV4dCA9IHRydWU7XHJcbiAgICB3aGlsZShuZXh0KSB7XHJcbiAgICAgIG5leHQgPSBmYWxzZTtcclxuICAgICAgZm9yKGxldCBpPTA7IGk8bm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSBub2RlLmNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgaWYoY2hpbGQgaW5zdGFuY2VvZiB0aGlzLnduZC5FbGVtZW50KSB7XHJcbiAgICAgICAgICBjb25zdCBqQyA9ICQoY2hpbGQpLCBvZmZzZXQgPSBqQy5vZmZzZXQoKSwgaGVpZ2h0ID0gakMuaGVpZ2h0KCksIHdpZHRoID0gakMud2lkdGgoKTtcclxuICAgICAgICAgIGlmKHAueD5vZmZzZXQubGVmdCAmJiBwLng8b2Zmc2V0LmxlZnQrd2lkdGggJiYgcC55Pm9mZnNldC50b3AgJiYgcC55PG9mZnNldC50b3AraGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIG5vZGUgPSBjaGlsZDtcclxuICAgICAgICAgICAgbmV4dCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5vZGU7XHJcbiAgfVxyXG5cclxuICBnZXRFbGVtZW50KHApIHtcclxuICAgIGNvbnN0IG9mZjAgPSB0aGlzLmpGcmFtZS5vZmZzZXQoKTtcclxuICAgIHRoaXMuakZyYW1lLm9mZnNldCh7bGVmdDogMC41KndpbmRvdy5pbm5lcldpZHRoLXAueCwgdG9wOiAwLjUqd2luZG93LmlubmVySGVpZ2h0LXAueX0pO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLmRvYy5lbGVtZW50RnJvbVBvaW50KHAueCwgcC55KTtcclxuICAgIGlmKCFlbGVtZW50KSB7IC8vIGl0IGlzbid0IGEgam9rZSBpdCdzIElFXHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmRvYy5lbGVtZW50RnJvbVBvaW50KHAueCwgcC55KTtcclxuICAgIH1cclxuICAgIHRoaXMuakZyYW1lLm9mZnNldChvZmYwKTtcclxuICAgIHJldHVybiBlbGVtZW50PyBlbGVtZW50OiB0aGlzLmVsZW1lbnRGcm9tUG9pbnQocCk7XHJcbiAgfVxyXG5cclxuICBzaW11bGF0ZShlLCBkb2MsIHgsIHkpIHtcclxuICAgIGNvbnN0IHAgPSB0aGlzLmNvbnZlcnRDb29yZHMoeCwgeSksXHJcbiAgICAgICAgICBlbGVtZW50ID0gZG9jPT09dGhpcy5kb2M/IHRoaXMuZ2V0RWxlbWVudChwKTogdW5kZWZpbmVkO1xyXG4gICAgbGV0IHRyaWdnZXIgPSBlbGVtZW50ICE9PSB1bmRlZmluZWQsIG5vdGlmeSA9IGZhbHNlO1xyXG5cclxuICAgIHN3aXRjaChlLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbW91c2Vkb3duJzoge1xyXG4gICAgICAgIGlmKHRoaXMuY2FwRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5kZWFjdGl2YXRlRWxlbWVudCh0aGlzLmNhcEVsZW1lbnQpO1xyXG4gICAgICAgICAgbm90aWZ5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXBFbGVtZW50ID0gZWxlbWVudDtcclxuICAgICAgICBpZih0aGlzLmNhcEVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZhdGVFbGVtZW50KHRoaXMuY2FwRWxlbWVudCk7XHJcbiAgICAgICAgICBub3RpZnkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtb3VzZXVwJzoge1xyXG4gICAgICAgIGlmKHRoaXMuY2FwRWxlbWVudCkge1xyXG4gICAgICAgICAgdGhpcy5kZWFjdGl2YXRlRWxlbWVudCh0aGlzLmNhcEVsZW1lbnQpO1xyXG4gICAgICAgICAgbm90aWZ5ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50aW1lU3RhbXAgPSBlLnRpbWVTdGFtcDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdjbGljayc6IHtcclxuICAgICAgICB0cmlnZ2VyID0gZWxlbWVudCAmJiB0aGlzLmNhcEVsZW1lbnQgPT09IGVsZW1lbnQgJiYgZS50aW1lU3RhbXAgPT09IHRoaXMudGltZVN0YW1wO1xyXG4gICAgICAgIHRoaXMuY2FwRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdtb3VzZWVudGVyJzpcclxuICAgICAgY2FzZSAnbW91c2VvdmVyJzpcclxuICAgICAgY2FzZSAnbW91c2Vtb3ZlJzoge1xyXG4gICAgICAgIGxldCBsZWF2ZWQgPSBudWxsO1xyXG4gICAgICAgIGlmKHRoaXMuaG92RWxlbWVudCAhPT0gZWxlbWVudCAmJiB0aGlzLmhvdkVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KHRoaXMuaG92RWxlbWVudCwgZSwgcCwgJ21vdXNlb3V0Jywge3JlbGF0ZWRUYXJnZXQ6IGVsZW1lbnQ/IGVsZW1lbnQ6IG51bGx9KTtcclxuICAgICAgICAgIHRoaXMubGVhdmVFbGVtZW50KHRoaXMuaG92RWxlbWVudCk7XHJcbiAgICAgICAgICBsZWF2ZWQgPSB0aGlzLmhvdkVsZW1lbnQ7XHJcbiAgICAgICAgICB0aGlzLmhvdkVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICBub3RpZnkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZighdGhpcy5ob3ZFbGVtZW50ICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KGVsZW1lbnQsIGUsIHAsICdtb3VzZW92ZXInLCB7cmVsYXRlZFRhcmdldDogbGVhdmVkfSk7XHJcbiAgICAgICAgICB0aGlzLmVudGVyRWxlbWVudChlbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuaG92RWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICBub3RpZnkgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cmlnZ2VyID0gZWxlbWVudCAmJiBlLnR5cGUgPT09ICdtb3VzZW1vdmUnO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ21vdXNlbGVhdmUnOlxyXG4gICAgICBjYXNlICdtb3VzZW91dCc6IHtcclxuICAgICAgICBpZih0aGlzLmhvdkVsZW1lbnQpIHtcclxuICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KHRoaXMuaG92RWxlbWVudCwgZSwgcCwgJ21vdXNlb3V0Jywge3JlbGF0ZWRUYXJnZXQ6IGUucmVsYXRlZFRhcmdldH0pO1xyXG4gICAgICAgICAgdGhpcy5sZWF2ZUVsZW1lbnQodGhpcy5ob3ZFbGVtZW50KTtcclxuICAgICAgICAgIHRoaXMuaG92RWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIG5vdGlmeSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyaWdnZXIgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodHJpZ2dlcikge1xyXG4gICAgICB0aGlzLnRyaWdnZXJFdmVudChlbGVtZW50LCBlLCBwLCBlLnR5cGUpO1xyXG4gICAgfVxyXG4gICAgaWYobm90aWZ5KSB7XHJcbiAgICAgIHRoaXMubm90aWZ5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0VW5kZWZpbmVkUHJvcGVydGllcygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdjbGllbnRYJyxcclxuICAgICAgJ2NsaWVudFknLFxyXG4gICAgICAnb2Zmc2V0WCcsXHJcbiAgICAgICdvZmZzZXRZJyxcclxuICAgICAgJ3NjcmVlblgnLFxyXG4gICAgICAnc2NyZWVuWSdcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBnZXREZWZhdWx0UmVzZW5kUHJvcGVydGllcygpIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgICdhbHRLZXknLFxyXG4gICAgICAnYnViYmxlcycsXHJcbiAgICAgICdidXR0b24nLFxyXG4gICAgICAnYnV0dG9ucycsXHJcbiAgICAgICdjYW5jZWxhYmxlJyxcclxuICAgICAgJ2NoYW5nZWRUb3VjaGVzJyxcclxuICAgICAgJ2NoYXInLFxyXG4gICAgICAnY2hhckNvZGUnLFxyXG4gICAgICAnY3RybEtleScsXHJcbiAgICAgICdkYXRhJyxcclxuICAgICAgJ2RldGFpbCcsXHJcbiAgICAgICdldmVudFBoYXNlJyxcclxuICAgICAgJ2lzRGVmYXVsdFByZXZlbnRlZCcsXHJcbiAgICAgICdrZXknLFxyXG4gICAgICAna2V5Q29kZScsXHJcbiAgICAgICdtZXRhS2V5JyxcclxuICAgICAgJ3BvaW50ZXJJZCcsXHJcbiAgICAgICdwb2ludGVyVHlwZScsXHJcbiAgICAgICdzaGlmdEtleScsXHJcbiAgICAgICd0YXJnZXRUb3VjaGVzJyxcclxuICAgICAgJ3RvdWNoZXMnLFxyXG4gICAgICAnd2hpY2gnXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbi8qXHJcbmFsdEtleSxcclxuYnViYmxlcyxcclxuYnV0dG9uLFxyXG5idXR0b25zLFxyXG5jYW5jZWxhYmxlLFxyXG5jaGFuZ2VkVG91Y2hlcyxcclxuY2hhcixcclxuY2hhckNvZGUsXHJcbmNsaWVudFgsXHJcbmNsaWVudFksXHJcbmN0cmxLZXksXHJcbmN1cnJlbnRUYXJnZXQsXHJcbmRhdGEsXHJcbmRlbGVnYXRlVGFyZ2V0LFxyXG5kZXRhaWwsXHJcbmV2ZW50UGhhc2UsXHJcbmhhbmRsZU9iaixcclxuaXNEZWZhdWx0UHJldmVudGVkLFxyXG5rZXksXHJcbmtleUNvZGUsXHJcbm1ldGFLZXksXHJcbm9mZnNldFgsXHJcbm9mZnNldFksXHJcbm9yaWdpbmFsRXZlbnQsXHJcbnBhZ2VYLFxyXG5wYWdlWSxcclxucG9pbnRlcklkLFxyXG5wb2ludGVyVHlwZSxcclxucmVsYXRlZFRhcmdldCxcclxuc2NyZWVuWCxcclxuc2NyZWVuWSxcclxuc2hpZnRLZXksXHJcbnRhcmdldCxcclxudGFyZ2V0VG91Y2hlcyxcclxudGltZVN0YW1wLFxyXG50b0VsZW1lbnQsXHJcbnRvdWNoZXMsXHJcbnR5cGUsXHJcbnZpZXcsXHJcbndoaWNoXHJcbiovXHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0RvY01vdXNlU2ltdWxhdG9yLmpzIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tMkltYWdlIHtcblxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYywgY2FjaGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB0aGlzLndpbmRvdyA9IHduZDtcbiAgICB0aGlzLmRvY3VtZW50ID0gZG9jO1xuICAgIHRoaXMuY2FjaGUgPSBjYWNoZTtcblxuICAgIGNvbnN0IHV0aWwgPSBuZXdVdGlsKCk7XG4gICAgY29uc3QgaW5saW5lciA9IG5ld0lubGluZXIoKTtcbiAgICBjb25zdCBmb250RmFjZXMgPSBuZXdGb250RmFjZXMoKTtcbiAgICBjb25zdCBpbWFnZXMgPSBuZXdJbWFnZXMoKTtcblxuICAgIHRoaXMudG9TdmcgPSB0b1N2ZztcbiAgICB0aGlzLnRvUG5nID0gdG9Qbmc7XG4gICAgdGhpcy50b0pwZWcgPSB0b0pwZWc7XG4gICAgdGhpcy50b0Jsb2IgPSB0b0Jsb2I7XG4gICAgdGhpcy50b1BpeGVsRGF0YSA9IHRvUGl4ZWxEYXRhO1xuICAgIHRoaXMuaW1wbCA9IHtcbiAgICAgICAgICAgICAgICAgIGZvbnRGYWNlczogZm9udEZhY2VzLFxuICAgICAgICAgICAgICAgICAgaW1hZ2VzOiBpbWFnZXMsXG4gICAgICAgICAgICAgICAgICB1dGlsOiB1dGlsLFxuICAgICAgICAgICAgICAgICAgaW5saW5lcjogaW5saW5lclxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvcHRpb25zLmZpbHRlciAtIFNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwYXNzZWQgbm9kZSBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dFxuICAgICAqICAgICAgICAgIChleGNsdWRpbmcgbm9kZSBtZWFucyBleGNsdWRpbmcgaXQncyBjaGlsZHJlbiBhcyB3ZWxsKS4gTm90IGNhbGxlZCBvbiB0aGUgcm9vdCBub2RlLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBvcHRpb25zLmJnY29sb3IgLSBjb2xvciBmb3IgdGhlIGJhY2tncm91bmQsIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUuXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbnMud2lkdGggLSB3aWR0aCB0byBiZSBhcHBsaWVkIHRvIG5vZGUgYmVmb3JlIHJlbmRlcmluZy5cbiAgICAgKiBAcGFyYW0ge051bWJlcn0gb3B0aW9ucy5oZWlnaHQgLSBoZWlnaHQgdG8gYmUgYXBwbGllZCB0byBub2RlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMuc3R5bGUgLSBhbiBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyB0byBiZSBjb3BpZWQgdG8gbm9kZSdzIHN0eWxlIGJlZm9yZSByZW5kZXJpbmcuXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG9wdGlvbnMucXVhbGl0eSAtIGEgTnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHkgKGFwcGxpY2FibGUgdG8gSlBFRyBvbmx5KSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byAxLjAuXG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIFNWRyBpbWFnZSBkYXRhIFVSTFxuICAgICAqICovXG5cbiAgICBmdW5jdGlvbiB0b1N2Zyhub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZU5vZGUobm9kZSwgb3B0aW9ucy5maWx0ZXIsIHRydWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGVtYmVkRm9udHMpXG4gICAgICAgICAgICAudGhlbihpbmxpbmVJbWFnZXMpXG4gICAgICAgICAgICAudGhlbihhcHBseU9wdGlvbnMpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2xvbmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN2Z0RhdGFVcmkoY2xvbmUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMud2lkdGggfHwgdXRpbC53aWR0aChub2RlKSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5oZWlnaHQgfHwgdXRpbC5oZWlnaHQobm9kZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gYXBwbHlPcHRpb25zKGNsb25lKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5iZ2NvbG9yKSBjbG9uZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBvcHRpb25zLmJnY29sb3I7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLndpZHRoKSBjbG9uZS5zdHlsZS53aWR0aCA9IG9wdGlvbnMud2lkdGggKyAncHgnO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGVpZ2h0KSBjbG9uZS5zdHlsZS5oZWlnaHQgPSBvcHRpb25zLmhlaWdodCArICdweCc7XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLnN0eWxlKVxuICAgICAgICAgICAgICAgIHNlbGYud2luZG93Lk9iamVjdC5rZXlzKG9wdGlvbnMuc3R5bGUpLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb25lLnN0eWxlW3Byb3BlcnR5XSA9IG9wdGlvbnMuc3R5bGVbcHJvcGVydHldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gY2xvbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMsIEBzZWUge0BsaW5rIHRvU3ZnfVxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBVaW50OEFycmF5IGNvbnRhaW5pbmcgUkdCQSBwaXhlbCBkYXRhLlxuICAgICAqICovXG4gICAgZnVuY3Rpb24gdG9QaXhlbERhdGEobm9kZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zIHx8IHt9KVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNhbnZhcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5nZXRJbWFnZURhdGEoXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgIHV0aWwud2lkdGgobm9kZSksXG4gICAgICAgICAgICAgICAgICAgIHV0aWwuaGVpZ2h0KG5vZGUpXG4gICAgICAgICAgICAgICAgKS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtOb2RlfSBub2RlIC0gVGhlIERPTSBOb2RlIG9iamVjdCB0byByZW5kZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFJlbmRlcmluZyBvcHRpb25zLCBAc2VlIHtAbGluayB0b1N2Z31cbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUE5HIGltYWdlIGRhdGEgVVJMXG4gICAgICogKi9cbiAgICBmdW5jdGlvbiB0b1BuZyhub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBkcmF3KG5vZGUsIG9wdGlvbnMgfHwge30pXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAtIFRoZSBET00gTm9kZSBvYmplY3QgdG8gcmVuZGVyXG4gICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBSZW5kZXJpbmcgb3B0aW9ucywgQHNlZSB7QGxpbmsgdG9Tdmd9XG4gICAgICogQHJldHVybiB7UHJvbWlzZX0gLSBBIHByb21pc2UgdGhhdCBpcyBmdWxmaWxsZWQgd2l0aCBhIEpQRUcgaW1hZ2UgZGF0YSBVUkxcbiAgICAgKiAqL1xuICAgIGZ1bmN0aW9uIHRvSnBlZyhub2RlLCBvcHRpb25zKSB7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4gZHJhdyhub2RlLCBvcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNhbnZhcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9qcGVnJywgb3B0aW9ucy5xdWFsaXR5IHx8IDEuMCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgLSBUaGUgRE9NIE5vZGUgb2JqZWN0IHRvIHJlbmRlclxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUmVuZGVyaW5nIG9wdGlvbnMsIEBzZWUge0BsaW5rIHRvU3ZnfVxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IC0gQSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYSBQTkcgaW1hZ2UgYmxvYlxuICAgICAqICovXG4gICAgZnVuY3Rpb24gdG9CbG9iKG5vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRyYXcobm9kZSwgb3B0aW9ucyB8fCB7fSlcbiAgICAgICAgICAgIC50aGVuKHV0aWwuY2FudmFzVG9CbG9iKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkcmF3KGRvbU5vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRvU3ZnKGRvbU5vZGUsIG9wdGlvbnMpXG4gICAgICAgICAgICAudGhlbih1dGlsLm1ha2VJbWFnZSlcbiAgICAgICAgICAgIC50aGVuKHV0aWwuZGVsYXkoMTAwKSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChpbWFnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IG5ld0NhbnZhcyhkb21Ob2RlKTtcbiAgICAgICAgICAgICAgICBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBjYW52YXM7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBuZXdDYW52YXMoZG9tTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgY2FudmFzID0gc2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IG9wdGlvbnMud2lkdGggfHwgdXRpbC53aWR0aChkb21Ob2RlKTtcbiAgICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCB1dGlsLmhlaWdodChkb21Ob2RlKTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmdjb2xvcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmJnY29sb3I7XG4gICAgICAgICAgICAgICAgY3R4LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjYW52YXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZU5vZGUobm9kZSwgZmlsdGVyLCByb290KSB7XG4gICAgICAgIGlmICghcm9vdCAmJiBmaWx0ZXIgJiYgIWZpbHRlcihub2RlKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobm9kZSlcbiAgICAgICAgICAgIC50aGVuKG1ha2VOb2RlQ29weSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZUNoaWxkcmVuKG5vZGUsIGNsb25lLCBmaWx0ZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChjbG9uZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzQ2xvbmUobm9kZSwgY2xvbmUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gbWFrZU5vZGVDb3B5KG5vZGUpIHtcbiAgICAgICAgICAgIGlmICh1dGlsLmlzQ2FudmFzKG5vZGUpKSByZXR1cm4gdXRpbC5tYWtlSW1hZ2Uobm9kZS50b0RhdGFVUkwoKSk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5jbG9uZU5vZGUoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY2xvbmVDaGlsZHJlbihvcmlnaW5hbCwgY2xvbmUsIGZpbHRlcikge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBvcmlnaW5hbC5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjbG9uZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjbG9uZUNoaWxkcmVuSW5PcmRlcihjbG9uZSwgdXRpbC5hc0FycmF5KGNoaWxkcmVuKSwgZmlsdGVyKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjbG9uZUNoaWxkcmVuSW5PcmRlcihwYXJlbnQsIGNoaWxkcmVuLCBmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsb25lTm9kZShjaGlsZCwgZmlsdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY2hpbGRDbG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZENsb25lKSBwYXJlbnQuYXBwZW5kQ2hpbGQoY2hpbGRDbG9uZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NDbG9uZShvcmlnaW5hbCwgY2xvbmUpIHtcbiAgICAgICAgICAgIGlmICghdXRpbC5pc0VsZW1lbnQoY2xvbmUpKSByZXR1cm4gY2xvbmU7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgICAgIC50aGVuKGNsb25lU3R5bGUpXG4gICAgICAgICAgICAgICAgLnRoZW4oY2xvbmVQc2V1ZG9FbGVtZW50cylcbiAgICAgICAgICAgICAgICAudGhlbihjb3B5VXNlcklucHV0KVxuICAgICAgICAgICAgICAgIC50aGVuKGZpeFN2ZylcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZnVuY3Rpb24gY2xvbmVTdHlsZSgpIHtcbiAgICAgICAgICAgICAgICBjb3B5U3R5bGUoc2VsZi53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShvcmlnaW5hbCksIGNsb25lLnN0eWxlKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvcHlTdHlsZShzb3VyY2UsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNzc1RleHQpIHRhcmdldC5jc3NUZXh0ID0gc291cmNlLmNzc1RleHQ7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgY29weVByb3BlcnRpZXMoc291cmNlLCB0YXJnZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1dGlsLmFzQXJyYXkoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNsb25lUHNldWRvRWxlbWVudHMoKSB7XG4gICAgICAgICAgICAgICAgWyc6YmVmb3JlJywgJzphZnRlciddLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xvbmVQc2V1ZG9FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBzZWxmLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG9yaWdpbmFsLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudCA9PT0gJycgfHwgY29udGVudCA9PT0gJ25vbmUnKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdXRpbC51aWQoKTtcbiAgICAgICAgICAgICAgICAgICAgY2xvbmUuY2xhc3NOYW1lID0gY2xvbmUuY2xhc3NOYW1lICsgJyAnICsgY2xhc3NOYW1lO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBzZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChmb3JtYXRQc2V1ZG9FbGVtZW50U3R5bGUoY2xhc3NOYW1lLCBlbGVtZW50LCBzdHlsZSkpO1xuICAgICAgICAgICAgICAgICAgICBjbG9uZS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdFBzZXVkb0VsZW1lbnRTdHlsZShjbGFzc05hbWUsIGVsZW1lbnQsIHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RvciA9ICcuJyArIGNsYXNzTmFtZSArICc6JyArIGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjc3NUZXh0ID0gc3R5bGUuY3NzVGV4dCA/IGZvcm1hdENzc1RleHQoc3R5bGUpIDogZm9ybWF0Q3NzUHJvcGVydGllcyhzdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzZWxlY3RvciArICd7JyArIGNzc1RleHQgKyAnfScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRDc3NUZXh0KHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUuY3NzVGV4dCArICcgY29udGVudDogJyArIGNvbnRlbnQgKyAnOyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdENzc1Byb3BlcnRpZXMoc3R5bGUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1dGlsLmFzQXJyYXkoc3R5bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZm9ybWF0UHJvcGVydHkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCc7ICcpICsgJzsnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZm9ybWF0UHJvcGVydHkobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSArICc6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKSA/ICcgIWltcG9ydGFudCcgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBjb3B5VXNlcklucHV0KCkge1xuICAgICAgICAgICAgICAgIGlmICh1dGlsLmlzVGV4dEFyZWEob3JpZ2luYWwpKSBjbG9uZS5pbm5lckhUTUwgPSBvcmlnaW5hbC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0lucHV0KG9yaWdpbmFsKSkgY2xvbmUuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgb3JpZ2luYWwudmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBmaXhTdmcoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dGlsLmlzU1ZHKGNsb25lKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNsb25lLnNldEF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKTtcblxuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc1NWR1JlY3QoY2xvbmUpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgWyd3aWR0aCcsICdoZWlnaHQnXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbG9uZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIGNsb25lLnN0eWxlLnNldFByb3BlcnR5KGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1iZWRGb250cyhub2RlKSB7XG4gICAgICAgIHJldHVybiBmb250RmFjZXMucmVzb2x2ZUFsbCgpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoY3NzVGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlTm9kZSA9IHNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7XG4gICAgICAgICAgICAgICAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKHNlbGYuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzVGV4dCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5saW5lSW1hZ2VzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIGltYWdlcy5pbmxpbmVBbGwobm9kZSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VTdmdEYXRhVXJpKG5vZGUsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc2VsZi53aW5kb3cuWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKG5vZGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKHV0aWwuZXNjYXBlWGh0bWwpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoeGh0bWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWydkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwnLFxuICAgICAgICAgICAgICAgICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIicsIHdpZHRoLCAnXCIgaGVpZ2h0PVwiJywgaGVpZ2h0LCAnXCI+JyxcbiAgICAgICAgICAgICAgICAgICc8Zm9yZWlnbk9iamVjdCB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPicsIHhodG1sLCAnPC9mb3JlaWduT2JqZWN0PicsXG4gICAgICAgICAgICAgICAgJzwvc3ZnPiddLmpvaW4oJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV3VXRpbCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVzY2FwZTogZXNjYXBlLFxuICAgICAgICAgICAgcGFyc2VFeHRlbnNpb246IHBhcnNlRXh0ZW5zaW9uLFxuICAgICAgICAgICAgbWltZVR5cGU6IG1pbWVUeXBlLFxuICAgICAgICAgICAgZGF0YUFzVXJsOiBkYXRhQXNVcmwsXG4gICAgICAgICAgICBpc0RhdGFVcmw6IGlzRGF0YVVybCxcbiAgICAgICAgICAgIGNhbnZhc1RvQmxvYjogY2FudmFzVG9CbG9iLFxuICAgICAgICAgICAgcmVzb2x2ZVVybDogcmVzb2x2ZVVybCxcbiAgICAgICAgICAgIGdldEFuZEVuY29kZTogZ2V0QW5kRW5jb2RlLFxuICAgICAgICAgICAgdWlkOiB1aWQoKSxcbiAgICAgICAgICAgIGRlbGF5OiBkZWxheSxcbiAgICAgICAgICAgIGFzQXJyYXk6IGFzQXJyYXksXG4gICAgICAgICAgICBlc2NhcGVYaHRtbDogZXNjYXBlWGh0bWwsXG4gICAgICAgICAgICBtYWtlSW1hZ2U6IG1ha2VJbWFnZSxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuXG4gICAgICAgICAgICBpc0VsZW1lbnQsXG4gICAgICAgICAgICBpc0NhbnZhcyxcbiAgICAgICAgICAgIGlzVGV4dEFyZWEsXG4gICAgICAgICAgICBpc0lucHV0LFxuICAgICAgICAgICAgaXNTVkcsXG4gICAgICAgICAgICBpc1NWR1JlY3QsXG4gICAgICAgICAgICBpc0ltYWdlXG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gbWltZXMoKSB7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogT25seSBXT0ZGIGFuZCBFT1QgbWltZSB0eXBlcyBmb3IgZm9udHMgYXJlICdyZWFsJ1xuICAgICAgICAgICAgICogc2VlIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMvbWVkaWEtdHlwZXMueGh0bWxcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY29uc3QgV09GRiA9ICdhcHBsaWNhdGlvbi9mb250LXdvZmYnO1xuICAgICAgICAgICAgY29uc3QgSlBFRyA9ICdpbWFnZS9qcGVnJztcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAnd29mZic6IFdPRkYsXG4gICAgICAgICAgICAgICAgJ3dvZmYyJzogV09GRixcbiAgICAgICAgICAgICAgICAndHRmJzogJ2FwcGxpY2F0aW9uL2ZvbnQtdHJ1ZXR5cGUnLFxuICAgICAgICAgICAgICAgICdlb3QnOiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLFxuICAgICAgICAgICAgICAgICdwbmcnOiAnaW1hZ2UvcG5nJyxcbiAgICAgICAgICAgICAgICAnanBnJzogSlBFRyxcbiAgICAgICAgICAgICAgICAnanBlZyc6IEpQRUcsXG4gICAgICAgICAgICAgICAgJ2dpZic6ICdpbWFnZS9naWYnLFxuICAgICAgICAgICAgICAgICd0aWZmJzogJ2ltYWdlL3RpZmYnLFxuICAgICAgICAgICAgICAgICdzdmcnOiAnaW1hZ2Uvc3ZnK3htbCdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBwYXJzZUV4dGVuc2lvbih1cmwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gL1xcLihbXlxcLlxcL10qPykkL2cuZXhlYyh1cmwpO1xuICAgICAgICAgICAgaWYgKG1hdGNoKSByZXR1cm4gbWF0Y2hbMV07XG4gICAgICAgICAgICBlbHNlIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG1pbWVUeXBlKHVybCkge1xuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gcGFyc2VFeHRlbnNpb24odXJsKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgcmV0dXJuIG1pbWVzKClbZXh0ZW5zaW9uXSB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzRGF0YVVybCh1cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmwuc2VhcmNoKC9eKGRhdGE6KS8pICE9PSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHRvQmxvYihjYW52YXMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IHNlbGYud2luZG93LmF0b2IoY2FudmFzLnRvRGF0YVVSTCgpLnNwbGl0KCcsJylbMV0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGJpbmFyeVN0cmluZy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluYXJ5QXJyYXkgPSBuZXcgc2VsZi53aW5kb3cuVWludDhBcnJheShsZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgYmluYXJ5QXJyYXlbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcblxuICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IHNlbGYud2luZG93LkJsb2IoW2JpbmFyeUFycmF5XSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW1hZ2UvcG5nJ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY2FudmFzVG9CbG9iKGNhbnZhcykge1xuICAgICAgICAgICAgaWYgKGNhbnZhcy50b0Jsb2IpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbnZhcy50b0Jsb2IocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0b0Jsb2IoY2FudmFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlc29sdmVVcmwodXJsLCBiYXNlVXJsKSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBzZWxmLmRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgpO1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IGRvYy5jcmVhdGVFbGVtZW50KCdiYXNlJyk7XG4gICAgICAgICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChiYXNlKTtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkb2MuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgICAgICBiYXNlLmhyZWYgPSBiYXNlVXJsO1xuICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgcmV0dXJuIGEuaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHVpZCgpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd1JyArIGZvdXJSYW5kb21DaGFycygpICsgaW5kZXgrKztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZvdXJSYW5kb21DaGFycygpIHtcbiAgICAgICAgICAgICAgICAgICAgLyogc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzYyNDg3MjIvMjUxOTM3MyAqL1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCcwMDAwJyArIChzZWxmLndpbmRvdy5NYXRoLnJhbmRvbSgpICogc2VsZi53aW5kb3cuTWF0aC5wb3coMzYsIDQpIDw8IDApLnRvU3RyaW5nKDM2KSkuc2xpY2UoLTQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtYWtlSW1hZ2UodXJpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gbmV3IHNlbGYud2luZG93LkltYWdlKCk7XG4gICAgICAgICAgICAgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGltYWdlKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGltYWdlLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgaW1hZ2Uuc3JjID0gdXJpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRBbmRFbmNvZGUodXJsKSB7XG4gICAgICAgICAgbGV0IGRhdGEgPSBzZWxmLmNhY2hlLmdldCh1cmwpO1xuICAgICAgICAgIGlmKGRhdGEpIHtcbiAgICAgICAgICAgIGlmKGRhdGEuY29udGVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gZGF0YS5jb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PiB7XG4gICAgICAgICAgICAgICAgaWYoZGF0YS5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEuY29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGF0YS5wZW5kaW5ncy5wdXNoKHJlc29sdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHNlbGYuY2FjaGUucHV0KHVybCwge3BlbmRpbmdzOiBbXX0pO1xuXG4gICAgICAgICAgICBjb25zdCBUSU1FT1VUID0gMzAwMDA7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgc2VsZi53aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgICAgICAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZG9uZTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9udGltZW91dCA9IHRpbWVvdXQ7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC50aW1lb3V0ID0gVElNRU9VVDtcbiAgICAgICAgICAgICAgICByZXF1ZXN0Lm9wZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdC5zZW5kKCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoJ2Nhbm5vdCBmZXRjaCByZXNvdXJjZTogJyArIHVybCArICcsIHN0YXR1czogJyArIHJlcXVlc3Quc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgc2VsZi53aW5kb3cuRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVyLm9ubG9hZGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuY29udGVudCA9IGVuY29kZXIucmVzdWx0LnNwbGl0KC8sLylbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IHJlc29sdmUgb2YgZGF0YS5wZW5kaW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEuY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnBlbmRpbmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEuY29udGVudCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZXIucmVhZEFzRGF0YVVSTChyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0aW1lb3V0KCkge1xuICAgICAgICAgICAgICAgICAgICBmYWlsKCd0aW1lb3V0IG9mICcgKyBUSU1FT1VUICsgJ21zIG9jY3VyZWQgd2hpbGUgZmV0Y2hpbmcgcmVzb3VyY2U6ICcgKyB1cmwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkYXRhQXNVcmwoY29udGVudCwgdHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIFsnZGF0YTonLHR5cGUsJztiYXNlNjQsJyxjb250ZW50XS5qb2luKCcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGVzY2FwZShzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFsuKis/XiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkZWxheShtcykge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIG1zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBhc0FycmF5KGFycmF5TGlrZSkge1xuICAgICAgICAgICAgY29uc3QgYXJyYXkgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5TGlrZS5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSBhcnJheS5wdXNoKGFycmF5TGlrZVtpXSk7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBlc2NhcGVYaHRtbChzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKCN8XFxuKS9nLCAoYyk9PiBjPT09JyMnPyAnJTIzJzogJyUwQScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gd2lkdGgobm9kZSkge1xuICAgICAgICAgICAgY29uc3QgbGVmdEJvcmRlciA9IHB4KG5vZGUsICdib3JkZXItbGVmdC13aWR0aCcpO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXJpZ2h0LXdpZHRoJyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5zY3JvbGxXaWR0aCArIGxlZnRCb3JkZXIgKyByaWdodEJvcmRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhlaWdodChub2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0b3BCb3JkZXIgPSBweChub2RlLCAnYm9yZGVyLXRvcC13aWR0aCcpO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tQm9yZGVyID0gcHgobm9kZSwgJ2JvcmRlci1ib3R0b20td2lkdGgnKTtcbiAgICAgICAgICAgIHJldHVybiBub2RlLnNjcm9sbEhlaWdodCArIHRvcEJvcmRlciArIGJvdHRvbUJvcmRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHB4KG5vZGUsIHN0eWxlUHJvcGVydHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc2VsZi53aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgncHgnLCAnJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LkVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc0NhbnZhcyhub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBzZWxmLndpbmRvdy5IVE1MQ2FudmFzRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzVGV4dEFyZWEobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2Ygc2VsZi53aW5kb3cuSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzSW5wdXQobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2Ygc2VsZi53aW5kb3cuSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzU1ZHKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LlNWR0VsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1NWR1JlY3Qobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlIGluc3RhbmNlb2Ygc2VsZi53aW5kb3cuU1ZHUmVjdEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc0ltYWdlKG5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIHNlbGYud2luZG93LkhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuZXdJbmxpbmVyKCkge1xuICAgICAgICBjb25zdCBVUkxfUkVHRVggPSAvdXJsXFwoWydcIl0/KFteJ1wiXSs/KVsnXCJdP1xcKS9nO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmxpbmVBbGw6IGlubGluZUFsbCxcbiAgICAgICAgICAgIHNob3VsZFByb2Nlc3M6IHNob3VsZFByb2Nlc3MsXG4gICAgICAgICAgICBpbXBsOiB7XG4gICAgICAgICAgICAgICAgcmVhZFVybHM6IHJlYWRVcmxzLFxuICAgICAgICAgICAgICAgIGlubGluZTogaW5saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVuY3Rpb24gc2hvdWxkUHJvY2VzcyhzdHJpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuc2VhcmNoKFVSTF9SRUdFWCkgIT09IC0xO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gcmVhZFVybHMoc3RyaW5nKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBVUkxfUkVHRVguZXhlYyhzdHJpbmcpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG1hdGNoWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZmlsdGVyKGZ1bmN0aW9uICh1cmwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXV0aWwuaXNEYXRhVXJsKHVybCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlubGluZShzdHJpbmcsIHVybCwgYmFzZVVybCwgZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVybClcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVXJsID8gdXRpbC5yZXNvbHZlVXJsKHVybCwgYmFzZVVybCkgOiB1cmw7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihnZXQgfHwgdXRpbC5nZXRBbmRFbmNvZGUpXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHV0aWwuZGF0YUFzVXJsKGRhdGEsIHV0aWwubWltZVR5cGUodXJsKSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UodXJsQXNSZWdleCh1cmwpLCBbJyQxJywgZGF0YVVybCwgJyQzJ10uam9pbignJykpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiB1cmxBc1JlZ2V4KHVybCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgc2VsZi53aW5kb3cuUmVnRXhwKFsnKHVybFxcXFwoW1xcJ1wiXT8pKCcsIHV0aWwuZXNjYXBlKHVybCksICcpKFtcXCdcIl0/XFxcXCkpJ10uam9pbignJyksICdnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpbmxpbmVBbGwoc3RyaW5nLCBiYXNlVXJsLCBnZXQpIHtcbiAgICAgICAgICAgIGlmIChub3RoaW5nVG9JbmxpbmUoKSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdHJpbmcpO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHN0cmluZylcbiAgICAgICAgICAgICAgICAudGhlbihyZWFkVXJscylcbiAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodXJscykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZG9uZSA9IFByb21pc2UucmVzb2x2ZShzdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB1cmxzLmZvckVhY2goZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvbmUudGhlbihmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZShzdHJpbmcsIHVybCwgYmFzZVVybCwgZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmU7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5vdGhpbmdUb0lubGluZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXNob3VsZFByb2Nlc3Moc3RyaW5nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5ld0ZvbnRGYWNlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc29sdmVBbGw6IHJlc29sdmVBbGwsXG4gICAgICAgICAgICBpbXBsOiB7XG4gICAgICAgICAgICAgICAgcmVhZEFsbDogcmVhZEFsbFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlc29sdmVBbGwoKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZEFsbChzZWxmLmRvY3VtZW50KVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICh3ZWJGb250cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWJGb250cy5tYXAoZnVuY3Rpb24gKHdlYkZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2ViRm9udC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKGNzc1N0cmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNzc1N0cmluZ3Muam9pbignXFxuJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkQWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1dGlsLmFzQXJyYXkoc2VsZi5kb2N1bWVudC5zdHlsZVNoZWV0cykpXG4gICAgICAgICAgICAgICAgLnRoZW4oZ2V0Q3NzUnVsZXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oc2VsZWN0V2ViRm9udFJ1bGVzKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChydWxlcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVsZXMubWFwKG5ld1dlYkZvbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBzZWxlY3RXZWJGb250UnVsZXMoY3NzUnVsZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3NzUnVsZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUudHlwZSA9PT0gQ1NTUnVsZS5GT05UX0ZBQ0VfUlVMRTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZXIuc2hvdWxkUHJvY2VzcyhydWxlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3NyYycpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldENzc1J1bGVzKHN0eWxlU2hlZXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3NzUnVsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBzdHlsZVNoZWV0cy5mb3JFYWNoKGZ1bmN0aW9uIChzaGVldCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5hc0FycmF5KHNoZWV0LmNzc1J1bGVzIHx8IFtdKS5mb3JFYWNoKGNzc1J1bGVzLnB1c2guYmluZChjc3NSdWxlcykpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igd2hpbGUgcmVhZGluZyBDU1MgcnVsZXMgZnJvbSAnICsgc2hlZXQuaHJlZiwgZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBjc3NSdWxlcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gbmV3V2ViRm9udCh3ZWJGb250UnVsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlVXJsID0gKHdlYkZvbnRSdWxlLnBhcmVudFN0eWxlU2hlZXQgfHwge30pLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5saW5lci5pbmxpbmVBbGwod2ViRm9udFJ1bGUuY3NzVGV4dCwgYmFzZVVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNyYzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYkZvbnRSdWxlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3NyYycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5ld0ltYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlubGluZUFsbDogaW5saW5lQWxsLFxuICAgICAgICAgICAgaW1wbDoge1xuICAgICAgICAgICAgICAgIG5ld0ltYWdlOiBuZXdJbWFnZVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIG5ld0ltYWdlKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaW5saW5lOiBpbmxpbmVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGlubGluZShnZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAodXRpbC5pc0RhdGFVcmwoZWxlbWVudC5zcmMpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGVsZW1lbnQuc3JjKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihnZXQgfHwgdXRpbC5nZXRBbmRFbmNvZGUpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXRpbC5kYXRhQXNVcmwoZGF0YSwgdXRpbC5taW1lVHlwZShlbGVtZW50LnNyYykpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lm9ubG9hZCA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gZGF0YVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlubGluZUFsbChub2RlKSB7XG4gICAgICAgICAgICBpZiAoIXV0aWwuaXNFbGVtZW50KG5vZGUpKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5vZGUpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5saW5lQmFja2dyb3VuZChub2RlKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHV0aWwuaXNJbWFnZShub2RlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdJbWFnZShub2RlKS5pbmxpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuYXNBcnJheShub2RlLmNoaWxkTm9kZXMpLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlubGluZUFsbChjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGlubGluZUJhY2tncm91bmQobm9kZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQnKTtcblxuICAgICAgICAgICAgICAgIGlmICghYmFja2dyb3VuZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZShub2RlKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBpbmxpbmVyLmlubGluZUFsbChiYWNrZ3JvdW5kKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoaW5saW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLnN0eWxlLmdldFByb3BlcnR5UHJpb3JpdHkoJ2JhY2tncm91bmQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Eb20ySW1hZ2UuanMiLCJpbXBvcnQgeyQsIFRIUkVFfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyYWcge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYywgdmlzdWFsV29ybGQpIHtcclxuICAgIHRoaXMud25kID0gd25kO1xyXG4gICAgdGhpcy5kb2MgPSBkb2M7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbFdvcmxkO1xyXG4gICAgdGhpcy5jb29yZHMgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG4gICAgdGhpcy5pbnRlcnNlY3Rpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgdGhpcy5yYXljYXN0ZXIgPSB0aGlzLnZpc3VhbC5yYXljYXN0ZXI7XHJcbiAgICB0aGlzLmNhbWVyYSA9IHRoaXMudmlzdWFsLmNhbWVyYTtcclxuICAgIHRoaXMucGxhbmUgPSBuZXcgVEhSRUUuUGxhbmUoKTtcclxuICAgIHRoaXMudGhyZWVzID0gW107XHJcbiAgICB0aGlzLnNlbGVjdGVkID0gbnVsbDtcclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLmNvbnRyb2xzU3RhdGUgPSB0aGlzLnZpc3VhbC5nZXRDb250cm9sc1N0YXRlKCk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy52aXN1YWwuZWxlbWVudDtcclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIG9uTW91c2VNb3ZlOiB0aGlzLm9uTW91c2VNb3ZlLmJpbmQodGhpcyksXHJcbiAgICAgIG9uTW91c2VEb3duOiB0aGlzLm9uTW91c2VEb3duLmJpbmQodGhpcyksXHJcbiAgICAgIG9uTW91c2VVcDogdGhpcy5vbk1vdXNlVXAuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgICQodGhpcy5lbGVtZW50KS5vbignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5vbk1vdXNlTW92ZSk7XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub24oJ21vdXNlZG93bicsIHRoaXMuYmluZHMub25Nb3VzZURvd24pO1xyXG4gICAgJCh0aGlzLmRvYykub24oJ21vdXNldXAnLCB0aGlzLmJpbmRzLm9uTW91c2VVcCk7XHJcbiAgfVxyXG5cclxuICBhZGRUaHJlZSh0aHJlZSkge1xyXG4gICAgdGhpcy50aHJlZXMucHVzaCh0aHJlZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVUaHJlZSh0aHJlZSkge1xyXG4gICAgY29uc3QgaSA9IHRoaXMudGhyZWVzLmluZGV4T2YodGhyZWUpO1xyXG4gICAgaWYofmkpIHtcclxuICAgICAgdGhpcy50aHJlZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25QaWNrQ2FsbGJhY2soKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uRHJhZ0NhbGxiYWNrKCkge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBvblJlbGVhc2VDYWxsYmFjaygpIHtcclxuXHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgJCh0aGlzLmVsZW1lbnQpLm9mZignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5vbk1vdXNlTW92ZSk7XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub2ZmKCdtb3VzZWRvd24nLCB0aGlzLmJpbmRzLm9uTW91c2VEb3duKTtcclxuICAgICQodGhpcy5kb2MpLm9mZignbW91c2V1cCcsIHRoaXMuYmluZHMub25Nb3VzZVVwKTtcclxuICB9XHJcblxyXG4gIHNldENvb3Jkc0Zyb21FdmVudChlKSB7XHJcbiAgICBjb25zdCBqRWxlbWVudCA9ICQodGhpcy5lbGVtZW50KTtcclxuICAgIGNvbnN0IG9mZnNldCA9IGpFbGVtZW50Lm9mZnNldCgpO1xyXG4gICAgdGhpcy5jb29yZHMueCA9ICgoZS5wYWdlWC1vZmZzZXQubGVmdCkvakVsZW1lbnQud2lkdGgoKSkqMi0xO1xyXG4gICAgdGhpcy5jb29yZHMueSA9IC0oKGUucGFnZVktb2Zmc2V0LnRvcCkvakVsZW1lbnQuaGVpZ2h0KCkpKjIrMTtcclxuICAgIHJldHVybiB0aGlzLmNvb3JkcztcclxuICB9XHJcblxyXG4gIG9uTW91c2VEb3duKGUpIHtcclxuICAgIGlmKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZih0aGlzLnNlbGVjdGVkKSB0aGlzLm9uTW91c2VVcChlKTtcclxuXHJcbiAgICB0aGlzLnNldENvb3Jkc0Zyb21FdmVudChlKTtcclxuICBcdHRoaXMucmF5Y2FzdGVyLnNldEZyb21DYW1lcmEodGhpcy5jb29yZHMsIHRoaXMuY2FtZXJhKTtcclxuXHJcbiAgXHRjb25zdCBpbnRlcnNlY3RzID0gdGhpcy5yYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyh0aGlzLnRocmVlcyk7XHJcbiAgXHRpZihpbnRlcnNlY3RzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBpbnRlcnNlY3RzWzBdLm9iamVjdDtcclxuICAgICAgaWYoIXRoaXMub25QaWNrQ2FsbGJhY2soaW50ZXJzZWN0c1swXSkpIHJldHVybjtcclxuICAgICAgY29uc3QgdiA9IGludGVyc2VjdHNbMF0ucG9pbnQuY2xvbmUoKTtcclxuICAgICAgdGhpcy5kaXN0YW5jZSA9IHYuc3ViKHRoaXMucmF5Y2FzdGVyLnJheS5vcmlnaW4pLmxlbmd0aCgpOztcclxuICAgICAgdGhpcy5jb250cm9sc1N0YXRlID0gdGhpcy52aXN1YWwuZ2V0Q29udHJvbHNTdGF0ZSgpO1xyXG4gICAgICB0aGlzLnZpc3VhbC5zZXRDb250cm9sc1N0YXRlKGZhbHNlKTtcclxuICAgICAgdGhpcy5wbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLnZpc3VhbC5jYW1lcmEuZ2V0V29ybGREaXJlY3Rpb24odGhpcy5wbGFuZS5ub3JtYWwpLCBpbnRlcnNlY3RzWzBdLnBvaW50KTtcclxuICAgICAgLy90aGlzLnBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHRoaXMucGxhbmUubm9ybWFsLnNldCgwLDAsMSksIG5ldyBUSFJFRS5WZWN0b3IzKDAsMCwwKSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcclxuICBcdH1cclxuXHJcbiAgfVxyXG5cclxuICBvbk1vdXNlTW92ZShlKSB7XHJcbiAgICBpZighdGhpcy5lbmFibGVkKSByZXR1cm47XHJcbiAgXHRlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gIFx0aWYodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnNldENvb3Jkc0Zyb21FdmVudChlKTtcclxuICAgIFx0dGhpcy5yYXljYXN0ZXIuc2V0RnJvbUNhbWVyYSh0aGlzLmNvb3JkcywgdGhpcy5jYW1lcmEpO1xyXG5cdCAgICBpZih0aGlzLnJheWNhc3Rlci5yYXkuaW50ZXJzZWN0UGxhbmUodGhpcy5wbGFuZSwgdGhpcy5pbnRlcnNlY3Rpb24pKSB7XHJcbiAgICAgICAgaWYoIXRoaXMub25EcmFnQ2FsbGJhY2sodGhpcy5pbnRlcnNlY3Rpb24pKSB0aGlzLm9uTW91c2VVcChlKTtcclxuICAgICAgfS8qKi9cclxuICAgICAgLy90aGlzLmludGVyc2VjdGlvbi5jb3B5KHRoaXMucmF5Y2FzdGVyLnJheS5kaXJlY3Rpb24pLm5vcm1hbGl6ZSgpLm11bHRpcGx5U2NhbGFyKHRoaXMuZGlzdGFuY2UpLmFkZCh0aGlzLnJheWNhc3Rlci5yYXkub3JpZ2luKTsvKiovXHJcbiAgICAgIC8vaWYoIXRoaXMub25EcmFnQ2FsbGJhY2sodGhpcy5zZWxlY3RlZCwgdGhpcy5pbnRlcnNlY3Rpb24pKSB0aGlzLm9uTW91c2VVcChlKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIG9uTW91c2VVcChlKSB7XHJcbiAgICBpZih0aGlzLnNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMub25SZWxlYXNlQ2FsbGJhY2soKTtcclxuICBcdFx0dGhpcy5zZWxlY3RlZCA9IG51bGw7XHJcbiAgICAgIHRoaXMudmlzdWFsLnNldENvbnRyb2xzU3RhdGUodGhpcy5jb250cm9sc1N0YXRlKTtcclxuICBcdH1cclxuICAgIGlmKCF0aGlzLmVuYWJsZWQpIHJldHVybjtcclxuICBcdGUucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0RyYWcuanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5yZXF1aXJlKCdpbXBvcnRzLWxvYWRlcj9kZWZpbmU9PmZhbHNlIWpxdWVyeS1tb3VzZXdoZWVsJykoJCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudHNUb0FjdGlvbnMge1xyXG5cclxuICBzdGF0aWMgbW9kS2V5cyA9IHtcclxuICAgIEN0cmw6IDEsXHJcbiAgICBTaGlmdDogMixcclxuICAgIEFsdDogNFxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBtb3VzZUJ1dHRvbnMgPSB7XHJcbiAgICBMZWZ0OiAwLFxyXG4gICAgTWlkZGxlOiAxLFxyXG4gICAgUmlnaHQ6IDJcclxuICB9O1xyXG5cclxuICBzdGF0aWMgZ2V0RXZlbnRGbGFncyhlKSB7XHJcbiAgICByZXR1cm4gZS5jdHJsS2V5PDwwIHwgZS5zaGlmdEtleTw8MSB8IGUuYWx0S2V5PDwyO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGdldFBvc2l0aW9uKHRvdWNoZXMpIHtcclxuICAgIGxldCB4LCB5O1xyXG4gICAgaWYodG91Y2hlcy5sZW5ndGg9PT0yKSB7XHJcbiAgICAgIHggPSB0b3VjaGVzWzFdLnBhZ2VYLXRvdWNoZXNbMF0ucGFnZVg7XHJcbiAgICAgIHkgPSB0b3VjaGVzWzFdLnBhZ2VZLXRvdWNoZXNbMF0ucGFnZVk7XHJcbiAgICAgIHkgPSAtTWF0aC5zcXJ0KHgqeCt5KnkpO1xyXG4gICAgICB4ID0gMDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB4ID0gdG91Y2hlc1swXS5wYWdlWDtcclxuICAgICAgeSA9IHRvdWNoZXNbMF0ucGFnZVk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB4LFxyXG4gICAgICB5XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgYWN0aW9ucykge1xyXG4gICAgdGhpcy5hY3Rpb25zID0gYWN0aW9ucyB8fCB7fTtcclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLmRvYyA9IGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudDtcclxuICAgIHRoaXMud25kID0gdGhpcy5kb2MuZGVmYXVsdFZpZXc7XHJcbiAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7XHJcbiAgICAgIGNvbnRleHRNZW51OiB0aGlzLmNvbnRleHRNZW51LmJpbmQodGhpcyksXHJcblxyXG4gICAgICBtb3VzZURvd246IHRoaXMubW91c2VEb3duLmJpbmQodGhpcyksXHJcbiAgICAgIG1vdXNlTW92ZTogdGhpcy5tb3VzZU1vdmUuYmluZCh0aGlzKSxcclxuICAgICAgbW91c2VVcDogdGhpcy5tb3VzZVVwLmJpbmQodGhpcyksXHJcbiAgICAgIG1vdXNlV2hlZWw6IHRoaXMubW91c2VXaGVlbC5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAgbW91c2VNb3ZlRG9jOiB0aGlzLm1vdXNlTW92ZURvYy5iaW5kKHRoaXMpLFxyXG4gICAgICBtb3VzZVVwRG9jOiB0aGlzLm1vdXNlVXBEb2MuYmluZCh0aGlzKSxcclxuXHJcbiAgICAgIGNsaWNrOiB0aGlzLmNsaWNrLmJpbmQodGhpcyksXHJcbiAgICAgIGRibGNsaWNrOiB0aGlzLmRibGNsaWNrLmJpbmQodGhpcyksXHJcblxyXG4gICAgICB0b3VjaFN0YXJ0OiB0aGlzLnRvdWNoU3RhcnQuYmluZCh0aGlzKSxcclxuICAgICAgdG91Y2hNb3ZlOiB0aGlzLnRvdWNoTW92ZS5iaW5kKHRoaXMpLFxyXG4gICAgICB0b3VjaEVuZDogdGhpcy50b3VjaEVuZC5iaW5kKHRoaXMpLFxyXG5cclxuICAgICAga2V5RG93bjogdGhpcy5rZXlEb3duLmJpbmQodGhpcyksXHJcbiAgICAgIGtleVByZXNzOiB0aGlzLmtleVByZXNzLmJpbmQodGhpcyksXHJcbiAgICAgIGtleVVwOiB0aGlzLmtleVVwLmJpbmQodGhpcylcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCdjb250ZXh0bWVudScsIHRoaXMuYmluZHMuY29udGV4dE1lbnUpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5vbignbW91c2Vkb3duJywgdGhpcy5iaW5kcy5tb3VzZURvd24pO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCdtb3VzZW1vdmUnLCB0aGlzLmJpbmRzLm1vdXNlTW92ZSk7XHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ21vdXNldXAnLCB0aGlzLmJpbmRzLm1vdXNlVXApO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCdtb3VzZXdoZWVsJywgdGhpcy5iaW5kcy5tb3VzZVdoZWVsKTtcclxuXHJcbiAgICAkKHRoaXMuZG9jKS5vbignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5tb3VzZU1vdmVEb2MpO1xyXG4gICAgJCh0aGlzLmRvYykub24oJ21vdXNldXAnLCB0aGlzLmJpbmRzLm1vdXNlVXBEb2MpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudC5vbignY2xpY2snLCB0aGlzLmJpbmRzLmNsaWNrKTtcclxuICAgIHRoaXMuZWxlbWVudC5vbignZGJsY2xpY2snLCB0aGlzLmJpbmRzLmRibGNsaWNrKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ3RvdWNoc3RhcnQnLCB0aGlzLmJpbmRzLnRvdWNoU3RhcnQpO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9uKCd0b3VjaG1vdmUnLCB0aGlzLmJpbmRzLnRvdWNoTW92ZSk7XHJcbiAgICB0aGlzLmVsZW1lbnQub24oJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy50b3VjaEVuZCk7XHJcblxyXG4gICAgJCh0aGlzLnduZCkub24oJ2tleWRvd24nLCB0aGlzLmJpbmRzLmtleURvd24pO1xyXG4gICAgJCh0aGlzLnduZCkub24oJ2tleXByZXNzJywgdGhpcy5iaW5kcy5rZXlQcmVzcyk7XHJcbiAgICAkKHRoaXMud25kKS5vbigna2V5dXAnLCB0aGlzLmJpbmRzLmtleVVwKTtcclxuICB9XHJcblxyXG4gIGFkZEFjdGlvbihhY3Rpb24sIHR5cGUsIGNvZGUsIGZsYWdzKSB7XHJcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYoIXRoaXMuYWN0aW9uc1t0eXBlXSkge1xyXG4gICAgICB0aGlzLmFjdGlvbnNbdHlwZV0gPSB7fTtcclxuICAgIH1cclxuICAgIGlmKCF0aGlzLmFjdGlvbnNbdHlwZV1bY29kZV0pIHtcclxuICAgICAgdGhpcy5hY3Rpb25zW3R5cGVdW2NvZGVdID0ge31cclxuICAgIH1cclxuICAgIGlmKCF0aGlzLmFjdGlvbnNbdHlwZV1bY29kZV1bZmxhZ3NdKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uc1t0eXBlXVtjb2RlXVtmbGFnc10gPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uc1t0eXBlXVtjb2RlXVtmbGFnc10ucHVzaChhY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aW9ucyh0eXBlLCBjb2RlLCBmbGFncykge1xyXG4gICAgcmV0dXJuICgodGhpcy5hY3Rpb25zW3R5cGVdIHx8IHt9KVtjb2RlXSB8fCB7fSlbZmxhZ3NdIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZmlyZUFjdGlvbnMoYWN0aW9ucywgZSwgZGF0YSkge1xyXG4gICAgZm9yKGxldCBhY3Rpb24gb2YgYWN0aW9ucykge1xyXG4gICAgICBhY3Rpb24oZSwgZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb250ZXh0TWVudShlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnMoJ2NvbnRleHRtZW51JywgZS5idXR0b24sIGZsYWdzKSwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZURvd24oZSkge1xyXG4gICAgaWYodGhpcy5waWNrZWQpIHtcclxuICAgICAgdGhpcy5tb3VzZVVwRG9jKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnMoJ21vdXNlZG93bicsIGUuYnV0dG9uLCBmbGFncyksIGUpO1xyXG4gICAgICB0aGlzLnBpY2tlZCA9IHtcclxuICAgICAgICB4OiBlLnBhZ2VYLFxyXG4gICAgICAgIHk6IGUucGFnZVksXHJcbiAgICAgICAgYWN0aW9uczogdGhpcy5nZXRBY3Rpb25zKCdtb3VzZWRyYWcnLCBlLmJ1dHRvbiwgZmxhZ3MpXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5waWNrZWQuYWN0aW9ucywgZSwge1xyXG4gICAgICAgIHN0YXRlOiAnc3RhcnQnXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VNb3ZlKGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucygnbW91c2Vtb3ZlJywgZS5idXR0b24sIGZsYWdzKSwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZU1vdmVEb2MoZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkICYmIHRoaXMucGlja2VkKSB7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5waWNrZWQuYWN0aW9ucywgZSwge1xyXG4gICAgICAgIHN0YXRlOiAnbW92ZScsXHJcbiAgICAgICAgZHg6IGUucGFnZVgtdGhpcy5waWNrZWQueCxcclxuICAgICAgICBkeTogZS5wYWdlWS10aGlzLnBpY2tlZC55XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnBpY2tlZCA9IHtcclxuICAgICAgICB4OiBlLnBhZ2VYLFxyXG4gICAgICAgIHk6IGUucGFnZVksXHJcbiAgICAgICAgYWN0aW9uczogdGhpcy5waWNrZWQuYWN0aW9uc1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VVcChlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKTtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnMoJ21vdXNldXAnLCBlLmJ1dHRvbiwgZmxhZ3MpLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1vdXNlVXBEb2MoZSkge1xyXG4gICAgaWYodGhpcy5waWNrZWQpIHtcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLnBpY2tlZC5hY3Rpb25zLCBlLCB7XHJcbiAgICAgICAgc3RhdGU6ICdlbmQnXHJcbiAgICAgIH0pO1xyXG4gICAgICBkZWxldGUgdGhpcy5waWNrZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb3VzZVdoZWVsKGUpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCkge1xyXG4gICAgICBjb25zdCBmbGFncyA9IEV2ZW50c1RvQWN0aW9ucy5nZXRFdmVudEZsYWdzKGUpO1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMuZ2V0QWN0aW9ucygnbW91c2V3aGVlbCcsIDAsIGZsYWdzKSwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGlja3MoZSwgdHlwZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSk7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKHR5cGUsIGUuYnV0dG9uLCBmbGFncyksIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpY2soZSkge1xyXG4gICAgdGhpcy5jbGlja3MoZSwgJ2NsaWNrJyk7XHJcbiAgfVxyXG5cclxuICBkYmxjbGljayhlKSB7XHJcbiAgICB0aGlzLmNsaWNrcyhlLCAnZGJsY2xpY2snKTtcclxuICB9XHJcblxyXG4gIHRvdWNoUGljayhlLCBmbGFncywgdG91Y2hlcykge1xyXG4gICAgdGhpcy50b3VjaFBpY2tlZCA9IHtcclxuICAgICAgLi4uRXZlbnRzVG9BY3Rpb25zLmdldFBvc2l0aW9uKHRvdWNoZXMpLFxyXG4gICAgICBhY3Rpb25zOiB0aGlzLmdldEFjdGlvbnMoJ3RvdWNoZHJhZycsIHRvdWNoZXMubGVuZ3RoLCBmbGFncyksXHJcbiAgICAgIGNvZGU6IHRvdWNoZXMubGVuZ3RoLFxyXG4gICAgICBmbGFnc1xyXG4gICAgfTtcclxuICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy50b3VjaFBpY2tlZC5hY3Rpb25zLCBlLCB7XHJcbiAgICAgIHN0YXRlOiAnc3RhcnQnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvdWNoU3RhcnQoZSkge1xyXG4gICAgaWYodGhpcy50b3VjaFBpY2tlZCkge1xyXG4gICAgICB0aGlzLnRvdWNoRW5kKGUpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSksIHRvdWNoZXMgPSBlLnRvdWNoZXMgfHwgZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXM7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKCd0b3VjaHN0YXJ0JywgdG91Y2hlcy5sZW5ndGgsIGZsYWdzKSwgZSk7XHJcbiAgICAgIHRoaXMudG91Y2hQaWNrKGUsIGZsYWdzLCB0b3VjaGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvdWNoTW92ZShlKSB7XHJcbiAgICBpZih0aGlzLmVuYWJsZWQpIHtcclxuICAgICAgY29uc3QgZmxhZ3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0RXZlbnRGbGFncyhlKSwgdG91Y2hlcyA9IGUudG91Y2hlcyB8fCBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcztcclxuICAgICAgdGhpcy5maXJlQWN0aW9ucyh0aGlzLmdldEFjdGlvbnMoJ3RvdWNobW92ZScsIHRvdWNoZXMubGVuZ3RoLCBmbGFncyksIGUpO1xyXG4gICAgICBpZih0aGlzLnRvdWNoUGlja2VkKSB7XHJcbiAgICAgICAgaWYodGhpcy50b3VjaFBpY2tlZC5jb2RlPT09dG91Y2hlcy5sZW5ndGggJiYgdGhpcy50b3VjaFBpY2tlZC5mbGFncz09PWZsYWdzKSB7XHJcbiAgICAgICAgICBjb25zdCBwb3MgPSBFdmVudHNUb0FjdGlvbnMuZ2V0UG9zaXRpb24odG91Y2hlcyk7XHJcbiAgICAgICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMudG91Y2hQaWNrZWQuYWN0aW9ucywgZSwge1xyXG4gICAgICAgICAgICBzdGF0ZTogJ21vdmUnLFxyXG4gICAgICAgICAgICBkeDogcG9zLngtdGhpcy50b3VjaFBpY2tlZC54LFxyXG4gICAgICAgICAgICBkeTogcG9zLnktdGhpcy50b3VjaFBpY2tlZC55XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMudG91Y2hQaWNrZWQgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMudG91Y2hQaWNrZWQsXHJcbiAgICAgICAgICAgIC4uLnBvc1xyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRvdWNoRW5kKGUpO1xyXG4gICAgICAgICAgdGhpcy50b3VjaFBpY2soZSwgZmxhZ3MsIHRvdWNoZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG91Y2hFbmQoZSkge1xyXG4gICAgaWYodGhpcy50b3VjaFBpY2tlZCkge1xyXG4gICAgICB0aGlzLmZpcmVBY3Rpb25zKHRoaXMudG91Y2hQaWNrZWQuYWN0aW9ucywgZSwge1xyXG4gICAgICAgIHN0YXRlOiAnZW5kJ1xyXG4gICAgICB9KTtcclxuICAgICAgZGVsZXRlIHRoaXMudG91Y2hQaWNrZWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBrZXkoZSwgdHlwZSkge1xyXG4gICAgaWYodGhpcy5lbmFibGVkKSB7XHJcbiAgICAgIGNvbnN0IGZsYWdzID0gRXZlbnRzVG9BY3Rpb25zLmdldEV2ZW50RmxhZ3MoZSk7XHJcbiAgICAgIHRoaXMuZmlyZUFjdGlvbnModGhpcy5nZXRBY3Rpb25zKHR5cGUsIGUua2V5Q29kZSwgZmxhZ3MpLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGtleURvd24oZSkge1xyXG4gICAgdGhpcy5rZXkoZSwgJ2tleWRvd24nKTtcclxuICB9XHJcblxyXG4gIGtleVByZXNzKGUpIHtcclxuICAgIHRoaXMua2V5KGUsICdrZXlwcmVzcycpO1xyXG4gIH1cclxuXHJcbiAga2V5VXAoZSkge1xyXG4gICAgdGhpcy5rZXkoZSwgJ2tleXVwJyk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5lbGVtZW50Lm9mZignY29udGV4dG1lbnUnLCB0aGlzLmJpbmRzLmNvbnRleHRNZW51KTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCdtb3VzZWRvd24nLCB0aGlzLmJpbmRzLm1vdXNlRG93bik7XHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCdtb3VzZW1vdmUnLCB0aGlzLmJpbmRzLm1vdXNlTW92ZSk7XHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5tb3VzZVVwKTtcclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ21vdXNld2hlZWwnLCB0aGlzLmJpbmRzLm1vdXNlV2hlZWwpO1xyXG5cclxuICAgICQodGhpcy5kb2MpLm9mZignbW91c2Vtb3ZlJywgdGhpcy5iaW5kcy5tb3VzZU1vdmVEb2MpO1xyXG4gICAgJCh0aGlzLmRvYykub2ZmKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5tb3VzZVVwRG9jKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCdjbGljaycsIHRoaXMuYmluZHMuY2xpY2spO1xyXG4gICAgdGhpcy5lbGVtZW50Lm9mZignZGJsY2xpY2snLCB0aGlzLmJpbmRzLmRibGNsaWNrKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub2ZmKCd0b3VjaHN0YXJ0JywgdGhpcy5iaW5kcy50b3VjaFN0YXJ0KTtcclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ3RvdWNobW92ZScsIHRoaXMuYmluZHMudG91Y2hNb3ZlKTtcclxuICAgIHRoaXMuZWxlbWVudC5vZmYoJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy50b3VjaEVuZCk7XHJcblxyXG4gICAgJCh0aGlzLnduZCkub2ZmKCdrZXlkb3duJywgdGhpcy5iaW5kcy5rZXlEb3duKTtcclxuICAgICQodGhpcy53bmQpLm9mZigna2V5cHJlc3MnLCB0aGlzLmJpbmRzLmtleVByZXNzKTtcclxuICAgICQodGhpcy53bmQpLm9mZigna2V5dXAnLCB0aGlzLmJpbmRzLmtleVVwKTtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0V2ZW50c1RvQWN0aW9ucy5qcyIsIlxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGdWxsU2NyZWVuIHtcclxuXHJcblx0c3RhdGljIF9oYXNXZWJraXRGdWxsU2NyZWVuXHQ9ICEhZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbjtcclxuXHRzdGF0aWMgX2hhc01vekZ1bGxTY3JlZW5cdD0gISFkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuO1xyXG5cdHN0YXRpYyBfaGFzTXNGdWxsc2NyZWVuID0gISFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbjtcclxuXHJcblx0c3RhdGljIGF2YWlsYWJsZSgpIHtcclxuXHRcdHJldHVybiBGdWxsU2NyZWVuLl9oYXNXZWJraXRGdWxsU2NyZWVuIHx8IEZ1bGxTY3JlZW4uX2hhc01vekZ1bGxTY3JlZW4gfHwgRnVsbFNjcmVlbi5faGFzTXNGdWxsc2NyZWVuO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFjdGl2YXRlZCgpIHtcclxuXHRcdGlmKEZ1bGxTY3JlZW4uX2hhc1dlYmtpdEZ1bGxTY3JlZW4pIHtcclxuXHRcdFx0cmV0dXJuIGRvY3VtZW50LndlYmtpdElzRnVsbFNjcmVlbjtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoRnVsbFNjcmVlbi5faGFzTW96RnVsbFNjcmVlbikge1xyXG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQubW96RnVsbFNjcmVlbjtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYoRnVsbFNjcmVlbi5faGFzTXNGdWxsc2NyZWVuKSB7XHJcblx0XHRcdHJldHVybiAhIWRvY3VtZW50Lm1zRnVsbHNjcmVlbkVsZW1lbnQ7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5hc3NlcnQoZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgaGFuZGxlcikge1xyXG5cdFx0aWYgKGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcikge1xyXG5cdFx0ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignd2Via2l0ZnVsbHNjcmVlbmNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdCAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vemZ1bGxzY3JlZW5jaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHQgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmdWxsc2NyZWVuY2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0ICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignTVNGdWxsc2NyZWVuQ2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c3RhdGljIHJlbW92ZUV2ZW50TGlzdGVuZXIoZWxlbWVudCwgaGFuZGxlcikge1xyXG5cdFx0aWYgKGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcikge1xyXG5cdFx0ICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2Via2l0ZnVsbHNjcmVlbmNoYW5nZScsIGhhbmRsZXIsIGZhbHNlKTtcclxuXHRcdCAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vemZ1bGxzY3JlZW5jaGFuZ2UnLCBoYW5kbGVyLCBmYWxzZSk7XHJcblx0XHQgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdmdWxsc2NyZWVuY2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0ICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignTVNGdWxsc2NyZWVuQ2hhbmdlJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c3RhdGljIHJlcXVlc3QoZWxlbWVudCkge1xyXG5cdFx0ZWxlbWVudFx0PSBlbGVtZW50XHR8fCBkb2N1bWVudC5ib2R5O1xyXG5cdFx0aWYoRnVsbFNjcmVlbi5faGFzV2Via2l0RnVsbFNjcmVlbikge1xyXG5cdFx0XHRlbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsU2NyZWVuKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKEZ1bGxTY3JlZW4uX2hhc01vekZ1bGxTY3JlZW4pIHtcclxuXHRcdFx0ZWxlbWVudC5tb3pSZXF1ZXN0RnVsbFNjcmVlbigpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSBpZihGdWxsU2NyZWVuLl9oYXNNc0Z1bGxzY3JlZW4pIHtcclxuXHRcdFx0ZWxlbWVudC5tc1JlcXVlc3RGdWxsc2NyZWVuKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5hc3NlcnQoZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c3RhdGljIGNhbmNlbCgpIHtcclxuXHRcdGlmKEZ1bGxTY3JlZW4uX2hhc1dlYmtpdEZ1bGxTY3JlZW4pIHtcclxuXHRcdFx0ZG9jdW1lbnQud2Via2l0Q2FuY2VsRnVsbFNjcmVlbigpO1xyXG5cdFx0fWVsc2UgaWYoRnVsbFNjcmVlbi5faGFzTW96RnVsbFNjcmVlbikge1xyXG5cdFx0XHRkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIGlmKEZ1bGxTY3JlZW4uX2hhc01zRnVsbHNjcmVlbikge1xyXG5cdFx0XHRkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0Y29uc29sZS5hc3NlcnQoZmFsc2UpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvRnVsbFNjcmVlbi5qcyIsImltcG9ydCB7JCwgaHRtbDJjYW52YXN9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgSW1hZ2VCYXNlIGZyb20gJy4vSW1hZ2VCYXNlJztcclxuaW1wb3J0IEJhc2VNYXRoVXRpbHMgZnJvbSAnLi9CYXNlTWF0aFV0aWxzJztcclxuaW1wb3J0IERvbTJJbWFnZSBmcm9tICcuL0RvbTJJbWFnZSc7XHJcbmltcG9ydCBEb2NNb3VzZVNpbXVsYXRvciBmcm9tICcuL0RvY01vdXNlU2ltdWxhdG9yJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEludGVyYWN0aXZlSW1hZ2UgZXh0ZW5kcyBJbWFnZUJhc2Uge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgc3JjLCBjYWNoZSwgaW5qZWN0b3IpIHtcclxuICAgIHN1cGVyKGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKTtcclxuXHJcbiAgICB0aGlzLmlJZCA9ICdpJytCYXNlTWF0aFV0aWxzLmdldFVuaXF1ZSgpO1xyXG4gICAgY29uc3QgakZyYW1lID0gJCgnPGlmcmFtZSBpZD1cIicrdGhpcy5pSWQrJ1wiIHNyYz1cIicgKyBzcmMgKyAnXCIgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IC0xMDAwcHg7XCI+PC9pZnJhbWU+Jyk7XHJcbiAgICAkKHRoaXMuZG9jLmJvZHkpLmFwcGVuZChqRnJhbWUpO1xyXG4gICAgdGhpcy5mcmFtZSA9IGpGcmFtZVswXTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge307XHJcblxyXG4gICAgaWYoaW5qZWN0b3IpIHtcclxuICAgICAgaW5qZWN0b3IodGhpcy5mcmFtZS5jb250ZW50V2luZG93KTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLmRvYy5pbXBsZW1lbnRhdGlvbi5oYXNGZWF0dXJlKCd3d3cuaHR0cDovL3czLm9yZy9UUi9TVkcxMS9mZWF0dXJlI0V4dGVuc2liaWxpdHknLCAnMS4xJykpIHsgLy8gc3ZnIGZvcmVpZ25PYmplY3QgcmVuZGVyZXJcclxuICAgICAgdGhpcy5pbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgICB0aGlzLmJpbmRzLmltYWdlTG9hZCA9ICgpPT4ge1xyXG4gICAgICAgIHRoaXMucmVuZGVySW1hZ2UodGhpcy5pbWFnZSk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hSZW5kZXIoKTtcclxuICAgICAgfTtcclxuICAgICAgJCh0aGlzLmltYWdlKS5vbignbG9hZCcsIHRoaXMuYmluZHMuaW1hZ2VMb2FkKTtcclxuICAgICAgdGhpcy5zdmdSZW5kZXIgPSBuZXcgRG9tMkltYWdlKHRoaXMuZnJhbWUuY29udGVudFdpbmRvdywgdGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQsIGNhY2hlKTtcclxuICAgIH0gLy8gb3RoZXJ3aXNlIC0gaHRtbDJjYW52YXNcclxuXHJcbiAgICB0aGlzLmJpbmRzLmZyYW1lTG9hZCA9ICgpPT4ge1xyXG4gICAgICBpZih+dGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQudGl0bGUuaW5kZXhPZignNDA0JykpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0UmVuZGVyID0gKCk9PiB7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlck5vdEZvdW5kUGFnZSgpO1xyXG4gICAgICAgICAgdGhpcy5maW5pc2hSZW5kZXIoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgICBpZih0aGlzLmZyYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkdGggPSAkKHRoaXMuZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkpLndpZHRoKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gJCh0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5KS5oZWlnaHQoKTtcclxuICAgICAgICAgICAgakZyYW1lLmNzcygnd2lkdGgnLCB0aGlzLndpZHRoKydweCcpLmNzcygnaGVpZ2h0JywgdGhpcy5oZWlnaHQrJ3B4Jyk7XHJcbiAgICAgICAgICAgIGpGcmFtZS5vZmZzZXQoe2xlZnQ6IC10aGlzLndpZHRoLTEwMCwgdG9wOiAwfSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuc3ZnUmVuZGVyKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaW11bGF0b3IgPSBuZXcgRG9jTW91c2VTaW11bGF0b3IoakZyYW1lLCB0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LCB0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2ltdWxhdG9yLmFkZERvY0NoYW5nZUNsYih0aGlzLmZpbmlzaExvYWQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdGFydFJlbmRlciA9ICgpPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICAkKHRoaXMuZnJhbWUuY29udGVudFdpbmRvdykub24oJ2xvYWQnLCB0aGlzLmJpbmRzLmZyYW1lTG9hZCk7XHJcbiAgfVxyXG5cclxuICBnZXRTaW11bGF0ZWREb2MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQ7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBpZih0aGlzLnN2Z1JlbmRlcikge1xyXG4gICAgICB0aGlzLnN2Z1JlbmRlci50b1N2Zyh0aGlzLnNpbXVsYXRvci5lbGVtZW50LCB7aGVpZ2h0OiB0aGlzLmhlaWdodCsncHgnLCB3aWR0aDogdGhpcy53aWR0aCsncHgnfSlcclxuICAgICAgICAudGhlbigoZGF0YVVybCk9PiB7XHJcbiAgICAgICAgICB0aGlzLmltYWdlLnNyYyA9IGRhdGFVcmw7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKGVycm9yKT0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RvbTJJbWFnZTogJywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJCbGFua1BhZ2UoKTtcclxuICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaHRtbDJjYW52YXModGhpcy5mcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keSwge3RpbWVvdXQ6IDMwMDAwfSkuXHJcbiAgICAgICAgdGhlbigoY2FudmFzKT0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVySW1hZ2UoY2FudmFzKTtcclxuICAgICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgJCh0aGlzLmltYWdlKS5vZmYoJ2xvYWQnLCB0aGlzLmJpbmRzLmltYWdlTG9hZCk7XHJcbiAgICAkKHRoaXMuZnJhbWUuY29udGVudFdpbmRvdykub2ZmKCdsb2FkJywgdGhpcy5iaW5kcy5mcmFtZUxvYWQpO1xyXG4gICAgJCh0aGlzLmRvYy5ib2R5KS5maW5kKCcjJyt0aGlzLmlJZCkucmVtb3ZlKCk7XHJcbiAgICBpZih0aGlzLmltYWdlKSB7XHJcbiAgICAgIHRoaXMuaW1hZ2Uuc3JjID0gJyc7XHJcbiAgICAgIGRlbGV0ZSB0aGlzLmltYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mcmFtZS5zcmMgPSAnJztcclxuICAgIGRlbGV0ZSB0aGlzLmZyYW1lO1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgc2ltdWxhdGUoZSwgZG9jLCB4LCB5KSB7XHJcbiAgICBpZih0aGlzLnNpbXVsYXRvcikge1xyXG4gICAgICB0aGlzLnNpbXVsYXRvci5zaW11bGF0ZShlLCBkb2MsIHgsIHkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvSW50ZXJhY3RpdmVJbWFnZS5qcyIsImltcG9ydCB7JCwgdHJ9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgR3JhcGhVdGlscyBmcm9tICcuL0dyYXBoVXRpbHMnO1xyXG5pbXBvcnQgTWF0aFV0aWxzIGZyb20gJy4vTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvYWRpbmdBbmltYXRpb24ge1xyXG5cclxuICBkeSh0LHkpIHtcclxuICAgIGNvbnN0IHc9eVswXSwgYT15WzFdO1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgLXRoaXMuZypNYXRoLmNvcyhhKSxcclxuICAgICAgd1xyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGludGVncmF0ZShUKSB7XHJcbiAgICBsZXQgdD0wLCBkdD10aGlzLnAuZHQsIG9zID0gdGhpcy5vcztcclxuICAgIHdoaWxlKHQ8VCkge1xyXG4gICAgICBpZih0K2R0PlQpIHtcclxuICAgICAgICBkdD1ULXQ7XHJcbiAgICAgIH1cclxuICAgICAgb3M9TWF0aFV0aWxzLnJrNCh0aGlzLmR5LmJpbmQoe2c6IHRoaXMucC5nfSksIDAsIGR0LCBvcyk7XHJcbiAgICAgIHQrPWR0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9zO1xyXG4gIH1cclxuXHJcbiAgY2FsY1RpbWVUbyh0YXJnZXQpIHtcclxuICAgIGxldCB0PTAsIGR0PXRoaXMucC5kdCwgb3MgPSB0aGlzLm9zO1xyXG4gICAgd2hpbGUoTWF0aC5hYnMob3NbMV0tdGFyZ2V0KT4xZS00KSB7XHJcbiAgICAgIGNvbnN0IG5vcz1NYXRoVXRpbHMucms0KHRoaXMuZHkuYmluZCh7ZzogdGhpcy5wLmd9KSwgMCwgZHQsIG9zKTtcclxuICAgICAgaWYobm9zWzBdPDAgJiYgbm9zWzFdPHRhcmdldCB8fCBub3NbMF0+MCAmJiBub3NbMV0+dGFyZ2V0KSB7XHJcbiAgICAgICAgZHQvPTI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgb3MgPSBub3M7XHJcbiAgICAgICAgdCs9ZHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKFQpIHtcclxuICAgIHRoaXMub3MgPSB0aGlzLmludGVncmF0ZShUKTtcclxuXHJcbiAgICB0aGlzLnQrPVRcclxuICAgIGlmKHRoaXMudD49dGhpcy5wLnVwZGF0ZUludGVydmFsKSB7XHJcbiAgICAgIHRoaXMudCA9IDA7XHJcbiAgICAgIGNvbnN0IHIgPSAwLjA2Kk1hdGgubWluKHRoaXMuYy53aWR0aCwgdGhpcy5jLmhlaWdodCksXHJcbiAgICAgICAgICAgIGEgPSB0aGlzLm9zWzFdLFxyXG4gICAgICAgICAgICB4MCA9IDAuNSp0aGlzLmMud2lkdGgsXHJcbiAgICAgICAgICAgIHkwID0gMC41KnRoaXMuYy5oZWlnaHQsXHJcbiAgICAgICAgICAgIGN0eCA9IHRoaXMuY3R4O1xyXG5cclxuICAgICAgY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLmMud2lkdGgsIHRoaXMuYy5oZWlnaHQpO1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICAgIGN0eC5maWxsU3R5bGUgPSBHcmFwaFV0aWxzLmNvbG9yMlJnYmEodGhpcy5wLmNvbG9yLDEpO1xyXG4gICAgICBjdHgucmVjdCgwLCAwLCB0aGlzLmMud2lkdGgsIHRoaXMuYy5oZWlnaHQpO1xyXG4gICAgICBjdHguZmlsbCgpO1xyXG5cclxuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICBjdHguc2hhZG93Qmx1ciA9IDUwO1xyXG4gICAgICBjdHguZmlsbFN0eWxlID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKEdyYXBoVXRpbHMuaW52ZXJzZUNvbG9yKHRoaXMucC5jb2xvciwwLjkpLE1hdGguYWJzKHRoaXMub3NbMF0vNi4zNikpO1xyXG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBHcmFwaFV0aWxzLmNvbG9yMlJnYmEoR3JhcGhVdGlscy5pbnZlcnNlQ29sb3IodGhpcy5wLmNvbG9yLDEpLDAuOSk7XHJcbiAgICAgIGN0eC5zaGFkb3dPZmZzZXRYID0gMDtcclxuICAgICAgY3R4LnNoYWRvd09mZnNldFkgPSAwO1xyXG4gICAgICBjdHguZm9udD0nYm9sZCAnK01hdGgucm91bmQoMC4yNSpyKSsncHggQXJpYWwnO1xyXG4gICAgICBjdHgudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgIGN0eC50ZXh0QmFzZWxpbmUgPSAnbWlkZGxlJztcclxuICAgICAgY3R4LmZpbGxUZXh0KHRyKCdMb2FkaW5nLi4uJykseDAseTApO1xyXG5cclxuICAgICAgY29uc3QgcHMgPSAxMCwgZGE9MipNYXRoLlBJL3BzOy8vMi41Kl9yL3JcclxuICAgICAgY3R4LnNoYWRvd0NvbG9yID0gR3JhcGhVdGlscy5jb2xvcjJSZ2JhKEdyYXBoVXRpbHMuaW52ZXJzZUNvbG9yKHRoaXMucC5jb2xvciwxKSwwLjcpO1xyXG4gICAgICBmb3IobGV0IGk9MCwgX2E9YSwgX3I9MC4yKnI7IGk8cHM7ICsraSwgX3IqPTAuOSwgX2ErPWRhKSB7XHJcbiAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIGN0eC5maWxsU3R5bGUgPSBHcmFwaFV0aWxzLmNvbG9yMlJnYmEoR3JhcGhVdGlscy5pbnZlcnNlQ29sb3IodGhpcy5wLmNvbG9yLChwcy1pKS9wcyksMC43Kihwcy1pKS9wcyk7XHJcbiAgICAgICAgY29uc3QgY3g9eDArcipNYXRoLmNvcyhfYSksIGN5PXkwLXIqTWF0aC5zaW4oX2EpLCBueD14MCtyKk1hdGguY29zKF9hK2RhKSwgbnk9eTAtcipNYXRoLnNpbihfYStkYSk7XHJcbiAgICAgICAgY3R4LnNoYWRvd09mZnNldFggPSAwLjIqKG54LWN4KTtcclxuICAgICAgICBjdHguc2hhZG93T2Zmc2V0WSA9IDAuMioobnktY3kpO1xyXG4gICAgICAgIGN0eC5hcmMoY3gsIGN5LCBfciwgMCwgTWF0aC5QSSoyLCAxKTtcclxuICAgICAgICBjdHguZmlsbCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMub25DaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuYywgdGhpcy5wLmNvbG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SW1hZ2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuYy53aWR0aCA9IDA7XHJcbiAgICB0aGlzLmMuaGVpZ2h0ID0gMDtcclxuICAgIGRlbGV0ZSB0aGlzLmN0eDtcclxuICAgIGRlbGV0ZSB0aGlzLmM7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTcHJpdGUobikge1xyXG4gICAgY29uc3QgYyA9ICQoJzxjYW52YXMgd2lkdGg9XCInK3RoaXMuYy53aWR0aCpuKydcIiBoZWlnaHQ9XCInK3RoaXMuYy5oZWlnaHQrJ1wiPjwvY2FudmFzPicpWzBdLCBjdHggPSBjLmdldENvbnRleHQoJzJkJyksXHJcbiAgICB0ID0gdGhpcy5jYWxjVGltZVRvKHRoaXMub3NbMV0rTWF0aC5zaWduKHRoaXMub3NbMF0pKjIqTWF0aC5QSSksIGR0PXQvKG4rMSk7XHJcbiAgICBjb25zdCB7dXBkYXRlSW50ZXJ2YWx9ID0gdGhpcy5wO1xyXG4gICAgdGhpcy5wLnVwZGF0ZUludGVydmFsID0gMDtcclxuICAgIGZvcihsZXQgaT0wOyBpPG47ICsraSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZShkdCk7XHJcbiAgICAgIGN0eC5kcmF3SW1hZ2UodGhpcy5jLCBpKnRoaXMuYy53aWR0aCwgMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnAudXBkYXRlSW50ZXJ2YWwgPSB1cGRhdGVJbnRlcnZhbDtcclxuICAgIHJldHVybiBjO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3Iod2lkdGgsIGhlaWdodCwgY29sb3IpIHtcclxuICAgIGNvbnN0IGpDID0gJCgnPGNhbnZhcyB3aWR0aD1cIicrd2lkdGgrJ1wiIGhlaWdodD1cIicraGVpZ2h0KydcIj48L2NhbnZhcz4nKTtcclxuICAgIHRoaXMuYyA9IGpDWzBdO1xyXG4gICAgdGhpcy5wID0ge1xyXG4gICAgICBnOiA5LjgsXHJcbiAgICAgIGR0OiAxLzYwLFxyXG4gICAgICBjb2xvcixcclxuICAgICAgdXBkYXRlSW50ZXJ2YWw6IDAuMjVcclxuICAgIH07XHJcbiAgICB0aGlzLmN0eCA9IHRoaXMuYy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgdGhpcy5vcyA9IFstMiwgTWF0aC5QSS8yXTtcclxuICAgIHRoaXMudCA9IHRoaXMucC51cGRhdGVJbnRlcnZhbDtcclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0xvYWRpbmdBbmltYXRpb24uanMiLCJpbXBvcnQgeyR9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9hZGluZ0NvbnRyb2xsZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aWV3LCBzaG93UHJvZ3Jlc3M9dHJ1ZSwgbG9hZGluZ01zZz11bmRlZmluZWQpIHtcclxuICAgIHRoaXMudmlldyA9IHZpZXc7XHJcbiAgICB0aGlzLnByb2dyZXNzID0gMDtcclxuICAgIHRoaXMuc2hvd1Byb2dyZXNzID0gc2hvd1Byb2dyZXNzO1xyXG4gICAgdGhpcy5nZXRMb2FkaW5nTXNnID0gbG9hZGluZ01zZyB8fCBMb2FkaW5nQ29udHJvbGxlci5kZWZhdWx0TG9hZGluZ01zZztcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRlZmF1bHRMb2FkaW5nTXNnKHByb2dyZXNzKSB7XHJcbiAgICByZXR1cm4gWydQbGVhc2Ugd2FpdC4uLiB0aGUgQXBwbGljYXRpb24gaXMgTG9hZGluZzogJywgcHJvZ3Jlc3MsICclJ10uam9pbignJyk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5zaG93UHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgZGVsZXRlIHRoaXMudmlldztcclxuICB9XHJcblxyXG4gIHNldFByb2dyZXNzKHYpIHtcclxuICAgIHRoaXMucHJvZ3Jlc3MgPSB2O1xyXG4gICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWaWV3KCkge1xyXG4gICAgaWYodGhpcy52aWV3KSB7XHJcblxyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZExvYWRpbmdQcm9ncmVzcycsIHtcclxuICAgICAgICBlbmFibGU6IHRydWUsXHJcbiAgICAgICAgdmlzaWJsZTogdGhpcy5zaG93UHJvZ3Jlc3MsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgndHh0TG9hZGluZ1Byb2dyZXNzJywge1xyXG4gICAgICAgIHZhbHVlOiB0aGlzLmdldExvYWRpbmdNc2codGhpcy5wcm9ncmVzcyksXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGZvcihsZXQgbmFtZSBvZiB0aGlzLnZpZXcuZ2V0TGlua3MoKSkge1xyXG4gICAgICAgIHRoaXMudmlldy5zZXRTdGF0ZShuYW1lLCB7XHJcbiAgICAgICAgICBlbmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgIGFjdGl2ZTogZmFsc2VcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy52aWV3LnNldFN0YXRlKCdpbnBQYWdlcycsIHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMudmlldy5zZXRTdGF0ZSgnaW5wUGFnZScsIHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGVuYWJsZTogZmFsc2UsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL0xvYWRpbmdDb250cm9sbGVyLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEV2ZW50Q29udmVydGVyIGZyb20gJy4vRXZlbnRDb252ZXJ0ZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW91c2VFdmVudENvbnZlcnRlciBleHRlbmRzIEV2ZW50Q29udmVydGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIGVsZW1lbnQpIHtcclxuICAgIHN1cGVyKHduZCwgZG9jKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgY29udmVydDogdGhpcy5jb252ZXJ0LmJpbmQodGhpcylcclxuICAgIH07XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub24oJ21vdXNlbW92ZSBtb3VzZWRvd24gbW91c2VvdmVyIG1vdXNlb3V0IGNsaWNrJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICAgICQodGhpcy5kb2MpLm9uKCdtb3VzZXVwJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub2ZmKCdtb3VzZW1vdmUgbW91c2Vkb3duIG1vdXNlb3ZlciBtb3VzZW91dCBjbGljaycsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ21vdXNldXAnLCB0aGlzLmJpbmRzLmNvbnZlcnQpO1xyXG4gIH1cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9Nb3VzZUV2ZW50Q29udmVydGVyLmpzIiwiaW1wb3J0IHtUSFJFRX0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBNYXRoVXRpbHMgZnJvbSAnLi9NYXRoVXRpbHMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT2JqZWN0M0RXYXRjaGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IodmlzdWFsLCBib3VuZEJveENsYiwgdGVzdFNjYWxlPXRoaXMudGVzdFNjYWxlKSB7XHJcbiAgICB0aGlzLnZpc3VhbCA9IHZpc3VhbDtcclxuICAgIHRoaXMuYm91bmRCb3hDbGIgPSBib3VuZEJveENsYjtcclxuICAgIHRoaXMudGVzdFNjYWxlID0gdGVzdFNjYWxlO1xyXG4gICAgdGhpcy5jYW1lcmEgPSB2aXN1YWwuY2FtZXJhO1xyXG4gICAgdGhpcy5lbGVtZW50ID0gdGhpcy52aXN1YWwuZWxlbWVudDtcclxuICAgIHRoaXMuZWxlbWVudFNpemUgPSB7dzogMSwgaDogMX07XHJcbiAgICB0aGlzLmRldmljZVBpeGVsUmF0aW8gPSB0aGlzLnZpc3VhbC53bmQuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xyXG4gICAgdGhpcy5vcmJpdCA9IHZpc3VhbC5nZXRPcmJpdCgpO1xyXG4gICAgdGhpcy5zY2FsZSA9IDE7XHJcblxyXG4gICAgdGhpcy5lcHMgPSAxZS00O1xyXG4gICAgdGhpcy52ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgIHRoaXMuZHYgPSBuZXcgVEhSRUUuVmVjdG9yMigpO1xyXG5cclxuICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIHZpc3VhbC5hZGRSZW5kZXJDYWxsYmFjayh0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICB0aGlzLm9zID0ge1xyXG4gICAgICB2eDogMCxcclxuICAgICAgdnk6IDAsXHJcbiAgICAgIHg6IDAsXHJcbiAgICAgIHk6IDBcclxuICAgIH07XHJcbiAgICB0aGlzLm9yYml0LnVwZGF0ZSgpO1xyXG4gICAgdGhpcy5jYW1lcmEudXBkYXRlTWF0cml4V29ybGQoKTtcclxuICAgIGxldCBib3ggPSB0aGlzLmNvbXB1dGVDbGllbnRCb3VuZEJveCgpLCBrPTEuMTE7XHJcbiAgICB0aGlzLm1vdmVQYW4oe3g6IC1rKmJveC5taWQueCwgeTogLWsqYm94Lm1pZC55fSk7XHJcbiAgfVxyXG5cclxuICBtb3ZlUGFuKGR2KSB7XHJcbiAgICB0aGlzLm9yYml0LnBhbihkdi54KnRoaXMudmlzdWFsLndpZHRoKCksIC1kdi55KnRoaXMudmlzdWFsLmhlaWdodCgpKTtcclxuICB9XHJcblxyXG4gIHZUb0NhbWVyYSh2KSB7XHJcbiAgICB2LnByb2plY3QodGhpcy5jYW1lcmEpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeDogMC41KnYueCxcclxuICAgICAgeTogMC41KnYueVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbXB1dGVDbGllbnRCb3VuZEJveCgpIHtcclxuICAgIGNvbnN0IGJveCA9IHRoaXMuYm91bmRCb3hDbGIoKSxcclxuICAgICAgeHMgPSBbYm94Lm1pbi54LCBib3gubWF4LnhdLFxyXG4gICAgICB5cyA9IFswLCAwXSxcclxuICAgICAgenMgPSBbYm94Lm1pbi56LCBib3gubWF4LnpdO1xyXG5cclxuICAgIGNvbnN0IHBzID0gW10sIHJlcyA9IHttYXg6IHt9LCBtaW46IHt9fTtcclxuICAgIGZvcihsZXQgeCBvZiB4cykge1xyXG4gICAgICBmb3IobGV0IHkgb2YgeXMpIHtcclxuICAgICAgICBmb3IobGV0IHogb2YgenMpIHtcclxuICAgICAgICAgIHBzLnB1c2godGhpcy52VG9DYW1lcmEodGhpcy52LnNldCh4LHkseikpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcy5zb3J0KChwMSwgcDIpPT4gcDEueC1wMi54KTtcclxuICAgIHJlcy5taW4ueCA9IHBzWzBdLng7XHJcbiAgICByZXMubWF4LnggPSBwc1twcy5sZW5ndGgtMV0ueDtcclxuICAgIHBzLnNvcnQoKHAxLCBwMik9PiBwMS55LXAyLnkpO1xyXG4gICAgcmVzLm1pbi55ID0gcHNbMF0ueTtcclxuICAgIHJlcy5tYXgueSA9IHBzW3BzLmxlbmd0aC0xXS55O1xyXG5cclxuICAgIHJlcy53aWR0aCA9IHJlcy5tYXgueC1yZXMubWluLng7XHJcbiAgICByZXMuaGVpZ2h0ID0gcmVzLm1heC55LXJlcy5taW4ueTtcclxuXHJcbiAgICByZXMubWlkID0ge1xyXG4gICAgICB4OiAwLjUqKHJlcy5tYXgueCtyZXMubWluLngpLFxyXG4gICAgICB5OiAwLjUqKHJlcy5tYXgueStyZXMubWluLnkpXHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxuICBzZXRPYmplY3QoYm91bmRCb3hDbGIpIHtcclxuICAgIHRoaXMuYm91bmRCb3hDbGIgPSBib3VuZEJveENsYjtcclxuICB9XHJcblxyXG4gIHRlc3RTY2FsZSgpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY29tcHV0ZUNvcnIoSywgbWluLCBtYXgpIHtcclxuICAgIGxldCBjb3JyID0gMDtcclxuICAgIGlmKEs8MSkge1xyXG4gICAgICBpZihtaW4+LTAuNSkge1xyXG4gICAgICAgIGNvcnIgPSAtMC41LW1pbjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmKG1heDwwLjUpIHtcclxuICAgICAgICBjb3JyID0gMC41LW1heDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmKG1pbjwtMC41KSB7XHJcbiAgICAgICAgY29yciA9IC0wLjUtbWluO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYobWF4PjAuNSkge1xyXG4gICAgICAgIGNvcnIgPSAwLjUtbWF4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29ycjtcclxuICB9XHJcblxyXG4gIGdldFNjYWxlKCkge1xyXG4gICAgY29uc3QgYm94ID0gdGhpcy5jb21wdXRlQ2xpZW50Qm91bmRCb3goKSxcclxuICAgICAgS3ggPSB0aGlzLmVsZW1lbnRTaXplLncvYm94LndpZHRoLFxyXG4gICAgICBLeSA9IHRoaXMuZWxlbWVudFNpemUuaC9ib3guaGVpZ2h0O1xyXG4gICAgcmV0dXJuIDEvTWF0aC5taW4oS3gsIEt5KTtcclxuICB9XHJcblxyXG4gIGNlbnRlclZpZXcoVCkge1xyXG4gICAgbGV0IGJveCA9IHRoaXMuY29tcHV0ZUNsaWVudEJvdW5kQm94KCksXHJcbiAgICAgIEt4ID0gdGhpcy5lbGVtZW50U2l6ZS53L2JveC53aWR0aCxcclxuICAgICAgS3kgPSB0aGlzLmVsZW1lbnRTaXplLmgvYm94LmhlaWdodCxcclxuICAgICAgSyA9IE1hdGgubWluKEt4LCBLeSk7XHJcblxyXG4gICAgaWYodGhpcy50ZXN0U2NhbGUoKSAmJiBNYXRoLmFicygxL0stdGhpcy5zY2FsZSk+dGhpcy5lcHMpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSAxL0srMC4yKih0aGlzLnNjYWxlLTEvSyk7XHJcbiAgICAgIHRoaXMub3JiaXQuc2V0U2NhbGUodGhpcy5vcmJpdC5nZXRTY2FsZSgpLyhLKnNjYWxlKSk7XHJcbiAgICAgIHRoaXMub3JiaXQudXBkYXRlKCk7XHJcbiAgICAgIHRoaXMuY2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XHJcbiAgICAgIGJveCA9IHRoaXMuY29tcHV0ZUNsaWVudEJvdW5kQm94KCk7XHJcbiAgICAgICAgS3ggPSB0aGlzLmVsZW1lbnRTaXplLncvYm94LndpZHRoO1xyXG4gICAgICAgIEt5ID0gdGhpcy5lbGVtZW50U2l6ZS5oL2JveC5oZWlnaHQ7XHJcbiAgICAgICAgSyA9IE1hdGgubWluKEt4LCBLeSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHYgPSB0aGlzLmR2O1xyXG4gICAgaWYoSz4xLXRoaXMuZXBzKSB7XHJcbiAgICAgIGR2LnNldCgtYm94Lm1pZC54LCAtYm94Lm1pZC55KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBkdi5zZXQodGhpcy5jb21wdXRlQ29ycihLeCwgYm94Lm1pbi54LCBib3gubWF4LngpLFxyXG4gICAgICAgICAgICAgdGhpcy5jb21wdXRlQ29ycihLeSwgYm94Lm1pbi55LCBib3gubWF4LnkpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihNYXRoLnNxcnQodGhpcy5vcy52eCp0aGlzLm9zLnZ4K3RoaXMub3MudnkqdGhpcy5vcy52eSk+MC4wMDMgfHwgZHYubGVuZ3RoKCk+MC4wMDMpIHtcclxuICAgICAgbGV0IGR0ID0gMS82MCwgdD0wLCBvcyA9IHtcclxuICAgICAgICAuLi50aGlzLm9zLFxyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMFxyXG4gICAgICB9O1xyXG4gICAgICBvcy50ZiA9ICh2eCwgdnksIHgsIHkpPT4gKHtcclxuICAgICAgICB4OiA3NSooZHYueC14KS9NYXRoLnBvdyh0aGlzLmRldmljZVBpeGVsUmF0aW8sIDEuMCksXHJcbiAgICAgICAgeTogNzUqKGR2LnkteSkvTWF0aC5wb3codGhpcy5kZXZpY2VQaXhlbFJhdGlvLCAxLjApXHJcbiAgICAgIH0pO1xyXG4gICAgICB3aGlsZSh0PFQpIHtcclxuICAgICAgICBpZih0K2R0PlQpIHtcclxuICAgICAgICAgIGR0ID0gVC10O1xyXG4gICAgICAgIH1cclxuICAgICAgICBvcyA9IHRoaXMuaW50ZWdyYXRlKG9zLCBkdCk7XHJcbiAgICAgICAgdCArPSBkdDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vdmVQYW4ob3MpO1xyXG4gICAgICB0aGlzLm9zID0gb3M7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnRlZ3JhdGUob3MsIGR0KSB7XHJcbiAgICBjb25zdCBbdngsIHZ5LCB4LCB5XSA9IE1hdGhVdGlscy5yazQoXHJcbiAgICAgIHRoaXMuZHkuYmluZChvcyksXHJcbiAgICAgIDAsXHJcbiAgICAgIGR0LFxyXG4gICAgICBbb3MudngsIG9zLnZ5LCBvcy54LCBvcy55XVxyXG4gICAgKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLm9zLFxyXG4gICAgICB2eCwgdnksIHgsIHlcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBkeSh0LFkpIHtcclxuICAgIGNvbnN0IFt2eCwgdnksIHgsIHldID0gWSwgdmQgPSAxNSwgdGYgPSB0aGlzLnRmKHZ4LCB2eSwgeCwgeSk7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICB0Zi54LXZkKnZ4LFxyXG4gICAgICB0Zi55LXZkKnZ5LFxyXG4gICAgICB2eCxcclxuICAgICAgdnlcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICB1cGRhdGUoZHQpIHtcclxuICAgIGlmKHRoaXMuZW5hYmxlZCAmJiB0aGlzLmJvdW5kQm94Q2xiKSB7XHJcbiAgICAgIHRoaXMuY2VudGVyVmlldyhkdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9PYmplY3QzRFdhdGNoZXIuanMiLCJpbXBvcnQge1RIUkVFfSBmcm9tICcuLi9saWJzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yYml0IGV4dGVuZHMgVEhSRUUuRXZlbnREaXNwYXRjaGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iob2JqZWN0LCBkb21FbGVtZW50KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XHJcbiAgXHR0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50IHx8IGRvY3VtZW50LmJvZHk7XHJcblxyXG4gIFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgdGhpcyBjb250cm9sXHJcbiAgXHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICBcdC8vIFwidGFyZ2V0XCIgc2V0cyB0aGUgbG9jYXRpb24gb2YgZm9jdXMsIHdoZXJlIHRoZSBvYmplY3Qgb3JiaXRzIGFyb3VuZFxyXG4gIFx0dGhpcy50YXJnZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG5cclxuICBcdC8vIEhvdyBmYXIgeW91IGNhbiBkb2xseSBpbiBhbmQgb3V0KFBlcnNwZWN0aXZlQ2FtZXJhIG9ubHkpXHJcbiAgXHR0aGlzLm1pbkRpc3RhbmNlID0gMDtcclxuICBcdHRoaXMubWF4RGlzdGFuY2UgPSBJbmZpbml0eTtcclxuXHJcbiAgXHQvLyBIb3cgZmFyIHlvdSBjYW4gem9vbSBpbiBhbmQgb3V0KE9ydGhvZ3JhcGhpY0NhbWVyYSBvbmx5KVxyXG4gIFx0dGhpcy5taW5ab29tID0gMDtcclxuICBcdHRoaXMubWF4Wm9vbSA9IEluZmluaXR5O1xyXG5cclxuICBcdC8vIEhvdyBmYXIgeW91IGNhbiBvcmJpdCB2ZXJ0aWNhbGx5LCB1cHBlciBhbmQgbG93ZXIgbGltaXRzLlxyXG4gIFx0Ly8gUmFuZ2UgaXMgMCB0byBNYXRoLlBJIHJhZGlhbnMuXHJcbiAgXHR0aGlzLm1pblBvbGFyQW5nbGUgPSAwOyAvLyByYWRpYW5zXHJcbiAgXHR0aGlzLm1heFBvbGFyQW5nbGUgPSBNYXRoLlBJOyAvLyByYWRpYW5zXHJcblxyXG4gIFx0Ly8gSG93IGZhciB5b3UgY2FuIG9yYml0IGhvcml6b250YWxseSwgdXBwZXIgYW5kIGxvd2VyIGxpbWl0cy5cclxuICBcdC8vIElmIHNldCwgbXVzdCBiZSBhIHN1Yi1pbnRlcnZhbCBvZiB0aGUgaW50ZXJ2YWwgWy1NYXRoLlBJLCBNYXRoLlBJIF0uXHJcbiAgXHR0aGlzLm1pbkF6aW11dGhBbmdsZSA9IC1JbmZpbml0eTsgLy8gcmFkaWFuc1xyXG4gIFx0dGhpcy5tYXhBemltdXRoQW5nbGUgPSBJbmZpbml0eTsgLy8gcmFkaWFuc1xyXG5cclxuICBcdC8vIFNldCB0byB0cnVlIHRvIGVuYWJsZSBkYW1waW5nIChpbmVydGlhKVxyXG4gIFx0Ly8gSWYgZGFtcGluZyBpcyBlbmFibGVkLCB5b3UgbXVzdCBjYWxsIGNvbnRyb2xzLnVwZGF0ZSgpIGluIHlvdXIgYW5pbWF0aW9uIGxvb3BcclxuICBcdHRoaXMuZW5hYmxlRGFtcGluZyA9IGZhbHNlO1xyXG4gIFx0dGhpcy5kYW1waW5nRmFjdG9yID0gMC4yNTtcclxuXHJcbiAgXHQvLyBUaGlzIG9wdGlvbiBhY3R1YWxseSBlbmFibGVzIGRvbGx5aW5nIGluIGFuZCBvdXQ7IGxlZnQgYXMgXCJ6b29tXCIgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxyXG4gIFx0Ly8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgem9vbWluZ1xyXG4gIFx0dGhpcy5lbmFibGVab29tID0gdHJ1ZTtcclxuICBcdHRoaXMuem9vbVNwZWVkID0gMS4wO1xyXG5cclxuICBcdC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHJvdGF0aW5nXHJcbiAgXHR0aGlzLmVuYWJsZVJvdGF0ZSA9IHRydWU7XHJcbiAgXHR0aGlzLnJvdGF0ZVNwZWVkID0gMS4wO1xyXG5cclxuICBcdC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHBhbm5pbmdcclxuICBcdHRoaXMuZW5hYmxlUGFuID0gdHJ1ZTtcclxuXHJcbiAgXHQvLyBTZXQgdG8gdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IHJvdGF0ZSBhcm91bmQgdGhlIHRhcmdldFxyXG4gIFx0Ly8gSWYgYXV0by1yb3RhdGUgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXHJcbiAgXHR0aGlzLmF1dG9Sb3RhdGUgPSBmYWxzZTtcclxuICBcdHRoaXMuYXV0b1JvdGF0ZVNwZWVkID0gMi4wOyAvLyAzMCBzZWNvbmRzIHBlciByb3VuZCB3aGVuIGZwcyBpcyA2MFxyXG5cclxuICBcdC8vIGZvciByZXNldFxyXG4gIFx0dGhpcy50YXJnZXQwID0gdGhpcy50YXJnZXQuY2xvbmUoKTtcclxuICBcdHRoaXMucG9zaXRpb24wID0gdGhpcy5vYmplY3QucG9zaXRpb24uY2xvbmUoKTtcclxuICBcdHRoaXMuem9vbTAgPSB0aGlzLm9iamVjdC56b29tO1xyXG5cclxuICBcdC8vXHJcbiAgXHQvLyBwdWJsaWMgbWV0aG9kc1xyXG4gIFx0Ly9cclxuICBcdHRoaXMuZ2V0UG9sYXJBbmdsZSA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHNwaGVyaWNhbC5waGk7XHJcbiAgXHR9O1xyXG5cclxuICBcdHRoaXMuZ2V0QXppbXV0aGFsQW5nbGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBzcGhlcmljYWwudGhldGE7XHJcbiAgXHR9O1xyXG5cclxuICBcdHRoaXMucmVzZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHNjb3BlLnRhcmdldC5jb3B5KHNjb3BlLnRhcmdldDApO1xyXG4gIFx0XHRzY29wZS5vYmplY3QucG9zaXRpb24uY29weShzY29wZS5wb3NpdGlvbjApO1xyXG4gIFx0XHRzY29wZS5vYmplY3Quem9vbSA9IHNjb3BlLnpvb20wO1xyXG5cclxuICBcdFx0c2NvcGUub2JqZWN0LnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICBcdFx0c2NvcGUuZGlzcGF0Y2hFdmVudChjaGFuZ2VFdmVudCk7XHJcblxyXG4gIFx0XHRzY29wZS51cGRhdGUoKTtcclxuICBcdH07XHJcblxyXG4gICAgdGhpcy56b29tT3V0ID0gZnVuY3Rpb24oc3BlZWQ9dGhpcy56b29tU3BlZWQpIHtcclxuICAgICAgY29uc3QgX3NwZWVkID0gdGhpcy56b29tU3BlZWQ7XHJcbiAgICAgIHRoaXMuem9vbVNwZWVkID0gc3BlZWQ7XHJcbiAgICAgIGRvbGx5SW4oZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB0aGlzLnpvb21TcGVlZCA9IF9zcGVlZDtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy56b29tSW4gPSBmdW5jdGlvbihzcGVlZD10aGlzLnpvb21TcGVlZCkge1xyXG4gICAgICBjb25zdCBfc3BlZWQgPSB0aGlzLnpvb21TcGVlZDtcclxuICAgICAgdGhpcy56b29tU3BlZWQgPSBzcGVlZDtcclxuICAgICAgZG9sbHlPdXQoZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB0aGlzLnpvb21TcGVlZCA9IF9zcGVlZDtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5nZXRTY2FsZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICByZXR1cm4gc2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTY2FsZSA9IGZ1bmN0aW9uKG5ld1NjYWxlKSB7XHJcbiAgICAgIHNjYWxlID0gbmV3U2NhbGU7XHJcbiAgICB9XHJcblxyXG4gIFx0Ly8gdGhpcyBtZXRob2QgaXMgZXhwb3NlZCwgYnV0IHBlcmhhcHMgaXQgd291bGQgYmUgYmV0dGVyIGlmIHdlIGNhbiBtYWtlIGl0IHByaXZhdGUuLi5cclxuICBcdHRoaXMudXBkYXRlID0gZnVuY3Rpb24oKSB7XHJcbiAgXHRcdHZhciBvZmZzZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0XHQvLyBzbyBjYW1lcmEudXAgaXMgdGhlIG9yYml0IGF4aXNcclxuICBcdFx0dmFyIHF1YXQgPSBuZXcgVEhSRUUuUXVhdGVybmlvbigpLnNldEZyb21Vbml0VmVjdG9ycyhvYmplY3QudXAsIG5ldyBUSFJFRS5WZWN0b3IzKDAsIDEsIDApKTtcclxuICBcdFx0dmFyIHF1YXRJbnZlcnNlID0gcXVhdC5jbG9uZSgpLmludmVyc2UoKTtcclxuICBcdFx0dmFyIGxhc3RQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgXHRcdHZhciBsYXN0UXVhdGVybmlvbiA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlICgpIHtcclxuICBcdFx0XHR2YXIgcG9zaXRpb24gPSBzY29wZS5vYmplY3QucG9zaXRpb247XHJcbiAgXHRcdFx0b2Zmc2V0LmNvcHkocG9zaXRpb24pLnN1YihzY29wZS50YXJnZXQpO1xyXG4gIFx0XHRcdC8vIHJvdGF0ZSBvZmZzZXQgdG8gXCJ5LWF4aXMtaXMtdXBcIiBzcGFjZVxyXG4gIFx0XHRcdG9mZnNldC5hcHBseVF1YXRlcm5pb24ocXVhdCk7XHJcbiAgXHRcdFx0Ly8gYW5nbGUgZnJvbSB6LWF4aXMgYXJvdW5kIHktYXhpc1xyXG4gIFx0XHRcdHNwaGVyaWNhbC5zZXRGcm9tVmVjdG9yMyhvZmZzZXQpO1xyXG4gIFx0XHRcdGlmKHNjb3BlLmF1dG9Sb3RhdGUpIHtcclxuICBcdFx0XHRcdHJvdGF0ZUxlZnQoZ2V0QXV0b1JvdGF0aW9uQW5nbGUoKSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHNwaGVyaWNhbC50aGV0YSArPSBzcGhlcmljYWxEZWx0YS50aGV0YTtcclxuICBcdFx0XHRzcGhlcmljYWwucGhpICs9IHNwaGVyaWNhbERlbHRhLnBoaTtcclxuICBcdFx0XHQvLyByZXN0cmljdCB0aGV0YSB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXHJcbiAgXHRcdFx0c3BoZXJpY2FsLnRoZXRhID0gTWF0aC5tYXgoc2NvcGUubWluQXppbXV0aEFuZ2xlLCBNYXRoLm1pbihzY29wZS5tYXhBemltdXRoQW5nbGUsIHNwaGVyaWNhbC50aGV0YSkpO1xyXG4gIFx0XHRcdC8vIHJlc3RyaWN0IHBoaSB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXHJcbiAgXHRcdFx0c3BoZXJpY2FsLnBoaSA9IE1hdGgubWF4KHNjb3BlLm1pblBvbGFyQW5nbGUsIE1hdGgubWluKHNjb3BlLm1heFBvbGFyQW5nbGUsIHNwaGVyaWNhbC5waGkpKTtcclxuICBcdFx0XHRzcGhlcmljYWwubWFrZVNhZmUoKTtcclxuICBcdFx0XHRzcGhlcmljYWwucmFkaXVzICo9IHNjYWxlO1xyXG4gIFx0XHRcdC8vIHJlc3RyaWN0IHJhZGl1cyB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXHJcbiAgXHRcdFx0c3BoZXJpY2FsLnJhZGl1cyA9IE1hdGgubWF4KHNjb3BlLm1pbkRpc3RhbmNlLCBNYXRoLm1pbihzY29wZS5tYXhEaXN0YW5jZSwgc3BoZXJpY2FsLnJhZGl1cykpO1xyXG4gIFx0XHRcdC8vIG1vdmUgdGFyZ2V0IHRvIHBhbm5lZCBsb2NhdGlvblxyXG4gIFx0XHRcdHNjb3BlLnRhcmdldC5hZGQocGFuT2Zmc2V0KTtcclxuICBcdFx0XHRvZmZzZXQuc2V0RnJvbVNwaGVyaWNhbChzcGhlcmljYWwpO1xyXG4gIFx0XHRcdC8vIHJvdGF0ZSBvZmZzZXQgYmFjayB0byBcImNhbWVyYS11cC12ZWN0b3ItaXMtdXBcIiBzcGFjZVxyXG4gIFx0XHRcdG9mZnNldC5hcHBseVF1YXRlcm5pb24ocXVhdEludmVyc2UpO1xyXG4gIFx0XHRcdHBvc2l0aW9uLmNvcHkoc2NvcGUudGFyZ2V0KS5hZGQob2Zmc2V0KTtcclxuICBcdFx0XHRzY29wZS5vYmplY3QubG9va0F0KHNjb3BlLnRhcmdldCk7XHJcblxyXG4gIFx0XHRcdGlmKHNjb3BlLmVuYWJsZURhbXBpbmc9PT10cnVlKSB7XHJcbiAgXHRcdFx0XHRzcGhlcmljYWxEZWx0YS50aGV0YSAqPSgxLXNjb3BlLmRhbXBpbmdGYWN0b3IpO1xyXG4gIFx0XHRcdFx0c3BoZXJpY2FsRGVsdGEucGhpICo9KDEtc2NvcGUuZGFtcGluZ0ZhY3Rvcik7XHJcbiAgXHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdHNwaGVyaWNhbERlbHRhLnNldCgwLCAwLCAwKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHNjYWxlID0gMTtcclxuICBcdFx0XHRwYW5PZmZzZXQuc2V0KDAsIDAsIDApO1xyXG5cclxuICBcdFx0XHQvLyB1cGRhdGUgY29uZGl0aW9uIGlzOlxyXG4gIFx0XHRcdC8vIG1pbihjYW1lcmEgZGlzcGxhY2VtZW50LCBjYW1lcmEgcm90YXRpb24gaW4gcmFkaWFucyleMiA+IEVQU1xyXG4gIFx0XHRcdC8vIHVzaW5nIHNtYWxsLWFuZ2xlIGFwcHJveGltYXRpb24gY29zKHgvMikgPSAxLXheMiAvIDhcclxuXHJcbiAgXHRcdFx0aWYoem9vbUNoYW5nZWQgfHxcclxuICBcdFx0XHRcdGxhc3RQb3NpdGlvbi5kaXN0YW5jZVRvU3F1YXJlZChzY29wZS5vYmplY3QucG9zaXRpb24pID4gRVBTIHx8XHJcbiAgXHRcdFx0XHQ4ICooMS1sYXN0UXVhdGVybmlvbi5kb3Qoc2NvcGUub2JqZWN0LnF1YXRlcm5pb24pKSA+IEVQUykge1xyXG5cclxuICBcdFx0XHRcdHNjb3BlLmRpc3BhdGNoRXZlbnQoY2hhbmdlRXZlbnQpO1xyXG5cclxuICBcdFx0XHRcdGxhc3RQb3NpdGlvbi5jb3B5KHNjb3BlLm9iamVjdC5wb3NpdGlvbik7XHJcbiAgXHRcdFx0XHRsYXN0UXVhdGVybmlvbi5jb3B5KHNjb3BlLm9iamVjdC5xdWF0ZXJuaW9uKTtcclxuICBcdFx0XHRcdHpvb21DaGFuZ2VkID0gZmFsc2U7XHJcblxyXG4gIFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHJldHVybiBmYWxzZTtcclxuICBcdFx0fTtcclxuICBcdH0oKTtcclxuXHJcbiAgICB0aGlzLmRpc3Bvc2UgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICB9O1xyXG5cclxuICBcdC8vXHJcbiAgXHQvLyBpbnRlcm5hbHNcclxuICBcdC8vXHJcbiAgXHR2YXIgc2NvcGUgPSB0aGlzO1xyXG4gIFx0dmFyIGNoYW5nZUV2ZW50ID0geyB0eXBlOiAnY2hhbmdlJyB9O1xyXG4gIFx0dmFyIEVQUyA9IDFlLTY7XHJcbiAgXHQvLyBjdXJyZW50IHBvc2l0aW9uIGluIHNwaGVyaWNhbCBjb29yZGluYXRlc1xyXG4gIFx0dmFyIHNwaGVyaWNhbCA9IG5ldyBUSFJFRS5TcGhlcmljYWwoKTtcclxuICBcdHZhciBzcGhlcmljYWxEZWx0YSA9IG5ldyBUSFJFRS5TcGhlcmljYWwoKTtcclxuXHJcbiAgXHR2YXIgc2NhbGUgPSAxO1xyXG4gIFx0dmFyIHBhbk9mZnNldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgXHR2YXIgem9vbUNoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgXHRmdW5jdGlvbiBnZXRBdXRvUm90YXRpb25BbmdsZSgpIHtcclxuICBcdFx0cmV0dXJuIDIgKiBNYXRoLlBJIC8gNjAgLyA2MCAqIHNjb3BlLmF1dG9Sb3RhdGVTcGVlZDtcclxuICBcdH1cclxuXHJcbiAgXHRmdW5jdGlvbiBnZXRab29tU2NhbGUoKSB7XHJcbiAgXHRcdHJldHVybiBNYXRoLnBvdygwLjk1LCBzY29wZS56b29tU3BlZWQpO1xyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIHJvdGF0ZUxlZnQoYW5nbGUpIHtcclxuICBcdFx0c3BoZXJpY2FsRGVsdGEudGhldGEgLT0gYW5nbGU7XHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gcm90YXRlVXAoYW5nbGUpIHtcclxuICBcdFx0c3BoZXJpY2FsRGVsdGEucGhpIC09IGFuZ2xlO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBwYW5MZWZ0ID0gZnVuY3Rpb24oKSB7XHJcbiAgXHRcdHZhciB2ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICBcdFx0cmV0dXJuIGZ1bmN0aW9uIHBhbkxlZnQoZGlzdGFuY2UsIG9iamVjdE1hdHJpeCkge1xyXG4gIFx0XHRcdHYuc2V0RnJvbU1hdHJpeENvbHVtbihvYmplY3RNYXRyaXgsIDApOyAvLyBnZXQgWCBjb2x1bW4gb2Ygb2JqZWN0TWF0cml4XHJcbiAgXHRcdFx0di5tdWx0aXBseVNjYWxhcigtIGRpc3RhbmNlKTtcclxuICBcdFx0XHRwYW5PZmZzZXQuYWRkKHYpO1xyXG4gIFx0XHR9O1xyXG4gIFx0fSgpO1xyXG5cclxuICBcdHZhciBwYW5VcCA9IGZ1bmN0aW9uKCkge1xyXG4gIFx0XHR2YXIgdiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XHJcbiAgXHRcdHJldHVybiBmdW5jdGlvbiBwYW5VcChkaXN0YW5jZSwgb2JqZWN0TWF0cml4KSB7XHJcbiAgXHRcdFx0di5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMSk7IC8vIGdldCBZIGNvbHVtbiBvZiBvYmplY3RNYXRyaXhcclxuICBcdFx0XHR2Lm11bHRpcGx5U2NhbGFyKGRpc3RhbmNlKTtcclxuICBcdFx0XHRwYW5PZmZzZXQuYWRkKHYpO1xyXG4gIFx0XHR9O1xyXG4gIFx0fSgpO1xyXG5cclxuICBcdC8vIGRlbHRhWCBhbmQgZGVsdGFZIGFyZSBpbiBwaXhlbHM7IHJpZ2h0IGFuZCBkb3duIGFyZSBwb3NpdGl2ZVxyXG4gIFx0c2NvcGUucGFuID0gZnVuY3Rpb24oKSB7XHJcbiAgXHRcdHZhciBvZmZzZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24gcGFuKGRlbHRhWCwgZGVsdGFZKSB7XHJcbiAgXHRcdFx0dmFyIGVsZW1lbnQgPSBzY29wZS5kb21FbGVtZW50O1xyXG4gIFx0XHRcdGlmKHNjb3BlLm9iamVjdCBpbnN0YW5jZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgXHRcdFx0XHQvLyBwZXJzcGVjdGl2ZVxyXG4gIFx0XHRcdFx0dmFyIHBvc2l0aW9uID0gc2NvcGUub2JqZWN0LnBvc2l0aW9uO1xyXG4gIFx0XHRcdFx0b2Zmc2V0LmNvcHkocG9zaXRpb24pLnN1YihzY29wZS50YXJnZXQpO1xyXG4gIFx0XHRcdFx0dmFyIHRhcmdldERpc3RhbmNlID0gb2Zmc2V0Lmxlbmd0aCgpO1xyXG4gIFx0XHRcdFx0Ly8gaGFsZiBvZiB0aGUgZm92IGlzIGNlbnRlciB0byB0b3Agb2Ygc2NyZWVuXHJcbiAgXHRcdFx0XHR0YXJnZXREaXN0YW5jZSAqPSBNYXRoLnRhbigoc2NvcGUub2JqZWN0LmZvdiAvIDIpICogTWF0aC5QSSAvIDE4MC4wKTtcclxuICBcdFx0XHRcdC8vIHdlIGFjdHVhbGx5IGRvbid0IHVzZSBzY3JlZW5XaWR0aCwgc2luY2UgcGVyc3BlY3RpdmUgY2FtZXJhIGlzIGZpeGVkIHRvIHNjcmVlbiBoZWlnaHRcclxuICBcdFx0XHRcdHBhbkxlZnQoMiAqIGRlbHRhWCAqIHRhcmdldERpc3RhbmNlIC8gZWxlbWVudC5jbGllbnRIZWlnaHQsIHNjb3BlLm9iamVjdC5tYXRyaXgpO1xyXG4gIFx0XHRcdFx0cGFuVXAoMiAqIGRlbHRhWSAqIHRhcmdldERpc3RhbmNlIC8gZWxlbWVudC5jbGllbnRIZWlnaHQsIHNjb3BlLm9iamVjdC5tYXRyaXgpO1xyXG4gIFx0XHRcdH0gZWxzZSBpZihzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICBcdFx0XHRcdC8vIG9ydGhvZ3JhcGhpY1xyXG4gIFx0XHRcdFx0cGFuTGVmdChkZWx0YVggKihzY29wZS5vYmplY3QucmlnaHQtc2NvcGUub2JqZWN0LmxlZnQpIC8gc2NvcGUub2JqZWN0Lnpvb20gLyBlbGVtZW50LmNsaWVudFdpZHRoLCBzY29wZS5vYmplY3QubWF0cml4KTtcclxuICBcdFx0XHRcdHBhblVwKGRlbHRhWSAqKHNjb3BlLm9iamVjdC50b3Atc2NvcGUub2JqZWN0LmJvdHRvbSkgLyBzY29wZS5vYmplY3Quem9vbSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBzY29wZS5vYmplY3QubWF0cml4KTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0Ly8gY2FtZXJhIG5laXRoZXIgb3J0aG9ncmFwaGljIG5vciBwZXJzcGVjdGl2ZVxyXG4gIFx0XHRcdFx0Y29uc29sZS53YXJuKCdXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUtcGFuIGRpc2FibGVkLicpO1xyXG4gIFx0XHRcdFx0c2NvcGUuZW5hYmxlUGFuID0gZmFsc2U7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9O1xyXG4gIFx0fSgpO1xyXG5cclxuICBcdGZ1bmN0aW9uIGRvbGx5SW4oZG9sbHlTY2FsZSkge1xyXG4gICAgICBpZihzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gIFx0XHRcdHNjYWxlIC89IGRvbGx5U2NhbGU7XHJcbiAgXHRcdH0gZWxzZSBpZihzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICBcdFx0XHRzY29wZS5vYmplY3Quem9vbSA9IE1hdGgubWF4KHNjb3BlLm1pblpvb20sIE1hdGgubWluKHNjb3BlLm1heFpvb20sIHNjb3BlLm9iamVjdC56b29tICogZG9sbHlTY2FsZSkpO1xyXG4gIFx0XHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgXHRcdFx0em9vbUNoYW5nZWQgPSB0cnVlO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGNvbnNvbGUud2FybignV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlLWRvbGx5L3pvb20gZGlzYWJsZWQuJyk7XHJcbiAgXHRcdFx0c2NvcGUuZW5hYmxlWm9vbSA9IGZhbHNlO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0ZnVuY3Rpb24gZG9sbHlPdXQoZG9sbHlTY2FsZSkge1xyXG4gICAgICBpZihzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gIFx0XHRcdHNjYWxlICo9IGRvbGx5U2NhbGU7XHJcbiAgXHRcdH0gZWxzZSBpZihzY29wZS5vYmplY3QgaW5zdGFuY2VvZiBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICBcdFx0XHRzY29wZS5vYmplY3Quem9vbSA9IE1hdGgubWF4KHNjb3BlLm1pblpvb20sIE1hdGgubWluKHNjb3BlLm1heFpvb20sIHNjb3BlLm9iamVjdC56b29tIC8gZG9sbHlTY2FsZSkpO1xyXG4gIFx0XHRcdHNjb3BlLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgXHRcdFx0em9vbUNoYW5nZWQgPSB0cnVlO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGNvbnNvbGUud2FybignV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlLWRvbGx5L3pvb20gZGlzYWJsZWQuJyk7XHJcbiAgXHRcdFx0c2NvcGUuZW5hYmxlWm9vbSA9IGZhbHNlO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gICAgLyogQWN0aW9ucyAqL1xyXG5cclxuICAgIGZ1bmN0aW9uIHJvdGF0ZShldmVudCwgZGF0YSkge1xyXG4gICAgICBpZihzY29wZS5lbmFibGVkICYmIHNjb3BlLmVuYWJsZVJvdGF0ZSAmJiBkYXRhLnN0YXRlPT09J21vdmUnKSB7XHJcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBzY29wZS5kb21FbGVtZW50O1xyXG4gICAgICAgIC8vIHJvdGF0aW5nIGFjcm9zcyB3aG9sZSBzY3JlZW4gZ29lcyAzNjAgZGVncmVlcyBhcm91bmRcclxuICAgICAgICByb3RhdGVMZWZ0KDIgKiBNYXRoLlBJICogZGF0YS5keCAvIGVsZW1lbnQuY2xpZW50V2lkdGggKiBzY29wZS5yb3RhdGVTcGVlZCk7XHJcbiAgICAgICAgLy8gcm90YXRpbmcgdXAgYW5kIGRvd24gYWxvbmcgd2hvbGUgc2NyZWVuIGF0dGVtcHRzIHRvIGdvIDM2MCwgYnV0IGxpbWl0ZWQgdG8gMTgwXHJcbiAgICAgICAgcm90YXRlVXAoMiAqIE1hdGguUEkgKiBkYXRhLmR5IC8gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY29wZS5yb3RhdGVTcGVlZCk7XHJcbiAgICAgICAgc2NvcGUudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYW4oZXZlbnQsIGRhdGEpIHtcclxuICAgICAgaWYoc2NvcGUuZW5hYmxlZCAmJiBzY29wZS5lbmFibGVQYW4gJiYgZGF0YS5zdGF0ZT09PSdtb3ZlJykge1xyXG4gICAgICAgIHNjb3BlLnBhbihkYXRhLmR4LCBkYXRhLmR5KTtcclxuICAgICAgICBzY29wZS51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG9mZnNldERvbGx5KGV2ZW50LCBkYXRhKSB7XHJcbiAgICAgIGlmKHNjb3BlLmVuYWJsZWQgJiYgc2NvcGUuZW5hYmxlWm9vbSAmJiBkYXRhLnN0YXRlPT09J21vdmUnKSB7XHJcbiAgICAgICAgaWYoZGF0YS5keT4wKSB7XHJcbiAgICAgICAgICBkb2xseUluKGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgICB9IGVsc2UgaWYoZGF0YS5keTwwKSB7XHJcbiAgICAgICAgICBkb2xseU91dChnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjb3BlLnVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gd2hlZWxEb2xseShldmVudCkge1xyXG4gICAgICBpZihzY29wZS5lbmFibGVkICYmIHNjb3BlLmVuYWJsZVpvb20pIHtcclxuICAgICAgICBpZihldmVudC5kZWx0YVk+MCkge1xyXG4gICAgICAgICAgZG9sbHlPdXQoZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICAgIH0gZWxzZSBpZihldmVudC5kZWx0YVk8MCkge1xyXG4gICAgICAgICAgZG9sbHlJbihnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNjb3BlLnVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hY3Rpb25zID0ge1xyXG4gICAgICByb3RhdGUsXHJcbiAgICAgIHBhbixcclxuICAgICAgb2Zmc2V0RG9sbHksXHJcbiAgICAgIHdoZWVsRG9sbHlcclxuICAgIH1cclxuXHJcbiAgXHQvLyBmb3JjZSBhbiB1cGRhdGUgYXQgc3RhcnRcclxuICBcdHRoaXMudXBkYXRlKCk7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9PcmJpdC5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBJbWFnZUJhc2UgZnJvbSAnLi9JbWFnZUJhc2UnO1xyXG5pbXBvcnQgUGRmIGZyb20gJy4vUGRmJztcclxuaW1wb3J0IEJhc2VNYXRoVXRpbHMgZnJvbSAnLi9CYXNlTWF0aFV0aWxzJztcclxuaW1wb3J0IEN1c3RvbUV2ZW50Q29udmVydGVyIGZyb20gJy4vQ3VzdG9tRXZlbnRDb252ZXJ0ZXInO1xyXG5pbXBvcnQgUG9seVRhcmdldCBmcm9tICcuL3RhcmdldHMvUG9seVRhcmdldCc7XHJcblxyXG5pbXBvcnQgRmluZGVyIGZyb20gJy4vRmluZGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBkZkltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIHBkZiwgbikge1xyXG4gICAgc3VwZXIoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpO1xyXG5cclxuICAgIHRoaXMucXVlcnkgPSAnJztcclxuICAgIHRoaXMubiA9IG47XHJcbiAgICB0aGlzLnBkZiA9IHBkZjtcclxuICAgIHRoaXMudiA9IHt4OiAwLCB5OiAwLCB6OiAwLCBzZXQ6IGZ1bmN0aW9uKHgseSx6KSB7XHJcbiAgICAgIHRoaXMueD14OyB0aGlzLnk9eTsgdGhpcy56PXo7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfSwgdHJhbnNmb3JtOiBmdW5jdGlvbihtKSB7XHJcbiAgICAgIGNvbnN0IHg9bS5tWzBdWzBdKnRoaXMueCttLm1bMV1bMF0qdGhpcy55K20ubVsyXVswXSp0aGlzLnosXHJcbiAgICAgICAgICAgIHk9bS5tWzBdWzFdKnRoaXMueCttLm1bMV1bMV0qdGhpcy55K20ubVsyXVsxXSp0aGlzLnosXHJcbiAgICAgICAgICAgIHo9bS5tWzBdWzJdKnRoaXMueCttLm1bMF1bMl0qdGhpcy55K20ubVsyXVswXSp0aGlzLno7XHJcbiAgICAgIHRoaXMueD14O1xyXG4gICAgICB0aGlzLnk9eTtcclxuICAgICAgdGhpcy56PXo7XHJcbiAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfX07XHJcbiAgICB0aGlzLm0gPSB7bTogW1sxLDAsMF0sWzAsMSwwXSxbMCwwLDFdXSwgc2V0OiBmdW5jdGlvbihtMDAsbTAxLG0wMixtMTAsbTExLG0xMixtMjAsbTIxLG0yMikge1xyXG4gICAgICB0aGlzLm09W1ttMDAsbTAxLG0wMl0sW20xMCxtMTEsbTEyXSxbbTIwLG0yMSxtMjJdXTtcclxuICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9fTtcclxuXHJcbiAgICB0aGlzLnN0YXJ0UmVuZGVyID0gKCk9PiB7XHJcbiAgICAgIHRoaXMucGRmLmdldEhhbmRsZXIodGhpcy5yZW5kZXIuYmluZCh0aGlzKSk7XHJcbiAgICB9O1xyXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkuXHJcbiAgICAgIHRoZW4oKCk9PiB0aGlzLnBkZi5nZXRIYW5kbGVyKHRoaXMuaW5pdC5iaW5kKHRoaXMpKSk7XHJcbiAgfVxyXG5cclxuICBzZXRRdWVyeShxdWVyeSkge1xyXG4gICAgdGhpcy5xdWVyeSA9IHF1ZXJ5LnRyaW0oKTtcclxuICAgIGlmKHRoaXMudGV4dENvbnRlbnQpIHtcclxuICAgICAgdGhpcy5zZXRIaXRzKHRoaXMudGV4dENvbnRlbnQpO1xyXG4gICAgICAvLyB0aGlzLmZpbmlzaExvYWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlY3RTaXplKHIpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHdpZHRoOiByWzJdLXJbMF0sXHJcbiAgICAgIGhlaWdodDogclszXS1yWzFdXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlUG9seShtLCBwLCBzKSB7XHJcbiAgICBjb25zdCBwb2x5ID0gW10sIHYgPSB0aGlzLnY7XHJcbiAgICB2LnNldChwLngsIHAueSwgMSkudHJhbnNmb3JtKG0pO1xyXG4gICAgcG9seS5wdXNoKHt4OiB2LngsIHk6IHYueX0pO1xyXG4gICAgdi5zZXQocC54LCBwLnkrcy5oZWlnaHQsIDEpLnRyYW5zZm9ybShtKTtcclxuICAgIHBvbHkucHVzaCh7eDogdi54LCB5OiB2Lnl9KTtcclxuICAgIHYuc2V0KHAueCtzLndpZHRoLCBwLnkrcy5oZWlnaHQsIDEpLnRyYW5zZm9ybShtKTtcclxuICAgIHBvbHkucHVzaCh7eDogdi54LCB5OiB2Lnl9KTtcclxuICAgIHYuc2V0KHAueCtzLndpZHRoLCBwLnksIDEpLnRyYW5zZm9ybShtKTtcclxuICAgIHBvbHkucHVzaCh7eDogdi54LCB5OiB2Lnl9KTtcclxuICAgIHJldHVybiBwb2x5O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2ltdWxhdGVkRG9jKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFnZTtcclxuICB9XHJcblxyXG4gIHNpbXVsYXRlKGUsIGRvYywgeCwgeSkge1xyXG4gICAgaWYodGhpcy5ldmVudENvbnZlcnRlcikge1xyXG4gICAgICB0aGlzLmV2ZW50Q29udmVydGVyLmNvbnZlcnQoZSwge2RvYywgeCwgeX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0QW5ub3RhdGlvbnMoYW5ub3MpIHtcclxuICAgIGNvbnN0IHQgPSB0aGlzLnZpZXdwb3J0LnRyYW5zZm9ybSxcclxuICAgICAgdGFyZ2V0cyA9IFtdO1xyXG4gICAgdGhpcy5tLnNldChcclxuICAgICAgdFswXSx0WzFdLDAsXHJcbiAgICAgIHRbMl0sdFszXSwwLFxyXG4gICAgICB0WzRdLHRbNV0sMSk7XHJcblxyXG4gICAgZm9yKGxldCBhbm5vIG9mIGFubm9zKSB7XHJcbiAgICAgIGlmIChhbm5vLnN1YnR5cGU9PT0nTGluaycpIHtcclxuICAgICAgICBjb25zdCByZWN0ID0gYW5uby5yZWN0LFxyXG4gICAgICAgICAgYVBvcyA9IHtcclxuICAgICAgICAgICAgeDogcmVjdFswXSxcclxuICAgICAgICAgICAgeTogcmVjdFsxXVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGFTeiA9IHRoaXMucmVjdFNpemUocmVjdCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbmV3IFBvbHlUYXJnZXQodGhpcy5jcmVhdGVQb2x5KHRoaXMubSwgYVBvcywgYVN6KS5tYXAoKHApPT4gKHt4OiBwLngvdGhpcy52aWV3cG9ydC53aWR0aCwgeTogMS1wLnkvdGhpcy52aWV3cG9ydC5oZWlnaHR9KSkpO1xyXG4gICAgICAgIHRhcmdldC5hbm5vID0gYW5ubztcclxuICAgICAgICB0YXJnZXQuY2FsbGJhY2sgPSB0aGlzLmFubm9DbGIuYmluZCh0aGlzKTtcclxuICAgICAgICB0YXJnZXRzLnB1c2godGFyZ2V0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYodGFyZ2V0cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5ldmVudENvbnZlcnRlciA9IG5ldyBDdXN0b21FdmVudENvbnZlcnRlcih0aGlzLnduZCwgdGhpcy5kb2MsIFBvbHlUYXJnZXQudGVzdCwgdGhpcy5wYWdlKTtcclxuICAgICAgZm9yKGxldCB0YXJnZXQgb2YgdGFyZ2V0cykge1xyXG4gICAgICAgIHRoaXMuZXZlbnRDb252ZXJ0ZXIuYWRkQ3VzdG9tKHRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhpdHModGV4dENvbnRlbnQpIHtcclxuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcclxuICAgIGlmKHRoaXMucXVlcnkhPT0nJykge1xyXG4gICAgICB0aGlzLmZpbmRlciA9IG5ldyBGaW5kZXIodGV4dENvbnRlbnQuaXRlbXMubWFwKChpdGVtKT0+IGl0ZW0uc3RyKSwgdGhpcy5xdWVyeSwge2NvbnRleHRzOiBmYWxzZX0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVySGl0cygpIHtcclxuICAgIGlmKHRoaXMuZmluZGVyKSB7XHJcbiAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnBhZ2UudmlldyxcclxuICAgICAgICB0ZXN0U3ogPSAkKCc8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB2aXNpYmlsaXR5OiBoaWRkZW47XCI+PC9kaXY+JykuYXBwZW5kVG8oJ2JvZHknKSwgdGV4dERpdiA9IHRlc3RTelswXSxcclxuICAgICAgICBiYXNlT2Zmc2V0ID0gdGVzdFN6Lm9mZnNldCgpLmxlZnQ7XHJcbiAgICAgIGZvcihsZXQgaGl0IG9mIHRoaXMuZmluZGVyLmdldEhpdHMoKSkge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMudGV4dENvbnRlbnQuaXRlbXNbaGl0LmluZGV4XSxcclxuICAgICAgICAgICAgICAgIHQgPSBQREZKUy5VdGlsLnRyYW5zZm9ybSh0aGlzLnZpZXdwb3J0LnRyYW5zZm9ybSwgaXRlbS50cmFuc2Zvcm0pLFxyXG4gICAgICAgICAgICAgICAgc3R5bGUgPSB0aGlzLnRleHRDb250ZW50LnN0eWxlc1tpdGVtLmZvbnROYW1lXSxcclxuICAgICAgICAgICAgICAgIGFuZ2xlID0gTWF0aC5hdGFuMih0WzFdLCB0WzBdKSsoc3R5bGUudmVydGljYWw/IE1hdGguUEkgLyAyOiAwKSxcclxuICAgICAgICAgICAgICAgIGZvbnRIZWlnaHQgPSBNYXRoLnNxcnQoKHRbMl0gKiB0WzJdKSArICh0WzNdICogdFszXSkpLFxyXG4gICAgICAgICAgICAgICAgZm9udEFzY2VudCA9IHN0eWxlLmFzY2VudD9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuYXNjZW50ICogZm9udEhlaWdodDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0eWxlLmRlc2NlbnQ/ICgxICsgc3R5bGUuZGVzY2VudCkgKiBmb250SGVpZ2h0OiBmb250SGVpZ2h0KTtcclxuICAgICAgICAgIHRlc3RTei5odG1sKGl0ZW0uc3RyLnN1YnN0cigwLCBoaXQub2Zmc2V0KSsnPHNwYW4+JytpdGVtLnN0ci5zdWJzdHIoaGl0Lm9mZnNldCwgaGl0Lmxlbmd0aCkrJzwvc3Bhbj4nK2l0ZW0uc3RyLnN1YnN0cihoaXQub2Zmc2V0K2hpdC5sZW5ndGgpKTtcclxuXHJcbiAgICAgICAgICB0ZXh0RGl2LnN0eWxlLmZvbnRTaXplID0gZm9udEhlaWdodCsncHgnO1xyXG4gICAgICAgICAgdGV4dERpdi5zdHlsZS5mb250RmFtaWx5ID0gc3R5bGUuZm9udEZhbWlseTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0ZXN0U3BhbiA9IHRlc3RTei5maW5kKCdzcGFuJyksXHJcbiAgICAgICAgICAgICAgaXdpZHRoID0gc3R5bGUudmVydGljYWw/IGl0ZW0uaGVpZ2h0KnRoaXMudmlld3BvcnQuc2NhbGU6IGl0ZW0ud2lkdGgqdGhpcy52aWV3cG9ydC5zY2FsZSxcclxuICAgICAgICAgICAgICB3aWR0aCA9IHRlc3RTei53aWR0aCgpLFxyXG4gICAgICAgICAgICAgIHJlbGF0aXZlT2Zmc2V0ID0gKHRlc3RTcGFuLm9mZnNldCgpLmxlZnQtYmFzZU9mZnNldCkvd2lkdGg7XHJcbiAgICAgICAgICB0aGlzLm0uc2V0KFxyXG4gICAgICAgICAgICAxLDAsMCxcclxuICAgICAgICAgICAgMCwxLDAsXHJcbiAgICAgICAgICAgIHRbNF0rZm9udEFzY2VudCpNYXRoLnNpbihhbmdsZSksdFs1XS1mb250QXNjZW50Kk1hdGguY29zKGFuZ2xlKSwxKTtcclxuICAgICAgICAgIGxldCBwb2x5ID0gdGhpcy5jcmVhdGVQb2x5KHRoaXMubSwge3g6IHJlbGF0aXZlT2Zmc2V0Kml3aWR0aCwgeTogMH0sIHt3aWR0aDogaXdpZHRoKnRlc3RTcGFuLndpZHRoKCkvd2lkdGgsIGhlaWdodDogdGVzdFNwYW4uaGVpZ2h0KCl9KTtcclxuICAgICAgICAgIHBvbHkgPSBwb2x5Lm1hcCgocCk9PiAoe3g6IHAueC90aGlzLnZpZXdwb3J0LndpZHRoLCB5OiAxLXAueS90aGlzLnZpZXdwb3J0LmhlaWdodH0pKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVySGl0KHBvbHkpO1xyXG4gICAgICB9XHJcbiAgICAgIHRlc3RTei5yZW1vdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFubm9DbGIoZSwgZGF0YSkge1xyXG4gICAgaWYodGhpcy5jb250ZXh0LmRpc3BhdGNoRXZlbnQpIHtcclxuICAgICAgdGhpcy5jb250ZXh0LmRpc3BhdGNoRXZlbnQoe1xyXG4gICAgICAgIHR5cGU6ICdwZGZBbm5vdGF0aW9uJyxcclxuICAgICAgICBldmVudDogZSxcclxuICAgICAgICBhbm5vdGF0aW9uOiBkYXRhLnRhcmdldC5hbm5vXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY1ZpZXdwb3J0KCkge1xyXG4gICAgY29uc3Qgc2NhbGUgPSBCYXNlTWF0aFV0aWxzLmNhbGNTY2FsZSh0aGlzLnNpemUud2lkdGgsIHRoaXMuc2l6ZS5oZWlnaHQsIHRoaXMucmVzVywgdGhpcy5yZXNIKTtcclxuICAgIGlmKCF0aGlzLnZpZXdwb3J0IHx8IE1hdGguYWJzKHRoaXMudmlld3BvcnQuc2NhbGUtc2NhbGUpPjFlLTQpIHtcclxuICAgICAgdGhpcy52aWV3cG9ydCA9IHRoaXMucGFnZS5nZXRWaWV3cG9ydChzY2FsZSk7XHJcbiAgICAgIGlmKHRoaXMudHlwZSE9PSdmdWxsJykge1xyXG4gICAgICAgIGlmKHRoaXMudHlwZT09PSdyaWdodCcpIHtcclxuICAgICAgICAgIHRoaXMudmlld3BvcnQub2Zmc2V0WCArPSAwLjUqdGhpcy52aWV3cG9ydC53aWR0aDtcclxuICAgICAgICAgIHRoaXMudmlld3BvcnQudHJhbnNmb3JtWzRdIC09IDAuNSp0aGlzLnZpZXdwb3J0LndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdwb3J0LndpZHRoIC89IDI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZXNXID0gdGhpcy53aWR0aCA9IHRoaXMudmlld3BvcnQud2lkdGg7XHJcbiAgICAgIHRoaXMucmVzSCA9IHRoaXMuaGVpZ2h0ID0gdGhpcy52aWV3cG9ydC5oZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0KCkge1xyXG4gICAgdGhpcy50eXBlID0gdGhpcy5wZGYuZ2V0UGFnZVR5cGUodGhpcy5uKTtcclxuICAgIHRoaXMucGRmLmdldFBhZ2UodGhpcy5uKS5cclxuICAgICAgdGhlbigocGFnZSk9PiB7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgICAgICB0aGlzLnNpemUgPSBQZGYuZ2V0UGFnZVNpemUocGFnZSk7XHJcbiAgICAgICAgaWYodGhpcy50eXBlIT09J2Z1bGwnKSB7XHJcbiAgICAgICAgICB0aGlzLnNpemUud2lkdGggLz0gMjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFnZS5nZXRBbm5vdGF0aW9ucygpLlxyXG4gICAgICAgICAgdGhlbih0aGlzLnNldEFubm90YXRpb25zLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHBhZ2UuZ2V0VGV4dENvbnRlbnQoKS5cclxuICAgICAgICAgIHRoZW4odGhpcy5zZXRIaXRzLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuY2FsY1ZpZXdwb3J0KCk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hMb2FkKCk7XHJcbiAgICAgIH0pLlxyXG4gICAgICBjYXRjaCgoZSk9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IGxvYWQgUERGIHBhZ2U6ICcrKHRoaXMubisxKSk7XHJcbiAgICAgICAgdGhpcy5maW5pc2hMb2FkKCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVzb2x1dGlvbihyZXMpIHtcclxuICAgIHN1cGVyLnNldFJlc29sdXRpb24ocmVzKTtcclxuICAgIGlmKHRoaXMucGFnZSkge1xyXG4gICAgICB0aGlzLmNhbGNWaWV3cG9ydCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVuZGVyKGhhbmRsZXIpIHtcclxuICAgIGlmKHRoaXMucGFnZSkge1xyXG4gICAgICB0aGlzLnBhZ2UucmVuZGVyKHtcclxuICAgICAgICBjYW52YXNDb250ZXh0OiB0aGlzLnB1c2hDdHgoKSxcclxuICAgICAgICB2aWV3cG9ydDogdGhpcy52aWV3cG9ydFxyXG4gICAgICB9KS5cclxuICAgICAgdGhlbigoKT0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckhpdHMoKTtcclxuICAgICAgICB0aGlzLnBvcEN0eCgpO1xyXG4gICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucmVuZGVyQmxhbmtQYWdlKCk7XHJcbiAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy9QZGZJbWFnZS5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWFyY2gge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIHBhZ2VzKSB7XHJcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgIHRoaXMucGFnZXMgPSBwYWdlcztcclxuICAgIHRoaXMucHJldlJlc3VsdHMgPSBbXTtcclxuICAgIGNvbnRhaW5lci5odG1sKGBcclxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJxdWVyeVwiPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPVwiaW5wUXVlcnlcIiB0eXBlPVwidGV4dFwiIG1heGxlbmd0aD1cIjMwXCIgdmFsdWU9XCJcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRzXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXR1c1wiPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICBgKTtcclxuICAgIHRoaXMucXVlcnkgPSBjb250YWluZXIuZmluZCgnLnF1ZXJ5IGlucHV0Jyk7XHJcbiAgICB0aGlzLnJlc3VsdHMgPSBjb250YWluZXIuZmluZCgnLnJlc3VsdHMnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gY29udGFpbmVyLmZpbmQoJy5zdGF0dXMnKTtcclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBuYXZpZ2F0ZTogdGhpcy5uYXZpZ2F0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICBkb1F1ZXJ5OiB0aGlzLmRvUXVlcnkuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnF1ZXJ5Lm9uKCdrZXlkb3duJywgdGhpcy5iaW5kcy5kb1F1ZXJ5KTtcclxuICAgIHRoaXMucmVzdWx0cy5vbignY2xpY2snLCB0aGlzLmJpbmRzLm5hdmlnYXRlKTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICB0aGlzLnJlc3VsdHMub2ZmKCdjbGljaycsIHRoaXMuYmluZHMubmF2aWdhdGUpO1xyXG4gICAgdGhpcy5xdWVyeS5vZmYoJ2tleWRvd24nLCB0aGlzLmJpbmRzLmRvUXVlcnkpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGUoZSkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYodGhpcy5vbk5hdmlnYXRlIT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCB0YXJnZXQgPSAkKGUudGFyZ2V0KTtcclxuICAgICAgaWYoIXRhcmdldC5oYXNDbGFzcygncmVzdWx0JykpIHtcclxuICAgICAgICBjb25zdCB0ID0gdGFyZ2V0LmZpbmQoJy5yZXN1bHQnKTtcclxuICAgICAgICBpZih0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGFyZ2V0ID0gdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB3aGlsZSh0YXJnZXQubGVuZ3RoICYmICF0YXJnZXQuaGFzQ2xhc3MoJ3Jlc3VsdCcpKSB7XHJcbiAgICAgICAgICAgIHRhcmdldCA9ICQodGFyZ2V0WzBdLnBhcmVudE5vZGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjb25zdCBwYWdlID0gdGFyZ2V0LmF0dHIoJ2RhdGEnKTtcclxuICAgICAgaWYocGFnZSE9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMub25OYXZpZ2F0ZShwYXJzZUludChwYWdlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvUXVlcnkoKSB7XHJcbiAgICBpZih0aGlzLm9uUXVlcnkpIHtcclxuICAgICAgY29uc3QgcXVlcnlTdGFtcCA9IHRoaXMucXVlcnlTdGFtcCA9IERhdGUubm93KCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgICAgaWYocXVlcnlTdGFtcCA9PT0gdGhpcy5xdWVyeVN0YW1wKSB7XHJcbiAgICAgICAgICB0aGlzLm9uUXVlcnkodGhpcy5xdWVyeVswXS52YWx1ZS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZXN1bHRzKHJlc3VsdHMsIGxhc3RQYWdlKSB7XHJcbiAgICBpZih0aGlzLnByZXZSZXN1bHRzLmxlbmd0aCAmJiByZXN1bHRzWzBdIT09dGhpcy5wcmV2UmVzdWx0c1swXSkge1xyXG4gICAgICB0aGlzLnByZXZSZXN1bHRzID0gW107XHJcbiAgICAgIHRoaXMucmVzdWx0cy5odG1sKCcnKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGh0bWxzID0gW107XHJcbiAgICBmb3IobGV0IGk9dGhpcy5wcmV2UmVzdWx0cy5sZW5ndGg7IGk8cmVzdWx0cy5sZW5ndGg7ICsraSkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSByZXN1bHRzW2ldO1xyXG4gICAgICBodG1scy5wdXNoKCc8ZGl2IGNsYXNzPVwicmVzdWx0XCIgZGF0YT1cIicrcmVzdWx0LnBhZ2UrJ1wiPicpO1xyXG4gICAgICAgIGh0bWxzLnB1c2goJzxhIGhyZWY9XCIjXCI+Jyk7XHJcbiAgICAgICAgICBodG1scy5wdXNoKCc8ZGl2PicrcmVzdWx0LmNvbnRleHRzLmpvaW4oJzwvZGl2PjxkaXY+JykrJzwvZGl2PicpO1xyXG4gICAgICAgIGh0bWxzLnB1c2goJzwvYT4nKTtcclxuICAgICAgaHRtbHMucHVzaCgnPC9kaXY+Jyk7XHJcbiAgICB9XHJcbiAgICAkKGh0bWxzLmpvaW4oJycpKS5hcHBlbmRUbyh0aGlzLnJlc3VsdHMpO1xyXG4gICAgdGhpcy5wcmV2UmVzdWx0cyA9IFsuLi5yZXN1bHRzXTtcclxuICAgIGlmKGxhc3RQYWdlPT09dW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmh0bWwoJycpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzLmh0bWwobGFzdFBhZ2UrJyBvZiAnK3RoaXMucGFnZXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvU2VhcmNoLmpzIiwiaW1wb3J0IHskfSBmcm9tICcuLi9saWJzJztcclxuaW1wb3J0IEltYWdlQmFzZSBmcm9tICcuL0ltYWdlQmFzZSc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRpY0ltYWdlIGV4dGVuZHMgSW1hZ2VCYXNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIHNyYykge1xyXG4gICAgc3VwZXIoY29udGV4dCwgd2lkdGgsIGhlaWdodCwgY29sb3IpO1xyXG5cclxuICAgIHRoaXMuYmluZHMgPSB7fVxyXG4gICAgdGhpcy5pbWFnZSA9IG5ldyBJbWFnZSgpO1xyXG4gICAgdGhpcy5pbWFnZS5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xyXG4gICAgdGhpcy5iaW5kcy5pbWFnZUxvYWQgPSAoKT0+IHtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaW1hZ2Uud2lkdGg7XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5pbWFnZS5oZWlnaHQ7XHJcbiAgICAgIHRoaXMuc3RhcnRSZW5kZXIgPSAoKT0+IHtcclxuICAgICAgICB0aGlzLnJlbmRlckltYWdlKHRoaXMuaW1hZ2UpO1xyXG4gICAgICAgIHRoaXMuZmluaXNoUmVuZGVyKCk7XHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZmluaXNoTG9hZCgpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuYmluZHMuaW1hZ2VFcnJvciA9ICgpPT4ge1xyXG4gICAgICB0aGlzLnN0YXJ0UmVuZGVyID0gKCk9PiB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJOb3RGb3VuZFBhZ2UoKTtcclxuICAgICAgICB0aGlzLmZpbmlzaFJlbmRlcigpO1xyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmZpbmlzaExvYWQoKTtcclxuICAgIH07XHJcbiAgICAkKHRoaXMuaW1hZ2UpLm9uKCdsb2FkJywgdGhpcy5iaW5kcy5pbWFnZUxvYWQpLm9uKCdlcnJvcicsIHRoaXMuYmluZHMuaW1hZ2VFcnJvcik7XHJcbiAgICB0aGlzLmltYWdlLnNyYyA9IFV0aWxzLm5vcm1hbGl6ZVVybChzcmMpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgICQodGhpcy5pbWFnZSkub2ZmKCdsb2FkJywgdGhpcy5iaW5kcy5pbWFnZUxvYWQpLm9mZignZXJyb3InLCB0aGlzLmJpbmRzLmltYWdlRXJyb3IpO1xyXG4gICAgdGhpcy5pbWFnZS5zcmMgPSAnJztcclxuICAgIGRlbGV0ZSB0aGlzLmltYWdlO1xyXG4gICAgc3VwZXIuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvU3RhdGljSW1hZ2UuanMiLCJpbXBvcnQge1RIUkVFfSBmcm9tICcuLi9saWJzJ1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dHVyZUFuaW1hdG9yIHtcclxuICBjb25zdHJ1Y3RvcihpbWcsIHRpbGVzSG9yaXosIHRpbGVzVmVydCwgbnVtVGlsZXMsIHRpbGVEaXNwRHVyYXRpb24pIHtcclxuXHJcbiAgICBjb25zdCB0ZXh0dXJlID0gbmV3IFRIUkVFLlRleHR1cmUoKTtcclxuICAgIHRleHR1cmUubWluRmlsdGVyID0gVEhSRUUuTGluZWFyRmlsdGVyO1xyXG4gICAgdGV4dHVyZS5pbWFnZSA9IGltZztcclxuICAgIHRleHR1cmUubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG5cclxuICBcdC8vIG5vdGU6IHRleHR1cmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSwgd2lsbCBiZSB1cGRhdGVkIGJ5IHRoZSB1cGRhdGUgZnVuY3Rpb24uXHJcbiAgICB0aGlzLnRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gIFx0dGhpcy50aWxlc0hvcml6b250YWwgPSB0aWxlc0hvcml6O1xyXG4gIFx0dGhpcy50aWxlc1ZlcnRpY2FsID0gdGlsZXNWZXJ0O1xyXG4gIFx0Ly8gaG93IG1hbnkgaW1hZ2VzIGRvZXMgdGhpcyBzcHJpdGVzaGVldCBjb250YWluP1xyXG4gIFx0Ly8gIHVzdWFsbHkgZXF1YWxzIHRpbGVzSG9yaXogKiB0aWxlc1ZlcnQsIGJ1dCBub3QgbmVjZXNzYXJpbHksXHJcbiAgXHQvLyAgaWYgdGhlcmUgYXQgYmxhbmsgdGlsZXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3ByaXRlc2hlZXQuXHJcbiAgXHR0aGlzLm51bWJlck9mVGlsZXMgPSBudW1UaWxlcztcclxuICBcdHRleHR1cmUucmVwZWF0LnNldCgxL3RoaXMudGlsZXNIb3Jpem9udGFsLCAxL3RoaXMudGlsZXNWZXJ0aWNhbCk7XHJcblxyXG4gIFx0Ly8gaG93IGxvbmcgc2hvdWxkIGVhY2ggaW1hZ2UgYmUgZGlzcGxheWVkP1xyXG4gIFx0dGhpcy50aWxlRGlzcGxheUR1cmF0aW9uID0gdGlsZURpc3BEdXJhdGlvbjtcclxuXHJcbiAgXHQvLyBob3cgbG9uZyBoYXMgdGhlIGN1cnJlbnQgaW1hZ2UgYmVlbiBkaXNwbGF5ZWQ/XHJcbiAgXHR0aGlzLmN1cnJlbnREaXNwbGF5VGltZSA9IDA7XHJcblxyXG4gIFx0Ly8gd2hpY2ggaW1hZ2UgaXMgY3VycmVudGx5IGJlaW5nIGRpc3BsYXllZD9cclxuICBcdHRoaXMuY3VycmVudFRpbGUgPSAwO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlKG1pbGxpU2VjKSB7XHJcbiAgICB0aGlzLmN1cnJlbnREaXNwbGF5VGltZSArPSBtaWxsaVNlYztcclxuICAgIHdoaWxlKHRoaXMuY3VycmVudERpc3BsYXlUaW1lID4gdGhpcy50aWxlRGlzcGxheUR1cmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudERpc3BsYXlUaW1lIC09IHRoaXMudGlsZURpc3BsYXlEdXJhdGlvbjtcclxuICAgICAgKyt0aGlzLmN1cnJlbnRUaWxlO1xyXG4gICAgICBpZih0aGlzLmN1cnJlbnRUaWxlID09IHRoaXMubnVtYmVyT2ZUaWxlcylcclxuICAgICAgICB0aGlzLmN1cnJlbnRUaWxlID0gMDtcclxuICAgICAgdmFyIGN1cnJlbnRDb2x1bW4gPSB0aGlzLmN1cnJlbnRUaWxlJXRoaXMudGlsZXNIb3Jpem9udGFsO1xyXG4gICAgICB0aGlzLnRleHR1cmUub2Zmc2V0LnggPSBjdXJyZW50Q29sdW1uL3RoaXMudGlsZXNIb3Jpem9udGFsO1xyXG4gICAgICB2YXIgY3VycmVudFJvdyA9IE1hdGguZmxvb3IodGhpcy5jdXJyZW50VGlsZS90aGlzLnRpbGVzSG9yaXpvbnRhbCk7XHJcbiAgICAgIHRoaXMudGV4dHVyZS5vZmZzZXQueSA9IGN1cnJlbnRSb3cvdGhpcy50aWxlc1ZlcnRpY2FsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIGNvbnN0IGltZyA9IHRoaXMudGV4dHVyZS5pbWFnZTtcclxuICAgIGltZy5oZWlnaHQgPSBpbWcud2lkdGggPSAwO1xyXG4gICAgdGhpcy50ZXh0dXJlLmRpc3Bvc2UoKTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGV4dHVyZUFuaW1hdG9yLmpzIiwiaW1wb3J0IHtUSFJFRSwgJH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcclxuaW1wb3J0IE1vdXNlRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9Nb3VzZUV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IFRocmVlRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9UaHJlZUV2ZW50Q29udmVydGVyJztcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUaHJlZU1vdXNlRXZlbnRDb252ZXJ0ZXIgZXh0ZW5kcyBNb3VzZUV2ZW50Q29udmVydGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIHZpc3VhbFdvcmxkLCB0ZXN0KSB7XHJcbiAgICBzdXBlcih3bmQsIGRvYywgdmlzdWFsV29ybGQuZWxlbWVudCk7XHJcbiAgICBVdGlscy5leHRlbmRzKHRoaXMsIG5ldyBUaHJlZUV2ZW50Q29udmVydGVyKHZpc3VhbFdvcmxkLCB0ZXN0KSk7XHJcbiAgfVxyXG5cclxuICBnZXRDYWxsYmFjayhvYmplY3QpIHtcclxuICAgIHJldHVybiBvYmplY3Qub2JqZWN0LnVzZXJEYXRhLm1vdXNlQ2FsbGJhY2s7XHJcbiAgfVxyXG5cclxuICBzZXRDb29yZHNGcm9tRXZlbnQoZSkge1xyXG4gICAgY29uc3QgakVsZW1lbnQgPSAkKHRoaXMuZWxlbWVudCk7XHJcbiAgICBjb25zdCBvZmZzZXQgPSBqRWxlbWVudC5vZmZzZXQoKTtcclxuICAgIHRoaXMuY29vcmRzLnggPSAoKGUucGFnZVgtb2Zmc2V0LmxlZnQpL2pFbGVtZW50LndpZHRoKCkpKjItMTtcclxuICAgIHRoaXMuY29vcmRzLnkgPSAtKChlLnBhZ2VZLW9mZnNldC50b3ApL2pFbGVtZW50LmhlaWdodCgpKSoyKzE7XHJcbiAgICByZXR1cm4gdGhpcy5jb29yZHM7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlTW91c2VFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCB7VEhSRUUsICR9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XHJcbmltcG9ydCBUb3VjaEV2ZW50Q29udmVydGVyIGZyb20gJy4vVG91Y2hFdmVudENvbnZlcnRlcic7XHJcbmltcG9ydCBUaHJlZUV2ZW50Q29udmVydGVyIGZyb20gJy4vVGhyZWVFdmVudENvbnZlcnRlcic7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyIGV4dGVuZHMgVG91Y2hFdmVudENvbnZlcnRlciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHduZCwgZG9jLCB2aXN1YWxXb3JsZCwgdGVzdCkge1xyXG4gICAgc3VwZXIod25kLCBkb2MsIHZpc3VhbFdvcmxkLmVsZW1lbnQpO1xyXG4gICAgVXRpbHMuZXh0ZW5kcyh0aGlzLCBuZXcgVGhyZWVFdmVudENvbnZlcnRlcih2aXN1YWxXb3JsZCwgdGVzdCkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2FsbGJhY2sob2JqZWN0KSB7XHJcbiAgICByZXR1cm4gb2JqZWN0Lm9iamVjdC51c2VyRGF0YS50b3VjaENhbGxiYWNrO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29vcmRzRnJvbUV2ZW50KGUpIHtcclxuICAgIGNvbnN0IGpFbGVtZW50ID0gJCh0aGlzLmVsZW1lbnQpLCBvZmZzZXQgPSBqRWxlbWVudC5vZmZzZXQoKSxcclxuICAgICAgdG91Y2hlcyA9IGUudG91Y2hlcyB8fCBlLm9yaWdpbmFsRXZlbnQudG91Y2hlcywgdG91Y2ggPSB0b3VjaGVzLmxlbmd0aD8gdG91Y2hlc1swXTogKHRoaXMubGFzdFRvdWNoZXMgfHwgW3twYWdlWDogMCwgcGFnZVk6IDB9XSlbMF0sXHJcbiAgICAgIHBhZ2VYID0gdG91Y2gucGFnZVgsIHBhZ2VZID0gdG91Y2gucGFnZVk7XHJcbiAgICB0aGlzLmxhc3RUb3VjaGVzID0gdG91Y2hlcy5sZW5ndGg/IHRvdWNoZXM6IHRoaXMubGFzdFRvdWNoZXM7XHJcbiAgICB0aGlzLmNvb3Jkcy54ID0gKChwYWdlWC1vZmZzZXQubGVmdCkvakVsZW1lbnQud2lkdGgoKSkqMi0xO1xyXG4gICAgdGhpcy5jb29yZHMueSA9IC0oKHBhZ2VZLW9mZnNldC50b3ApL2pFbGVtZW50LmhlaWdodCgpKSoyKzE7XHJcbiAgICByZXR1cm4gdGhpcy5jb29yZHM7XHJcbiAgfVxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1RocmVlVG91Y2hFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBJbWFnZUZhY3RvcnkgZnJvbSAnLi9JbWFnZUZhY3RvcnknO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGh1bWJuYWlscyB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnRhaW5lciwgdGh1bWJuYWlsc0NsYiwgc2l6ZSwgcHJvcHM9e2tXdG9IOiAyMTAvMjk3fSkge1xyXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICB0aGlzLnAgPSBwcm9wcztcclxuICAgIHRoaXMudGh1bWJuYWlsc0NsYiA9IHRodW1ibmFpbHNDbGI7XHJcbiAgICB0aGlzLnNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5jYW52YXMgPSAkKCc8Y2FudmFzPicpWzBdO1xyXG4gICAgdGhpcy5pbWFnZUZhY3RvcnkgPSBuZXcgSW1hZ2VGYWN0b3J5KHtcclxuICAgICAgLi4uY29udGV4dCxcclxuICAgICAgcmVuZGVyQ2FudmFzOiB0aGlzLmNhbnZhcyxcclxuICAgICAgcmVuZGVyQ2FudmFzQ3R4OiB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpXHJcbiAgICB9KTtcclxuICAgIHRoaXMudGh1bWJuYWlscyA9IFtdO1xyXG4gICAgZm9yKGxldCBpPTA7IGk8c2l6ZTsgKytpKSB7XHJcbiAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnRodW1ibmFpbHNDbGIoaSk7XHJcbiAgICAgIHRoaXMudGh1bWJuYWlscy5wdXNoKHtcclxuICAgICAgICAuLi5pbmZvLFxyXG4gICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgIGxvYWRlZDogaW5mby50eXBlPT09J3RodW1ibmFpbC1pbWFnZScsXHJcbiAgICAgICAgaGVhZGluZzogbnVsbCxcclxuICAgICAgICB0aHVtYm5haWw6IG51bGwsXHJcbiAgICAgICAgdGl0bGU6IGluZm8udGl0bGUgfHwgaVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICB1cGRhdGU6IHRoaXMudXBkYXRlLmJpbmQodGhpcyksXHJcbiAgICAgIG5hdmlnYXRlOiAoZSk9PiB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmKHRoaXMub25OYXZpZ2F0ZSkge1xyXG4gICAgICAgICAgbGV0IG5vZGUgPSBlLnRhcmdldDtcclxuICAgICAgICAgIHdoaWxlKG5vZGUgJiYgIW5vZGUuZGF0YVRodW1ibmFpbCkge1xyXG4gICAgICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vbk5hdmlnYXRlKG5vZGUuZGF0YVRodW1ibmFpbC5pbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy5jb250YWluZXIub24oJ3Njcm9sbCcsIHRoaXMuYmluZHMudXBkYXRlKTtcclxuICB9XHJcblxyXG4gIGdldFNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zaXplO1xyXG4gIH1cclxuXHJcbiAgc2V0RW5hYmxlKGVuYWJsZSkge1xyXG4gICAgdGhpcy5lbmFibGUgPSBlbmFibGU7XHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2EnKS5vZmYoJ2NsaWNrJywgdGhpcy5iaW5kcy5uYXZpZ2F0ZSk7XHJcbiAgICB0aGlzLmNvbnRhaW5lci5vZmYoJ3Njcm9sbCcsIHRoaXMuYmluZHMudXBkYXRlKTtcclxuICAgIHRoaXMuY29udGFpbmVyLmh0bWwoJycpO1xyXG4gICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gdGhpcy5jYW52YXMud2lkdGggPSAwO1xyXG4gICAgZGVsZXRlIHRoaXMuY2FudmFzO1xyXG4gIH1cclxuXHJcbiAgbG9hZCh0aHVtYm5haWwpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5pbWFnZUZhY3RvcnkuYnVpbGQodGh1bWJuYWlsLCB0aHVtYm5haWwubnVtYmVyPT09dW5kZWZpbmVkPyB0aHVtYm5haWwuaW5kZXg6IHRodW1ibmFpbC5udW1iZXIsIHRoaXMucC5rV3RvSCozMDAsIDMwMCk7XHJcbiAgICB3cmFwcGVyLm9uQ2hhbmdlID0gKGNhbnZhcyk9PiB7XHJcbiAgICAgIHRoaXMuc2V0SW1hZ2UodGh1bWJuYWlsLCBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XHJcbiAgICAgIHRodW1ibmFpbC5sb2FkZWQgPSB0cnVlO1xyXG4gICAgICB3cmFwcGVyLmRpc3Bvc2UoKTtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PiB0aGlzLnVwZGF0ZSgpKTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBnZXRBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBmaXJzdCA9IHRoaXMuY29udGFpbmVyLnNjcm9sbFRvcCgpLCBsYXN0ID0gZmlyc3QgKyB0aGlzLmNvbnRhaW5lci5oZWlnaHQoKSwgcmVzID0gW107XHJcbiAgICBmb3IobGV0IHRodW1ibmFpbCBvZiB0aGlzLnRodW1ibmFpbHMpIHtcclxuICAgICAgaWYoTWF0aC5tYXgodGh1bWJuYWlsLmZpcnN0LCBmaXJzdCk8TWF0aC5taW4odGh1bWJuYWlsLmxhc3QsIGxhc3QpKSB7XHJcbiAgICAgICAgcmVzLnB1c2godGh1bWJuYWlsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcztcclxuICB9XHJcblxyXG4gIHVwZGF0ZSgpIHtcclxuICAgIGlmKCF0aGlzLmxvYWRpbmcgJiYgdGhpcy5jYW52YXMgJiYgdGhpcy5lbmFibGUpIHtcclxuICAgICAgaWYoIXRoaXMuYnVpbHQpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuZ2V0QWN0aXZlKCk7XHJcbiAgICAgIGZvcihsZXQgdGh1bWJuYWlsIG9mIGFjdGl2ZSkge1xyXG4gICAgICAgIGlmKCF0aHVtYm5haWwubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmxvYWQodGh1bWJuYWlsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SW1hZ2UodGh1bWJuYWlsLCBpbWcpIHtcclxuICAgIHRodW1ibmFpbC5pbWcgPSBpbWc7XHJcbiAgICB0aHVtYm5haWwudGh1bWJuYWlsLmNzcygnYmFja2dyb3VuZC1pbWFnZScsIFsndXJsKFxcJycsIGltZywnXFwnKSddLmpvaW4oJycpKTtcclxuICAgIHRodW1ibmFpbC50aHVtYm5haWwucmVtb3ZlQ2xhc3MoJ2xvYWRpbmcnKTtcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gWyc8ZGl2IGNsYXNzPVwidGh1bWJuYWlsc1wiPiddXHJcbiAgICBmb3IobGV0IGk9MDsgaTx0aGlzLnNpemU7ICsraSkge1xyXG4gICAgICBlbGVtZW50cy5wdXNoKFsnPGRpdiBjbGFzcz1cIml0ZW1cIj48YSBocmVmPVwiI1wiPjxkaXYgY2xhc3M9XCJ0aHVtYm5haWwgbG9hZGluZ1wiPjwvZGl2PjwvYT48ZGl2IGNsYXNzPVwiaGVhZGluZ1wiPjxhIGhyZWY9XCIjXCIgdGl0bGU9XCInLCBpKzEsJ1wiPicsIGkrMSwgJzwvYT48L2Rpdj48L2Rpdj4nXS5qb2luKCcnKSk7XHJcbiAgICB9XHJcbiAgICBlbGVtZW50cy5wdXNoKCc8L2Rpdj4nKTtcclxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChlbGVtZW50cy5qb2luKCcnKSk7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5pdGVtJyksIGJhc2UgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcudGh1bWJuYWlscycpLm9mZnNldCgpLnRvcDtcclxuICAgIGZvcihsZXQgaT0wOyBpPGl0ZW1zLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSAkKGl0ZW1zW2ldKTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzW2ldLmhlYWRpbmcgPSBpdGVtLmZpbmQoJy5oZWFkaW5nJyk7XHJcbiAgICAgIHRoaXMudGh1bWJuYWlsc1tpXS50aHVtYm5haWwgPSBpdGVtLmZpbmQoJy50aHVtYm5haWwnKTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzW2ldLmZpcnN0ID0gaXRlbS5vZmZzZXQoKS50b3AtYmFzZTtcclxuICAgICAgdGhpcy50aHVtYm5haWxzW2ldLmxhc3QgPSB0aGlzLnRodW1ibmFpbHNbaV0uZmlyc3QraXRlbS5oZWlnaHQoKTtcclxuICAgICAgaWYodGhpcy50aHVtYm5haWxzW2ldLmxvYWRlZCkge1xyXG4gICAgICAgIHRoaXMuc2V0SW1hZ2UodGhpcy50aHVtYm5haWxzW2ldLCB0aGlzLnRodW1ibmFpbHNbaV0uc3JjKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhcyA9IGl0ZW0uZmluZCgnYScpO1xyXG4gICAgICBmb3IobGV0IGo9MDsgajxhcy5sZW5ndGg7ICsraikge1xyXG4gICAgICAgIGNvbnN0IGEgPSBhc1tqXTtcclxuICAgICAgICBhLmRhdGFUaHVtYm5haWwgPSB0aGlzLnRodW1ibmFpbHNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2EnKS5vbignY2xpY2snLCB0aGlzLmJpbmRzLm5hdmlnYXRlKTtcclxuICAgIHRoaXMuYnVpbHQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVGh1bWJuYWlscy5qcyIsImltcG9ydCB7JH0gZnJvbSAnLi4vbGlicyc7XHJcbmltcG9ydCBFdmVudENvbnZlcnRlciBmcm9tICcuL0V2ZW50Q29udmVydGVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvdWNoQ29udmVydGVyIGV4dGVuZHMgRXZlbnRDb252ZXJ0ZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bmQsIGRvYywgZWxlbWVudCkge1xyXG4gICAgc3VwZXIod25kLCBkb2MpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLmJpbmRzID0ge1xyXG4gICAgICBjb252ZXJ0OiB0aGlzLmNvbnZlcnQuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgICQodGhpcy5lbGVtZW50KS5vbigndG91Y2hzdGFydCB0b3VjaG1vdmUnLCB0aGlzLmJpbmRzLmNvbnZlcnQpO1xyXG4gICAgJCh0aGlzLmRvYykub24oJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcblxyXG4gIGRpc3Bvc2UoKSB7XHJcbiAgICAkKHRoaXMuZWxlbWVudCkub2ZmKCd0b3VjaHN0YXJ0IHRvdWNobW92ZScsIHRoaXMuYmluZHMuY29udmVydCk7XHJcbiAgICAkKHRoaXMuZG9jKS5vZmYoJ3RvdWNoZW5kJywgdGhpcy5iaW5kcy5jb252ZXJ0KTtcclxuICB9XHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVG91Y2hFdmVudENvbnZlcnRlci5qcyIsImltcG9ydCB7JCwgdHJ9IGZyb20gJy4uL2xpYnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlldyB7XHJcblxyXG4gIHN0YXRpYyBsaW5rU3RhdGVIYW5kbGVycyA9IHtcclxuICAgIHZpc2libGU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmNsYXNzUHJvcGVydHkoY3RybCwgJ2hpZGRlbicsICF2YWx1ZSksXHJcbiAgICBhY3RpdmU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmNsYXNzUHJvcGVydHkoY3RybCwgJ2FjdGl2ZScsIHZhbHVlKSxcclxuICAgIGVuYWJsZTogKGN0cmwsIHZhbHVlKT0+IFZpZXcuY2xhc3NQcm9wZXJ0eShjdHJsLCAnZGlzYWJsZWQnLCAhdmFsdWUpXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIHdpZGdldFN0YXRlSGFuZGxlcnMgPSB7XHJcbiAgICB2aXNpYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdoaWRkZW4nLCAhdmFsdWUpLFxyXG4gICAgYWN0aXZlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdhY3RpdmUnLCB2YWx1ZSksXHJcbiAgICBlbmFibGU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmNsYXNzUHJvcGVydHkoY3RybCwgJ2Rpc2FibGVkJywgIXZhbHVlKVxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBpbnB1dFN0YXRlSGFuZGxlcnMgPSB7XHJcbiAgICB2aXNpYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdoaWRkZW4nLCAhdmFsdWUpLFxyXG4gICAgdmFsdWU6IChjdHJsLCB2YWx1ZSk9PiBjdHJsWzBdLnZhbHVlID0gdmFsdWUsXHJcbiAgICBlbmFibGU6IChjdHJsLCB2YWx1ZSk9PiBWaWV3LmF0dHJpYnV0ZVByb3BlcnR5KGN0cmwsICdkaXNhYmxlZCcsICF2YWx1ZSlcclxuICB9O1xyXG5cclxuICBzdGF0aWMgdGV4dFN0YXRlSGFuZGxlcnMgPSB7XHJcbiAgICB2aXNpYmxlOiAoY3RybCwgdmFsdWUpPT4gVmlldy5jbGFzc1Byb3BlcnR5KGN0cmwsICdoaWRkZW4nLCAhdmFsdWUpLFxyXG4gICAgdmFsdWU6IChjdHJsLCB2YWx1ZSk9PiBjdHJsLnRleHQodmFsdWUpXHJcbiAgfTtcclxuXHJcbiAgc3RhdGljIGNsYXNzUHJvcGVydHkoY3RybCwgY2xhc3NOYW1lLCB2YWx1ZSkge1xyXG4gICAgaWYodmFsdWUpIHtcclxuICAgICAgY3RybC5hZGRDbGFzcyhjbGFzc05hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGN0cmwucmVtb3ZlQ2xhc3MoY2xhc3NOYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXRpYyBhdHRyaWJ1dGVQcm9wZXJ0eShjdHJsLCBhdHRyaWJ1dGVOYW1lLCB2YWx1ZSkge1xyXG4gICAgaWYodmFsdWUpIHtcclxuICAgICAgY3RybC5hdHRyKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjdHJsLnJlbW92ZUF0dHIoYXR0cmlidXRlTmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2FsbEhhbmRsZXJzKGhhbmRsZXJzLCBpZCwgZSwgZGF0YSkge1xyXG4gICAgZm9yKGxldCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XHJcbiAgICAgIGlmKGhhbmRsZXJbaWRdKSB7XHJcbiAgICAgICAgaGFuZGxlcltpZF0oZSwgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihoYW5kbGVyLmhhbmRsZURlZmF1bHQpIHtcclxuICAgICAgICBoYW5kbGVyLmhhbmRsZURlZmF1bHQoaWQsIGUsIGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaGFuZGxlRXZlbnQoaWQsIGdldEhhbmRsZXJzLCBlLCBkYXRhKSB7XHJcbiAgICBWaWV3LmNhbGxIYW5kbGVycyhnZXRIYW5kbGVycyhpZCksIGlkLCBlLCBkYXRhKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBoYW5kbGVMaW5rRXZlbnQoZSkge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYoIXRoaXMuY3RybC5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xyXG4gICAgICBWaWV3LmhhbmRsZUV2ZW50KHRoaXMuaWQsIHRoaXMuZ2V0SGFuZGxlcnMsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGhhbmRsZUlucHV0RXZlbnQoZSkge1xyXG4gICAgVmlldy5oYW5kbGVFdmVudCh0aGlzLmlkLCB0aGlzLmdldEhhbmRsZXJzLCBlLCBlLnRhcmdldC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaGFuZGxlRm9ybUV2ZW50KGUpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIFZpZXcuaGFuZGxlRXZlbnQodGhpcy5pZCwgdGhpcy5nZXRIYW5kbGVycywgZSk7XHJcbiAgfVxyXG5cclxuICAvLyB2aXJ0dWFsIGZ1bmN0aW9ucyB7XHJcbiAgZ2V0TGlua3MoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFdpZGdldHMoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldElucHV0cygpIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGV4dHMoKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFRlbXBsYXRlKCkge1xyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgZ2V0SGFuZGxlcnMoaWQpIHtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzO1xyXG4gIH1cclxuICAvLyB9XHJcblxyXG4gIGNhbGxMYXRlcihoYW5kbGVycywgaWQsIGUsIGRhdGEsIG1zKSB7XHJcbiAgICB0aGlzLnBlbmRpbmdzW2lkXSA9IHtcclxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxyXG4gICAgfTtcclxuICAgIHNldFRpbWVvdXQoKCk9PiB7XHJcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nc1tpZF07XHJcbiAgICAgIGlmKHBlbmRpbmcgJiYgdGltZXN0YW1wLXBlbmRpbmcudGltZXN0YW1wPj1tcykge1xyXG4gICAgICAgIFZpZXcuY2FsbEhhbmRsZXJzKGhhbmRsZXJzLCBpZCwgZSwgZGF0YSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ3NbaWRdO1xyXG4gICAgICB9XHJcbiAgICB9LCBtcyk7XHJcbiAgfVxyXG5cclxuICAvLyBsb2FkRmlsZXModXJscywgcmVhZHksIGZhaWx1cmUpIHtcclxuICAvLyAgIGxldCBkb25lID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgLy8gICBmb3IobGV0IHVybCBvZiB1cmxzKSB7XHJcbiAgLy8gICAgIGRvbmUgPSBkb25lLnRoZW4oKCk9PiB7XHJcbiAgLy8gICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT4ge1xyXG4gIC8vICAgICAgICAgJC5nZXQodXJsLCAocmVzKT0+IHtcclxuICAvLyAgICAgICAgICAgcmVhZHkocmVzLCB1cmwpO1xyXG4gIC8vICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgLy8gICAgICAgICB9KS5mYWlsKChyZXMpPT4ge1xyXG4gIC8vICAgICAgICAgICBpZihmYWlsdXJlICYmIGZhaWx1cmUocmVzLCB1cmwpKSB7XHJcbiAgLy8gICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICAgIGVsc2Uge1xyXG4gIC8vICAgICAgICAgICAgIHJlamVjdChyZXMpO1xyXG4gIC8vICAgICAgICAgICB9XHJcbiAgLy8gICAgICAgICB9KTtcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gZG9uZTtcclxuICAvLyB9XHJcblxyXG4gIGxvYWRGaWxlcyh1cmxzLCBmaWxlcykge1xyXG4gICAgY29uc3QgdGFza3MgPSBbXTtcclxuICAgIGZvcihsZXQgbmFtZSBvZiBPYmplY3Qua2V5cyh1cmxzKSkge1xyXG4gICAgICBmaWxlc1tuYW1lXSA9IFtdO1xyXG4gICAgICBmb3IobGV0IHVybCBvZiB1cmxzW25hbWVdKSB7XHJcbiAgICAgICAgdGFza3MucHVzaChcclxuICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpPT4ge1xyXG4gICAgICAgICAgICAkLmdldCh1cmwsIChkYXRhKT0+IHtcclxuICAgICAgICAgICAgICBmaWxlc1tuYW1lXS5wdXNoKHt1cmwsIGRhdGF9KTtcclxuICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pLmZhaWwoKHJlcyk9PiB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KHJlcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGFza3MpO1xyXG4gIH1cclxuXHJcbiAgdXJsUmVzb2x2ZXIoYmFzZVVybCwgdXJsKSB7XHJcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xyXG4gICAgaWYodXJsLmNoYXJBdCgwKSE9PScvJykge1xyXG4gICAgICBiYXNlVXJsID0gYmFzZVVybC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbiAgICAgIGNvbnN0IHAgPSBiYXNlVXJsLmxhc3RJbmRleE9mKCcvJyk7XHJcbiAgICAgIHVybCA9ICh+cD8gYmFzZVVybC5zdWJzdHIoMCwgcCsxKTogJycpK3VybDtcclxuXHJcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJyk7XHJcbiAgICAgIHVybCA9IFtdO1xyXG4gICAgICBmb3IobGV0IHBhcnQgb2YgcGFydHMpIHtcclxuICAgICAgICBpZihwYXJ0PT09Jy4nKSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYocGFydD09PScuLicpIHtcclxuICAgICAgICAgIGlmKHVybC5sZW5ndGggJiYgISh1cmwubGVuZ3RoPT09MSAmJiB1cmxbMF09PT0nJykpIHtcclxuICAgICAgICAgICAgdXJsLnBvcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHVybC5wdXNoKHBhcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB1cmwgPSB1cmwuam9pbignLycpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxuICBvYmpUb0F0dHJzU3RyKG8pIHtcclxuICAgIGNvbnN0IHJlcyA9IFtdO1xyXG4gICAgZm9yKGxldCBuYW1lIG9mIE9iamVjdC5rZXlzKG8pKSB7XHJcbiAgICAgIHJlcy5wdXNoKFtuYW1lLCAnPVwiJywgb1tuYW1lXSwgJ1wiJ10uam9pbignJykpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlcy5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0lmcmFtZVNpemUoKSB7XHJcbiAgICBpZih0aGlzLmZyYW1lKSB7XHJcbiAgICAgIGlmKE1hdGguYWJzKHRoaXMuZnJhbWUud2lkdGgtdGhpcy5wYXJlbnRDb250YWluZXIud2lkdGgoKSk+MSB8fCBNYXRoLmFicyh0aGlzLmZyYW1lLmhlaWdodC10aGlzLnBhcmVudENvbnRhaW5lci5oZWlnaHQoKSk+MSkge1xyXG4gICAgICAgIHRoaXMub25SZXNpemUoKTtcclxuICAgICAgfVxyXG4gICAgICBzZXRUaW1lb3V0KHRoaXMuY2hlY2tJZnJhbWVTaXplLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuZnJhbWUud2lkdGggPSB0aGlzLnBhcmVudENvbnRhaW5lci53aWR0aCgpO1xyXG4gICAgdGhpcy5mcmFtZS5oZWlnaHQgPSB0aGlzLnBhcmVudENvbnRhaW5lci5oZWlnaHQoKTtcclxuICB9XHJcblxyXG4gIHRyYW5zbGF0ZShodG1sKSB7XHJcbiAgICByZXR1cm4gaHRtbC5yZXBsYWNlKC88XFwkdHI+KC4qKTxcXC9cXCR0cj4vZ2ksIChzMCxzMSk9PiB0cihzMSkpO1xyXG4gIH1cclxuXHJcbiAgZmlyZUxpbmtzT25Mb2FkRXZlbnQoKSB7XHJcbiAgICBpZih0aGlzLnRlbXBsYXRlT2JqZWN0ICYmIHRoaXMudGVtcGxhdGVPYmplY3QubGlua0xvYWRlZCkge1xyXG4gICAgICBsZXQgbG9hZGVkID0gdHJ1ZTtcclxuICAgICAgZm9yKGxldCBqTGluayBvZiB0aGlzLmpMaW5rcykge1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBqTGlua1swXTtcclxuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgICBpbWcub25lcnJvciA9ICgpPT4gdGhpcy50ZW1wbGF0ZU9iamVjdC5saW5rTG9hZGVkKGxpbmspO1xyXG4gICAgICAgIGltZy5zcmMgPSBsaW5rLmhyZWY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHBhcmVudENvbnRhaW5lciwgb25Mb2FkLCB0ZW1wbGF0ZT17fSkge1xyXG4gICAgdGhpcy5wZW5kaW5ncyA9IHt9O1xyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgb25SZXNpemU6IHRoaXMub25SZXNpemUuYmluZCh0aGlzKVxyXG4gICAgfTtcclxuICAgIHRoaXMucGFyZW50Q29udGFpbmVyID0gJChwYXJlbnRDb250YWluZXIpO1xyXG4gICAgdGhpcy5pc0lPUyA9IC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpICYmICF3aW5kb3cuTVNTdHJlYW07XHJcbiAgICB0aGlzLnBhcmVudENvbnRhaW5lci5odG1sKCc8aWZyYW1lIHN0eWxlPVwiYm9yZGVyOiAwOycrKHRoaXMuaXNJT1M/ICcnOiAnIHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCUnKSsnXCIgc2Nyb2xsaW5nPVwibm9cIj48L2lmcmFtZT4nKTtcclxuXHJcbiAgICB0aGlzLmZyYW1lID0gdGhpcy5wYXJlbnRDb250YWluZXIuZmluZCgnaWZyYW1lJylbMF07XHJcbiAgICBpZih0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuc3RvcCkge1xyXG4gICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuc3RvcCgpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5pc0lPUykge1xyXG4gICAgICAkKHRoaXMucGFyZW50Q29udGFpbmVyWzBdLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpLm9uKCdyZXNpemUnLCB0aGlzLmJpbmRzLm9uUmVzaXplKTtcclxuICAgICAgdGhpcy5vblJlc2l6ZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KHRoaXMuY2hlY2tJZnJhbWVTaXplLmJpbmQodGhpcyksIDI1MCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb250YWluZXIgPSAkKHRoaXMuZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkpO1xyXG4gICAgdGhpcy5jb250YWluZXIuY3NzKCdtYXJnaW4nLCAnMCcpO1xyXG4gICAgdGhpcy5oZWFkID0gJCh0aGlzLmZyYW1lLmNvbnRlbnREb2N1bWVudC5oZWFkKTtcclxuICAgIHRoaXMub25Mb2FkID0gb25Mb2FkO1xyXG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IHRlbXBsYXRlLmh0bWw/IHRlbXBsYXRlLnNjcmlwdDogdGhpcy5nZXRUZW1wbGF0ZSgpLnNjcmlwdDtcclxuICAgIGNvbnN0IHVybHMgPSB7XHJcbiAgICAgIHN0eWxlczogdGVtcGxhdGUuc3R5bGVzIHx8IHRoaXMuZ2V0VGVtcGxhdGUoKS5zdHlsZXMsXHJcbiAgICAgIGh0bWw6IFt0ZW1wbGF0ZS5odG1sIHx8IHRoaXMuZ2V0VGVtcGxhdGUoKS5odG1sXSxcclxuICAgICAgc2NyaXB0OiBzY3JpcHQ/IFtzY3JpcHRdOiBbXVxyXG4gICAgfSwgZmlsZXMgPSB7fSwgbGlua3MgPSB0ZW1wbGF0ZS5saW5rcyB8fCB0aGlzLmdldFRlbXBsYXRlKCkubGlua3M7XHJcblxyXG4gICAgdGhpcy5sb2FkRmlsZXModXJscywgZmlsZXMpLnRoZW4oKCk9PiB7XHJcbiAgICAgIGZvcihsZXQgc3R5bGUgb2YgZmlsZXMuc3R5bGVzKSB7XHJcbiAgICAgICAgbGV0IHRleHRDc3MgPSBzdHlsZS5kYXRhLCB1cmwgPSBzdHlsZS51cmw7XHJcbiAgICAgICAgdGV4dENzcyA9IHRleHRDc3MucmVwbGFjZSgvdXJsXFwoWydcIl0oLio/KVtcIiddXFwpL2csIChyLCByMSk9PiB7XHJcbiAgICAgICAgICByZXR1cm4gWyd1cmwoJywgdGhpcy51cmxSZXNvbHZlcih1cmwsIHIxKSwgJyknXS5qb2luKCcnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+JHt0ZXh0Q3NzfTwvc3R5bGU+YCkuYXBwZW5kVG8odGhpcy5oZWFkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb250YWluZXIuaHRtbCh0aGlzLnRyYW5zbGF0ZShmaWxlcy5odG1sWzBdLmRhdGEpKTtcclxuXHJcbiAgICAgIHRoaXMuakxpbmtzID0gW107XHJcbiAgICAgIGZvcihsZXQgbGluayBvZiBsaW5rcykge1xyXG4gICAgICAgIHRoaXMuakxpbmtzLnB1c2goJChbJzxsaW5rICcsIHRoaXMub2JqVG9BdHRyc1N0cihsaW5rKSwgJz4nXS5qb2luKCcnKSkuYXBwZW5kVG8odGhpcy5oZWFkKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGZpbGVzLnNjcmlwdFswXSkge1xyXG4gICAgICAgIGNvbnN0IGluaXQgPSBldmFsKGZpbGVzLnNjcmlwdFswXS5kYXRhKTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlT2JqZWN0ID0gaW5pdCh0aGlzLmNvbnRhaW5lcik7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZU9iamVjdCA9IHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxpbmtDb250cm9scyA9IHt9O1xyXG4gICAgICBmb3IobGV0IGlkIG9mIHRoaXMuZ2V0TGlua3MoKSkge1xyXG4gICAgICAgIHRoaXMubGlua0NvbnRyb2xzW2lkXSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy4nK2lkKTtcclxuICAgICAgICB0aGlzLmJpbmRzW2lkXSA9IFZpZXcuaGFuZGxlTGlua0V2ZW50LmJpbmQoe2dldEhhbmRsZXJzOiB0aGlzLmdldEhhbmRsZXJzLmJpbmQodGhpcyksIGlkLCBjdHJsOiB0aGlzLmxpbmtDb250cm9sc1tpZF19KTtcclxuICAgICAgICB0aGlzLmxpbmtDb250cm9sc1tpZF0ub24oJ2NsaWNrJywgdGhpcy5iaW5kc1tpZF0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLndpZGdldENvbnRyb2xzID0ge307XHJcbiAgICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRXaWRnZXRzKCkpIHtcclxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2xzW2lkXSA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy4nK2lkKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2xzID0ge307XHJcbiAgICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRJbnB1dHMoKSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sc1tpZF0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcuJytpZCk7XHJcbiAgICAgICAgdGhpcy5iaW5kc1tpZF0gPSBWaWV3LmhhbmRsZUlucHV0RXZlbnQuYmluZCh7Z2V0SGFuZGxlcnM6IHRoaXMuZ2V0SGFuZGxlcnMuYmluZCh0aGlzKSwgaWQsIGN0cmw6IHRoaXMuaW5wdXRDb250cm9sc1tpZF19KTtcclxuICAgICAgICB0aGlzLmlucHV0Q29udHJvbHNbaWRdLm9uKCdrZXl1cCcsIHRoaXMuYmluZHNbaWRdKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mb3JtQ29udHJvbHMgPSB7fTtcclxuICAgICAgZm9yKGxldCBpZCBvZiB0aGlzLmdldEZvcm1zKCkpIHtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sc1tpZF0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcuJytpZCk7XHJcbiAgICAgICAgdGhpcy5iaW5kc1tpZF0gPSBWaWV3LmhhbmRsZUZvcm1FdmVudC5iaW5kKHtnZXRIYW5kbGVyczogdGhpcy5nZXRIYW5kbGVycy5iaW5kKHRoaXMpLCBpZCwgY3RybDogdGhpcy5mb3JtQ29udHJvbHNbaWRdfSk7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNbaWRdLm9uKCdzdWJtaXQnLCB0aGlzLmJpbmRzW2lkXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudGV4dENvbnRyb2xzID0ge307XHJcbiAgICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRUZXh0cygpKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0Q29udHJvbHNbaWRdID0gdGhpcy5jb250YWluZXIuZmluZCgnLicraWQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0YXRlU2V0dGVycyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtYXA6IHRoaXMubGlua0NvbnRyb2xzLFxyXG4gICAgICAgICAgc2V0dGVyOiB0aGlzLnNldExpbmtDb250cm9sU3RhdGUuYmluZCh0aGlzKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbWFwOiB0aGlzLndpZGdldENvbnRyb2xzLFxyXG4gICAgICAgICAgc2V0dGVyOiB0aGlzLnNldFdpZGdldENvbnRyb2xTdGF0ZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtYXA6IHRoaXMuaW5wdXRDb250cm9scyxcclxuICAgICAgICAgIHNldHRlcjogdGhpcy5zZXRJbnB1dENvbnRyb2xTdGF0ZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBtYXA6IHRoaXMudGV4dENvbnRyb2xzLFxyXG4gICAgICAgICAgc2V0dGVyOiB0aGlzLnNldFRleHRDb250cm9sU3RhdGUuYmluZCh0aGlzKVxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdFZpZXcoKTtcclxuXHJcbiAgICAgIGlmKHRoaXMub25Mb2FkKSB7XHJcbiAgICAgICAgdGhpcy5vbkxvYWQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5maXJlTGlua3NPbkxvYWRFdmVudCgpO1xyXG4gICAgfSkuXHJcbiAgICBjYXRjaCgocmVzKT0+IGNvbnNvbGUuZXJyb3IocmVzKSk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgZGVsZXRlIHRoaXMudGV4dENvbnRyb2xzO1xyXG4gICAgZm9yKGxldCBpZCBvZiB0aGlzLmdldExpbmtzKCkpIHtcclxuICAgICAgdGhpcy5saW5rQ29udHJvbHNbaWRdLm9mZignY2xpY2snLCB0aGlzLmJpbmRzW2lkXSk7XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5saW5rQ29udHJvbHM7XHJcbiAgICBkZWxldGUgdGhpcy53aWRnZXRDb250cm9scztcclxuICAgIGZvcihsZXQgaWQgb2YgdGhpcy5nZXRJbnB1dHMoKSkge1xyXG4gICAgICB0aGlzLmlucHV0Q29udHJvbHNbaWRdLm9mZigna2V5dXAnLCB0aGlzLmJpbmRzW2lkXSk7XHJcbiAgICB9XHJcbiAgICBkZWxldGUgdGhpcy5pbnB1dENvbnRyb2xzO1xyXG4gICAgZm9yKGxldCBpZCBvZiB0aGlzLmdldEZvcm1zKCkpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbHNbaWRdLm9mZignc3VibWl0JywgdGhpcy5iaW5kc1tpZF0pO1xyXG4gICAgfVxyXG4gICAgZGVsZXRlIHRoaXMuZm9ybUNvbnRyb2xzO1xyXG5cclxuICAgICF0aGlzLnRlbXBsYXRlT2JqZWN0LmRpc3Bvc2UgfHwgdGhpcy50ZW1wbGF0ZU9iamVjdC5kaXNwb3NlKCk7XHJcbiAgICBkZWxldGUgdGhpcy50ZW1wbGF0ZU9iamVjdDtcclxuXHJcbiAgICBpZih0aGlzLmlzSU9TKSB7XHJcbiAgICAgICQodGhpcy5wYXJlbnRDb250YWluZXJbMF0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldykub2ZmKCdyZXNpemUnLCB0aGlzLmJpbmRzLm9uUmVzaXplKTtcclxuICAgIH1cclxuICAgIHRoaXMucGFyZW50Q29udGFpbmVyLmh0bWwoJycpO1xyXG4gICAgZGVsZXRlIHRoaXMuZnJhbWU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXJbMF07XHJcbiAgfVxyXG5cclxuICBnZXRQYXJlbnRDb250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXJbMF07XHJcbiAgfVxyXG5cclxuICBhZGRIYW5kbGVyKGhhbmRsZXIpIHtcclxuICAgIHRoaXMuaGFuZGxlcnMucHVzaChoYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIGluaXRWaWV3KCkge1xyXG5cclxuICB9XHJcblxyXG4gIHN0YXRpYyBzZXRDb250cm9sU3RhdGUoY3RybCwgZGVmYXVsdHMsIHN0YXRlLCBzdGF0ZUhhbmRsZXJzKSB7XHJcbiAgICBpZihjdHJsKSB7XHJcbiAgICAgIGNvbnN0IHN0ID0ge1xyXG4gICAgICAgIC4uLmRlZmF1bHRzLFxyXG4gICAgICAgIC4uLnN0YXRlXHJcbiAgICAgIH07XHJcbiAgICAgIGZvcihsZXQgbmFtZSBpbiBzdCkge1xyXG4gICAgICAgIGlmKHN0Lmhhc093blByb3BlcnR5KG5hbWUpICYmIHN0YXRlSGFuZGxlcnNbbmFtZV0pIHtcclxuICAgICAgICAgIHN0YXRlSGFuZGxlcnNbbmFtZV0oY3RybCwgc3RbbmFtZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TGlua0NvbnRyb2xTdGF0ZShpZCwgc3RhdGUpIHtcclxuICAgIFZpZXcuc2V0Q29udHJvbFN0YXRlKFxyXG4gICAgICB0aGlzLmxpbmtDb250cm9sc1tpZF0sXHJcbiAgICAgIHtcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgZW5hYmxlOiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YXRlLFxyXG4gICAgICBWaWV3LmxpbmtTdGF0ZUhhbmRsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0V2lkZ2V0Q29udHJvbFN0YXRlKGlkLCBzdGF0ZSkge1xyXG4gICAgVmlldy5zZXRDb250cm9sU3RhdGUoXHJcbiAgICAgIHRoaXMud2lkZ2V0Q29udHJvbHNbaWRdLFxyXG4gICAgICB7XHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGVuYWJsZTogdHJ1ZVxyXG4gICAgICB9LFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgVmlldy53aWRnZXRTdGF0ZUhhbmRsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5wdXRDb250cm9sU3RhdGUoaWQsIHN0YXRlKSB7XHJcbiAgICBWaWV3LnNldENvbnRyb2xTdGF0ZShcclxuICAgICAgdGhpcy5pbnB1dENvbnRyb2xzW2lkXSxcclxuICAgICAge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgZW5hYmxlOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiAnJ1xyXG4gICAgICB9LFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgVmlldy5pbnB1dFN0YXRlSGFuZGxlcnNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRUZXh0Q29udHJvbFN0YXRlKGlkLCBzdGF0ZSkge1xyXG4gICAgVmlldy5zZXRDb250cm9sU3RhdGUoXHJcbiAgICAgIHRoaXMudGV4dENvbnRyb2xzW2lkXSxcclxuICAgICAge1xyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgdmFsdWU6ICcnXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0YXRlLFxyXG4gICAgICBWaWV3LnRleHRTdGF0ZUhhbmRsZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtU3RhdGVDaGFuZ2VkKCkge1xyXG5cclxuICB9XHJcblxyXG4gIHNldFN0YXRlKGlkLCBzdGF0ZSkge1xyXG4gICAgZm9yKGxldCBpdGVtIG9mIHRoaXMuc3RhdGVTZXR0ZXJzKSB7XHJcbiAgICAgIGlmKGl0ZW0ubWFwW2lkXSkge1xyXG4gICAgICAgIGl0ZW0uc2V0dGVyKGlkLCBzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5vbkl0ZW1TdGF0ZUNoYW5nZWQoaWQsIHN0YXRlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVmlldy5qcyIsImltcG9ydCB7JCwgVEhSRUV9IGZyb20gJy4uL2xpYnMnO1xyXG5pbXBvcnQgT3JiaXQgZnJvbSAnLi9PcmJpdCc7XHJcbmltcG9ydCBUaHJlZU1vdXNlRXZlbnRDb252ZXJ0ZXIgZnJvbSAnLi9UaHJlZU1vdXNlRXZlbnRDb252ZXJ0ZXInO1xyXG5pbXBvcnQgVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyIGZyb20gJy4vVGhyZWVUb3VjaEV2ZW50Q29udmVydGVyJztcclxuaW1wb3J0IERyYWcgZnJvbSAnLi9EcmFnJztcclxuaW1wb3J0IENTUzNEUmVuZGVyZXIgZnJvbSAnLi9DU1MzRFJlbmRlcmVyJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZpc3VhbFdvcmxkIGV4dGVuZHMgVEhSRUUuRXZlbnREaXNwYXRjaGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3Iod25kLCBkb2MsIGNvbnRhaW5lciwgdXNlSGVscGVycz1mYWxzZSkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMud25kID0gd25kO1xyXG4gICAgdGhpcy5kb2MgPSBkb2M7XHJcbiAgICB0aGlzLmpDb250YWluZXIgPSBjb250YWluZXI7XHJcbiAgICB0aGlzLnJlbmRlckNhbGxiYWNrcyA9IFtdO1xyXG5cclxuICAgIHRoaXMuY2xvY2sgPSBuZXcgVEhSRUUuQ2xvY2soKTtcclxuXHJcbiAgICB0aGlzLnJheWNhc3RlciA9IG5ldyBUSFJFRS5SYXljYXN0ZXIoKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XHJcbiAgICB0aGlzLmNzc1NjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XHJcblxyXG4gICAgdGhpcy5jYW1lcmEgPSBuZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoMzAsIHRoaXMud2lkdGgoKS90aGlzLmhlaWdodCgpLCAwLjIsIDIwMDApO1xyXG4gICAgY29uc3Qgc2NhbGUgPSAxO1xyXG5cclxuICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLnggPSAwO1xyXG4gICAgdGhpcy5jYW1lcmEucG9zaXRpb24ueSA9IDUuNSpzY2FsZTtcclxuICAgIHRoaXMuY2FtZXJhLnBvc2l0aW9uLnogPSAwO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7YWxwaGE6IHRydWUsIGFudGlhbGlhczogdHJ1ZX0pO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKDB4MDAwMDAwLCAwKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh0aGlzLnduZC5kZXZpY2VQaXhlbFJhdGlvKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U2l6ZSh0aGlzLndpZHRoKCksIHRoaXMuaGVpZ2h0KCkpO1xyXG5cclxuICAgIHRoaXMuakNvbnRhaW5lci5hcHBlbmQodGhpcy5yZW5kZXJlci5kb21FbGVtZW50KTtcclxuXHJcbiAgICB0aGlzLmNzc1JlbmRlcmVyXHQ9IG5ldyBDU1MzRFJlbmRlcmVyKCk7XHJcbiAgICB0aGlzLmNzc1JlbmRlcmVyLnNldFNpemUodGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTtcclxuICAgICQodGhpcy5jc3NSZW5kZXJlci5kb21FbGVtZW50KS5jc3Moe1xyXG4gIFx0XHRwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICBcdFx0dG9wOiAwLFxyXG4gIFx0XHRtYXJnaW46IDAsXHJcbiAgXHRcdHBhZGRpbmc6IDBcclxuXHQgIH0pO1xyXG4gICAgdGhpcy5qQ29udGFpbmVyLmFwcGVuZCh0aGlzLmNzc1JlbmRlcmVyLmRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuZWxlbWVudCA9IHRoaXMuY3NzUmVuZGVyZXIuZG9tRWxlbWVudDtcclxuXHJcblxyXG5cclxuICAgIHRoaXMuY29udHJvbHMgPSBuZXcgT3JiaXQodGhpcy5jYW1lcmEsIHRoaXMuZWxlbWVudCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzLnRhcmdldC55ID0gMC41O1xyXG5cclxuICAgIGNvbnN0IGNzc1NjZW5lID0gJCh0aGlzLmNzc1JlbmRlcmVyLmRvbUVsZW1lbnQpLmZpbmQoJ2RpdicpLCB0bXBWZWN0b3IgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xyXG4gICAgdGhpcy5jb250cm9scy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKT0+IHtcclxuICAgICAgdGhpcy5jYW1lcmEuZ2V0V29ybGREaXJlY3Rpb24odG1wVmVjdG9yKTtcclxuICAgICAgY3NzU2NlbmUuY3NzKCdkaXNwbGF5JywgdG1wVmVjdG9yLnktdGhpcy5jYW1lcmEucG9zaXRpb24ueT4wPyAnbm9uZSc6ICdibG9jaycpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy50ZXh0dXJlTG9hZGVyID0gbmV3IFRIUkVFLlRleHR1cmVMb2FkZXIoKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lLmFkZChuZXcgVEhSRUUuQW1iaWVudExpZ2h0KDB4RDBEMEQwKSk7Ly8weEMwQzBDMFxyXG5cclxuICAgIHRoaXMubGlnaHQgPSBuZXcgVEhSRUUuRGlyZWN0aW9uYWxMaWdodCgweDQwNDA0MCwgMSk7XHJcbiAgICB0aGlzLmxpZ2h0LnBvc2l0aW9uLnNldCgwLCA2KnNjYWxlLCAwKTtcclxuICAgIHRoaXMubGlnaHQuY2FzdFNoYWRvdyA9IGZhbHNlO1xyXG4gICAgLy8gY29uc3QgZCA9IDIwKnNjYWxlO1xyXG4gICAgLy8gdGhpcy5saWdodC5zaGFkb3cuY2FtZXJhLmxlZnQgPSAtZDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5yaWdodCA9IGQ7XHJcbiAgICAvLyB0aGlzLmxpZ2h0LnNoYWRvdy5jYW1lcmEudG9wID0gZDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5ib3R0b20gPSAtZDtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5uZWFyID0gMSpzY2FsZTtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93LmNhbWVyYS5mYXIgPSAyNSpzY2FsZTtcclxuICAgIC8vIHRoaXMubGlnaHQuc2hhZG93Lm1hcFNpemUueCA9IDEwMjQ7XHJcbiAgICAvLyB0aGlzLmxpZ2h0LnNoYWRvdy5tYXBTaXplLnkgPSAxMDI0O1xyXG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5saWdodCk7XHJcblxyXG4gICAgaWYodXNlSGVscGVycykge1xyXG4gICAgICB0aGlzLnNjZW5lLmFkZChuZXcgVEhSRUUuQXhpc0hlbHBlcig1KSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kcyA9IHtcclxuICAgICAgb25XaW5kb3dSZXNpemU6IHRoaXMub25XaW5kb3dSZXNpemUuYmluZCh0aGlzKSxcclxuICAgICAgYW5pbWF0ZTogdGhpcy5hbmltYXRlLmJpbmQodGhpcylcclxuICAgIH07XHJcblxyXG4gICAgJCh0aGlzLnduZCkub24oJ3Jlc2l6ZScsIHRoaXMuYmluZHMub25XaW5kb3dSZXNpemUpO1xyXG5cclxuICAgIHRoaXMubW91c2VFdmVudHMgPSBuZXcgVGhyZWVNb3VzZUV2ZW50Q29udmVydGVyKHRoaXMud25kLCB0aGlzLmRvYywgdGhpcyk7XHJcbiAgICB0aGlzLnRvdWNoRXZlbnRzID0gbmV3IFRocmVlVG91Y2hFdmVudENvbnZlcnRlcih0aGlzLnduZCwgdGhpcy5kb2MsIHRoaXMpO1xyXG4gICAgY29uc3QgZmlsdGVyRGF0YSA9IHt0eXBlOiAnbW91c2Vtb3ZlJ307XHJcbiAgICB0aGlzLm1vdXNlRXZlbnRzLmZpbHRlciA9IChlbGVtZW50LCBlKT0+IHtcclxuICAgICAgY29uc3QgdHlwZXMgPSBbJ21vdXNlZW50ZXInLCAnbW91c2VvdmVyJywgJ21vdXNlbGVhdmUnLCAnbW91c2VvdXQnXSwgY29udGFpbnMgPSAocCwgYyk9PiBwPT09YyB8fCAkLmNvbnRhaW5zKHAsIGMpO1xyXG4gICAgICBpZihlLnR5cGU9PT0nbW91c2Vtb3ZlJykge1xyXG4gICAgICAgIGZpbHRlckRhdGEucGFnZVggPSBlLnBhZ2VYO1xyXG4gICAgICAgIGZpbHRlckRhdGEucGFnZVkgPSBlLnBhZ2VZO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlLnJlbGF0ZWRUYXJnZXQgJiYgfnR5cGVzLmluZGV4T2YoZS50eXBlKSAmJiBjb250YWlucyhlbGVtZW50LCBlLnRhcmdldCkgJiYgY29udGFpbnMoZWxlbWVudCwgZS5yZWxhdGVkVGFyZ2V0KT8gey4uLmUsIC4uLmZpbHRlckRhdGF9OiBlO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZHJhZyA9IG5ldyBEcmFnKHRoaXMud25kLCB0aGlzLmRvYywgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgZGVsZXRlIHRoaXMuYmluZHMuYW5pbWF0ZTtcclxuICAgICQodGhpcy53bmQpLm9mZigncmVzaXplJywgdGhpcy5iaW5kcy5vbldpbmRvd1Jlc2l6ZSk7XHJcbiAgICB0aGlzLm1vdXNlRXZlbnRzLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMudG91Y2hFdmVudHMuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5kcmFnLmRpc3Bvc2UoKTtcclxuICAgIHRoaXMuY29udHJvbHMuZGlzcG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgd2lkdGgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5qQ29udGFpbmVyLndpZHRoKCk7XHJcbiAgfVxyXG5cclxuICBoZWlnaHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5qQ29udGFpbmVyLmhlaWdodCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0RXh0cmFMaWdodGluZyh2KSB7XHJcbiAgICB0aGlzLmxpZ2h0LmludGVuc2l0eSA9IHY7XHJcbiAgfVxyXG5cclxuICBnZXRPcmJpdCgpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzO1xyXG4gIH1cclxuXHJcbiAgc2V0Q29udHJvbHNTdGF0ZShzdGF0ZSkge1xyXG4gICAgdGhpcy5jb250cm9scy5lbmFibGVkID0gc3RhdGU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250cm9sc1N0YXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHMuZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgY29uc3QgdXBkYXRlQ2FtZXJhID0gKGNhbWVyYSk9PiB7XHJcbiAgICAgIGNhbWVyYS5hc3BlY3QgPSB0aGlzLndpZHRoKCkvdGhpcy5oZWlnaHQoKTtcclxuICAgICAgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIH0sXHJcbiAgICB1cGRhdGVSZW5kZXJlciA9IChyZW5kZXJlcik9PiB7XHJcbiAgICAgIHJlbmRlcmVyLnNldFNpemUodGhpcy53aWR0aCgpLCB0aGlzLmhlaWdodCgpKTtcclxuICAgIH07XHJcblxyXG4gICAgdXBkYXRlQ2FtZXJhKHRoaXMuY2FtZXJhKTtcclxuICAgIHVwZGF0ZVJlbmRlcmVyKHRoaXMucmVuZGVyZXIpO1xyXG4gICAgdXBkYXRlUmVuZGVyZXIodGhpcy5jc3NSZW5kZXJlcik7XHJcblxyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KHt0eXBlOiAncmVzaXplJ30pO1xyXG4gIH1cclxuXHJcbiAgYWRkT2JqZWN0KG9iamVjdCkge1xyXG4gICAgdGhpcy5zY2VuZS5hZGQob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIGFkZENzc09iamVjdChvYmplY3QpIHtcclxuICAgIHRoaXMuY3NzU2NlbmUuYWRkKG9iamVjdCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDc3NPYmplY3Qob2JqZWN0KSB7XHJcbiAgICB0aGlzLmNzc1NjZW5lLnJlbW92ZShvYmplY3QpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT2JqZWN0KG9iamVjdCkge1xyXG4gICAgdGhpcy5zY2VuZS5yZW1vdmUob2JqZWN0KTtcclxuICB9XHJcblxyXG4gIGFuaW1hdGUoKSB7XHJcbiAgICBpZih0aGlzLmJpbmRzLmFuaW1hdGUpIHtcclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuYmluZHMuYW5pbWF0ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgYWRkUmVuZGVyQ2FsbGJhY2soY2xiKSB7XHJcbiAgICB0aGlzLnJlbmRlckNhbGxiYWNrcy5wdXNoKGNsYik7XHJcbiAgfVxyXG5cclxuICByZW1vdmVSZW5kZXJDYWxsYmFjayhjbGIpIHtcclxuICAgIGNvbnN0IGkgPSB0aGlzLnJlbmRlckNhbGxiYWNrcy5pbmRleE9mKGNsYik7XHJcbiAgICBpZih+aSkge1xyXG4gICAgICB0aGlzLnJlbmRlckNhbGxiYWNrcy5zcGxpY2UoaSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCBkZWx0YVRpbWUgPSB0aGlzLmNsb2NrLmdldERlbHRhKCk7XHJcbiAgICB0aGlzLmNvbnRyb2xzLnVwZGF0ZShkZWx0YVRpbWUpO1xyXG4gICAgZm9yKGxldCBjbGIgb2YgdGhpcy5yZW5kZXJDYWxsYmFja3MpIHtcclxuICAgICAgY2xiKGRlbHRhVGltZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNzc1JlbmRlcmVyLnJlbmRlcih0aGlzLmNzc1NjZW5lLCB0aGlzLmNhbWVyYSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLmNhbWVyYSk7XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzR2VvbWV0cnkoYnVmR2VvbWV0cnksIG1lc2gpIHtcclxuICAgIG1lc2guZ2VvbWV0cnkgPSBidWZHZW9tZXRyeTtcclxuICAgIC8vIE9idGFpbiBhIEdlb21ldHJ5XHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5HZW9tZXRyeSgpLmZyb21CdWZmZXJHZW9tZXRyeShidWZHZW9tZXRyeSk7XHJcbiAgICAvLyBNZXJnZSB0aGUgdmVydGljZXMgc28gdGhlIHRyaWFuZ2xlIHNvdXAgaXMgY29udmVydGVkIHRvIGluZGV4ZWQgdHJpYW5nbGVzXHJcbiAgICBnZW9tZXRyeS5tZXJnZVZlcnRpY2VzKCk7XHJcbiAgICAvLyBDb252ZXJ0IGFnYWluIHRvIEJ1ZmZlckdlb21ldHJ5LCBpbmRleGVkXHJcbiAgICBjb25zdCBpbmRleGVkQnVmZmVyR2VvbSA9IHRoaXMuY3JlYXRlSW5kZXhlZEJ1ZmZlckdlb21ldHJ5RnJvbUdlb21ldHJ5KGdlb21ldHJ5KTtcclxuICAgIC8vIENyZWF0ZSBpbmRleCBhcnJheXMgbWFwcGluZyB0aGUgaW5kZXhlZCB2ZXJ0aWNlcyB0byBidWZHZW9tZXRyeSB2ZXJ0aWNlc1xyXG4gICAgcmV0dXJuIHRoaXMubWFwSW5kaWNlcyhidWZHZW9tZXRyeSwgaW5kZXhlZEJ1ZmZlckdlb20pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlSW5kZXhlZEJ1ZmZlckdlb21ldHJ5RnJvbUdlb21ldHJ5KGdlb21ldHJ5KSB7XHJcbiAgICBjb25zdCBudW1WZXJ0aWNlcyA9IGdlb21ldHJ5LnZlcnRpY2VzLmxlbmd0aDtcclxuICAgIGNvbnN0IG51bUZhY2VzID0gZ2VvbWV0cnkuZmFjZXMubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IGJ1ZmZlckdlb20gPSBuZXcgVEhSRUUuQnVmZmVyR2VvbWV0cnkoKTtcclxuICAgIGNvbnN0IHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJheShudW1WZXJ0aWNlcyAqIDMpO1xyXG4gICAgY29uc3QgaW5kaWNlcyA9IG5ldyAobnVtRmFjZXMgKiAzID4gNjU1MzUgPyBVaW50MzJBcnJheSA6IFVpbnQxNkFycmF5KShudW1GYWNlcyAqIDMpO1xyXG5cclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1WZXJ0aWNlczsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IHAgPSBnZW9tZXRyeS52ZXJ0aWNlc1tpXTtcclxuICAgICAgY29uc3QgaTMgPSBpICogMztcclxuICAgICAgdmVydGljZXNbaTNdID0gcC54O1xyXG4gICAgICB2ZXJ0aWNlc1tpMyArIDFdID0gcC55O1xyXG4gICAgICB2ZXJ0aWNlc1tpMyArIDJdID0gcC56O1xyXG4gICAgfVxyXG5cclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1GYWNlczsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGYgPSBnZW9tZXRyeS5mYWNlc1tpXTtcclxuICAgICAgY29uc3QgaTMgPSBpICogMztcclxuICAgICAgaW5kaWNlc1tpM10gPSBmLmE7XHJcbiAgICAgIGluZGljZXNbaTMgKyAxXSA9IGYuYjtcclxuICAgICAgaW5kaWNlc1tpMyArIDJdID0gZi5jO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1ZmZlckdlb20uc2V0SW5kZXgobmV3IFRIUkVFLkJ1ZmZlckF0dHJpYnV0ZShpbmRpY2VzLCAxKSk7XHJcbiAgICBidWZmZXJHZW9tLmFkZEF0dHJpYnV0ZSgncG9zaXRpb24nLCBuZXcgVEhSRUUuQnVmZmVyQXR0cmlidXRlKHZlcnRpY2VzLCAzKSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1ZmZlckdlb207XHJcbiAgfVxyXG5cclxuICBpc0VxdWFsKHgxLCB5MSwgejEsIHgyLCB5MiwgejIpIHtcclxuICAgIGNvbnN0IGRlbHRhID0gMC4wMDAwMDE7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoeDIgLSB4MSkgPCBkZWx0YSAmJlxyXG4gICAgTWF0aC5hYnMoeTIgLSB5MSkgPCBkZWx0YSAmJlxyXG4gICAgTWF0aC5hYnMoejIgLSB6MSkgPCBkZWx0YTtcclxuICB9XHJcblxyXG4gIG1hcEluZGljZXMoYnVmR2VvbWV0cnksIGluZGV4ZWRCdWZmZXJHZW9tKSB7XHJcbiAgICAvLyBDcmVhdGVzIG1hcHBlZFZlcnRpY2VzLCBtYXBwZWRJbmRpY2VzIGFuZCBtYXBwZWRBc3NvY2lhdGlvbiBpbiBidWZHZW9tZXRyeVxyXG4gICAgY29uc3QgdmVydGljZXMgPSBidWZHZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xyXG4gICAgY29uc3QgaWR4VmVydGljZXMgPSBpbmRleGVkQnVmZmVyR2VvbS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmFycmF5O1xyXG4gICAgY29uc3QgaW5kaWNlcyA9IGluZGV4ZWRCdWZmZXJHZW9tLmluZGV4LmFycmF5O1xyXG5cclxuICAgIGNvbnN0IG51bUlkeFZlcnRpY2VzID0gaWR4VmVydGljZXMubGVuZ3RoIC8gMztcclxuICAgIGNvbnN0IG51bVZlcnRpY2VzID0gdmVydGljZXMubGVuZ3RoIC8gMztcclxuXHJcbiAgICBidWZHZW9tZXRyeS5tYXBwZWRWZXJ0aWNlcyA9IGlkeFZlcnRpY2VzO1xyXG4gICAgYnVmR2VvbWV0cnkubWFwcGVkSW5kaWNlcyA9IGluZGljZXM7XHJcbiAgICBidWZHZW9tZXRyeS5tYXBwZWRBc3NvY2lhdGlvbiA9IFtdO1xyXG5cclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1JZHhWZXJ0aWNlczsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGFzc29jaWF0aW9uID0gW107XHJcbiAgICAgIGJ1Zkdlb21ldHJ5Lm1hcHBlZEFzc29jaWF0aW9uLnB1c2goYXNzb2NpYXRpb24pO1xyXG4gICAgICBjb25zdCBpMyA9IGkgKiAzO1xyXG4gICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtVmVydGljZXM7IGorKykge1xyXG4gICAgICAgIGNvbnN0IGozID0gaiAqIDM7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNFcXVhbChpZHhWZXJ0aWNlc1tpM10sIGlkeFZlcnRpY2VzW2kzICsgMV0sIGlkeFZlcnRpY2VzW2kzICsgMl0sXHJcbiAgICAgICAgdmVydGljZXNbajNdLCB2ZXJ0aWNlc1tqMyArIDFdLCB2ZXJ0aWNlc1tqMyArIDJdKSkge1xyXG4gICAgICAgICAgYXNzb2NpYXRpb24ucHVzaChqMyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge3ZlcnRpY2VzOiBidWZHZW9tZXRyeS5tYXBwZWRWZXJ0aWNlcywgaW5kaWNlczogYnVmR2VvbWV0cnkubWFwcGVkSW5kaWNlc307XHJcbiAgfVxyXG5cclxuICBvbmVOb2RlUG9zaXRpb25DYWxsYmFjayhwLCBxKSB7XHJcbiAgICB0aGlzLnBvc2l0aW9uLnNldChwLngsIHAueSwgcC56KTtcclxuICAgIHRoaXMucXVhdGVybmlvbi5zZXQocS54LCBxLnksIHEueiwgcS53KTtcclxuICB9XHJcblxyXG4gIG11bHR5Tm9kZVBvc2l0aW9uQ2FsbGJhY2sobm9kZSwgcCwgbikge1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgY29uc3Qgdm9sdW1lUG9zaXRpb25zID0gZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcclxuICAgIGNvbnN0IHZvbHVtZU5vcm1hbHMgPSBnZW9tZXRyeS5hdHRyaWJ1dGVzLm5vcm1hbC5hcnJheTtcclxuICAgIGNvbnN0IGFzc29jVmVydGV4ID0gZ2VvbWV0cnkubWFwcGVkQXNzb2NpYXRpb25bbm9kZV07XHJcblxyXG4gICAgZm9yKGxldCBrID0gMDsgayA8IGFzc29jVmVydGV4Lmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgbGV0IGluZGV4VmVydGV4ID0gYXNzb2NWZXJ0ZXhba107XHJcbiAgICAgICAgdm9sdW1lUG9zaXRpb25zW2luZGV4VmVydGV4XSA9IHAueDtcclxuICAgICAgICB2b2x1bWVOb3JtYWxzW2luZGV4VmVydGV4XSA9IG4ueDtcclxuICAgICAgICArK2luZGV4VmVydGV4O1xyXG4gICAgICAgIHZvbHVtZVBvc2l0aW9uc1tpbmRleFZlcnRleF0gPSBwLnk7XHJcbiAgICAgICAgdm9sdW1lTm9ybWFsc1tpbmRleFZlcnRleF0gPSBuLnk7XHJcbiAgICAgICAgKytpbmRleFZlcnRleDtcclxuICAgICAgICB2b2x1bWVQb3NpdGlvbnNbaW5kZXhWZXJ0ZXhdID0gcC56O1xyXG4gICAgICAgIHZvbHVtZU5vcm1hbHNbaW5kZXhWZXJ0ZXhdID0gbi56O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbXVsdHlOb2RlUG9zaXRpb25Qb3N0Q2FsbGJhY2soKSB7XHJcbiAgICBjb25zdCBnZW9tZXRyeSA9IHRoaXMuZ2VvbWV0cnk7XHJcbiAgICBnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBhdGhQb3NpdGlvbkNhbGxiYWNrKG5vZGUsIHApIHtcclxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi5hcnJheTtcclxuXHRcdGxldCBpID0gMyAqIG5vZGU7XHJcblx0XHRwb3NpdGlvbnNbaSsrXSA9IHAueDtcclxuXHRcdHBvc2l0aW9uc1tpKytdID0gcC55O1xyXG5cdFx0cG9zaXRpb25zW2ldID0gcC56O1xyXG4gIH1cclxuXHJcbiAgcGF0aFBvc2l0aW9uUG9zdENhbGxiYWNrKCkge1xyXG4gICAgY29uc3QgZ2VvbWV0cnkgPSB0aGlzLmdlb21ldHJ5O1xyXG4gICAgZ2VvbWV0cnkuY29tcHV0ZVZlcnRleE5vcm1hbHMoKTtcclxuICAgIGdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24ubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgZ2VvbWV0cnkuYXR0cmlidXRlcy5ub3JtYWwubmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gIH1cclxuXHJcbn1cclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vLi4vY29tbW9uL2NsYXNzZXMvVmlzdWFsV29ybGQuanMiLCJpbXBvcnQgQ29udHJvbGxlciBmcm9tICcuL0NvbnRyb2xsZXInO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2lkZ2V0Q29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXIge1xyXG5cclxuICBjb25zdHJ1Y3Rvcih2aWV3KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy52aWV3ID0gdmlldztcclxuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdG9nbGUoKSB7XHJcbiAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xyXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBoaWRlKCkge1xyXG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIGZpcmVDaGFuZ2UoKSB7XHJcbiAgICBpZih0aGlzLm9uQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVmlldygpIHtcclxuICAgIGlmKHRoaXMudmlldykge1xyXG4gICAgICB0aGlzLnZpZXcuc2V0U3RhdGUoJ3dpZEZsb2F0V25kJywge1xyXG4gICAgICAgIGVuYWJsZTogdHJ1ZSxcclxuICAgICAgICB2aXNpYmxlOiB0aGlzLnZpc2libGUsXHJcbiAgICAgICAgYWN0aXZlOiBmYWxzZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuLy4uL2NvbW1vbi9jbGFzc2VzL1dpZGdldENvbnRyb2xsZXIuanMiLCJpbXBvcnQgVGFyZ2V0IGZyb20gJy4vVGFyZ2V0JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENpcmNsZVRhcmdldCBleHRlbmRzIFRhcmdldCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHgsIHksIHIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnAgPSB7XHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICAgIHJcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB0ZXN0SW50ZXJzZWN0aW9uKGUsIGRhdGEpIHtcclxuICAgIGxldCByZXM7XHJcbiAgICBjb25zdCB7eCwgeX0gPSBkYXRhLCBwID0gdGhpcy5wO1xyXG4gICAgaWYoKHgtcC54KSooeC1wLngpKyh5LXAueSkqKHktcC55KTw9cC5yKnAucikge1xyXG4gICAgICByZXMgPSB7XHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLFxyXG4gICAgICAgIGRhdGFcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXM7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy90YXJnZXRzL0NpcmNsZVRhcmdldC5qcyIsImltcG9ydCBUYXJnZXQgZnJvbSAnLi9UYXJnZXQnO1xyXG5pbXBvcnQgQmFzZU1hdGhVdGlscyBmcm9tICcuLi9CYXNlTWF0aFV0aWxzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvbHlUYXJnZXQgZXh0ZW5kcyBUYXJnZXQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwb2x5KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5wb2x5ID0gcG9seTtcclxuICB9XHJcblxyXG4gIHRlc3RJbnRlcnNlY3Rpb24oZSwgcCkge1xyXG4gICAgcmV0dXJuIEJhc2VNYXRoVXRpbHMuaXNJbnNpZGVQb2x5KHRoaXMucG9seSwgcCk/IHtcclxuICAgICAgdGFyZ2V0OiB0aGlzLFxyXG4gICAgICBkYXRhOiBwXHJcbiAgICB9OiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxufVxyXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi8uLi9jb21tb24vY2xhc3Nlcy90YXJnZXRzL1BvbHlUYXJnZXQuanMiLCIvLyBzdGF0cy5qcyAtIGh0dHA6Ly9naXRodWIuY29tL21yZG9vYi9zdGF0cy5qc1xuKGZ1bmN0aW9uKGYsZSl7XCJvYmplY3RcIj09PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6Zi5TdGF0cz1lKCl9KSh0aGlzLGZ1bmN0aW9uKCl7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGEpe2MuYXBwZW5kQ2hpbGQoYS5kb20pO3JldHVybiBhfWZ1bmN0aW9uIHUoYSl7Zm9yKHZhciBkPTA7ZDxjLmNoaWxkcmVuLmxlbmd0aDtkKyspYy5jaGlsZHJlbltkXS5zdHlsZS5kaXNwbGF5PWQ9PT1hP1wiYmxvY2tcIjpcIm5vbmVcIjtsPWF9dmFyIGw9MCxjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7Yy5zdHlsZS5jc3NUZXh0PVwicG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6MC45O3otaW5kZXg6MTAwMDBcIjtjLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLGZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQoKTtcbnUoKytsJWMuY2hpbGRyZW4ubGVuZ3RoKX0sITEpO3ZhciBrPShwZXJmb3JtYW5jZXx8RGF0ZSkubm93KCksZz1rLGE9MCxyPWUobmV3IGYuUGFuZWwoXCJGUFNcIixcIiMwZmZcIixcIiMwMDJcIikpLGg9ZShuZXcgZi5QYW5lbChcIk1TXCIsXCIjMGYwXCIsXCIjMDIwXCIpKTtpZihzZWxmLnBlcmZvcm1hbmNlJiZzZWxmLnBlcmZvcm1hbmNlLm1lbW9yeSl2YXIgdD1lKG5ldyBmLlBhbmVsKFwiTUJcIixcIiNmMDhcIixcIiMyMDFcIikpO3UoMCk7cmV0dXJue1JFVklTSU9OOjE2LGRvbTpjLGFkZFBhbmVsOmUsc2hvd1BhbmVsOnUsYmVnaW46ZnVuY3Rpb24oKXtrPShwZXJmb3JtYW5jZXx8RGF0ZSkubm93KCl9LGVuZDpmdW5jdGlvbigpe2ErKzt2YXIgYz0ocGVyZm9ybWFuY2V8fERhdGUpLm5vdygpO2gudXBkYXRlKGMtaywyMDApO2lmKGM+ZysxRTMmJihyLnVwZGF0ZSgxRTMqYS8oYy1nKSwxMDApLGc9YyxhPTAsdCkpe3ZhciBkPXBlcmZvcm1hbmNlLm1lbW9yeTt0LnVwZGF0ZShkLnVzZWRKU0hlYXBTaXplL1xuMTA0ODU3NixkLmpzSGVhcFNpemVMaW1pdC8xMDQ4NTc2KX1yZXR1cm4gY30sdXBkYXRlOmZ1bmN0aW9uKCl7az10aGlzLmVuZCgpfSxkb21FbGVtZW50OmMsc2V0TW9kZTp1fX07Zi5QYW5lbD1mdW5jdGlvbihlLGYsbCl7dmFyIGM9SW5maW5pdHksaz0wLGc9TWF0aC5yb3VuZCxhPWcod2luZG93LmRldmljZVBpeGVsUmF0aW98fDEpLHI9ODAqYSxoPTQ4KmEsdD0zKmEsdj0yKmEsZD0zKmEsbT0xNSphLG49NzQqYSxwPTMwKmEscT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO3Eud2lkdGg9cjtxLmhlaWdodD1oO3Euc3R5bGUuY3NzVGV4dD1cIndpZHRoOjgwcHg7aGVpZ2h0OjQ4cHhcIjt2YXIgYj1xLmdldENvbnRleHQoXCIyZFwiKTtiLmZvbnQ9XCJib2xkIFwiKzkqYStcInB4IEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmXCI7Yi50ZXh0QmFzZWxpbmU9XCJ0b3BcIjtiLmZpbGxTdHlsZT1sO2IuZmlsbFJlY3QoMCwwLHIsaCk7Yi5maWxsU3R5bGU9ZjtiLmZpbGxUZXh0KGUsdCx2KTtcbmIuZmlsbFJlY3QoZCxtLG4scCk7Yi5maWxsU3R5bGU9bDtiLmdsb2JhbEFscGhhPS45O2IuZmlsbFJlY3QoZCxtLG4scCk7cmV0dXJue2RvbTpxLHVwZGF0ZTpmdW5jdGlvbihoLHcpe2M9TWF0aC5taW4oYyxoKTtrPU1hdGgubWF4KGssaCk7Yi5maWxsU3R5bGU9bDtiLmdsb2JhbEFscGhhPTE7Yi5maWxsUmVjdCgwLDAscixtKTtiLmZpbGxTdHlsZT1mO2IuZmlsbFRleHQoZyhoKStcIiBcIitlK1wiIChcIitnKGMpK1wiLVwiK2coaykrXCIpXCIsdCx2KTtiLmRyYXdJbWFnZShxLGQrYSxtLG4tYSxwLGQsbSxuLWEscCk7Yi5maWxsUmVjdChkK24tYSxtLGEscCk7Yi5maWxsU3R5bGU9bDtiLmdsb2JhbEFscGhhPS45O2IuZmlsbFJlY3QoZCtuLWEsbSxhLGcoKDEtaC93KSpwKSl9fX07cmV0dXJuIGZ9KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9zdGF0cy5qcy9idWlsZC9zdGF0cy5taW4uanNcbi8vIG1vZHVsZSBpZCA9IDcwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qKiogSU1QT1JUUyBGUk9NIGltcG9ydHMtbG9hZGVyICoqKi9cbnZhciBkZWZpbmUgPSBmYWxzZTtcblxuLyohXG4gKiBqUXVlcnkgTW91c2V3aGVlbCAzLjEuMTNcbiAqXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKi9cblxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgaWYgKCB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKFsnanF1ZXJ5J10sIGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vIE5vZGUvQ29tbW9uSlMgc3R5bGUgZm9yIEJyb3dzZXJpZnlcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJyb3dzZXIgZ2xvYmFsc1xuICAgICAgICBmYWN0b3J5KGpRdWVyeSk7XG4gICAgfVxufShmdW5jdGlvbiAoJCkge1xuXG4gICAgdmFyIHRvRml4ICA9IFsnd2hlZWwnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdNb3pNb3VzZVBpeGVsU2Nyb2xsJ10sXG4gICAgICAgIHRvQmluZCA9ICggJ29ud2hlZWwnIGluIGRvY3VtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+PSA5ICkgP1xuICAgICAgICAgICAgICAgICAgICBbJ3doZWVsJ10gOiBbJ21vdXNld2hlZWwnLCAnRG9tTW91c2VTY3JvbGwnLCAnTW96TW91c2VQaXhlbFNjcm9sbCddLFxuICAgICAgICBzbGljZSAgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UsXG4gICAgICAgIG51bGxMb3dlc3REZWx0YVRpbWVvdXQsIGxvd2VzdERlbHRhO1xuXG4gICAgaWYgKCAkLmV2ZW50LmZpeEhvb2tzICkge1xuICAgICAgICBmb3IgKCB2YXIgaSA9IHRvRml4Lmxlbmd0aDsgaTsgKSB7XG4gICAgICAgICAgICAkLmV2ZW50LmZpeEhvb2tzWyB0b0ZpeFstLWldIF0gPSAkLmV2ZW50Lm1vdXNlSG9va3M7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3BlY2lhbCA9ICQuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsID0ge1xuICAgICAgICB2ZXJzaW9uOiAnMy4xLjEyJyxcblxuICAgICAgICBzZXR1cDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAoIHRoaXMuYWRkRXZlbnRMaXN0ZW5lciApIHtcbiAgICAgICAgICAgICAgICBmb3IgKCB2YXIgaSA9IHRvQmluZC5sZW5ndGg7IGk7ICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIHRvQmluZFstLWldLCBoYW5kbGVyLCBmYWxzZSApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbm1vdXNld2hlZWwgPSBoYW5kbGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIGxpbmUgaGVpZ2h0IGFuZCBwYWdlIGhlaWdodCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGVsZW1lbnRcbiAgICAgICAgICAgICQuZGF0YSh0aGlzLCAnbW91c2V3aGVlbC1saW5lLWhlaWdodCcsIHNwZWNpYWwuZ2V0TGluZUhlaWdodCh0aGlzKSk7XG4gICAgICAgICAgICAkLmRhdGEodGhpcywgJ21vdXNld2hlZWwtcGFnZS1oZWlnaHQnLCBzcGVjaWFsLmdldFBhZ2VIZWlnaHQodGhpcykpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHRlYXJkb3duOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICggdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuICAgICAgICAgICAgICAgIGZvciAoIHZhciBpID0gdG9CaW5kLmxlbmd0aDsgaTsgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggdG9CaW5kWy0taV0sIGhhbmRsZXIsIGZhbHNlICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ubW91c2V3aGVlbCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgZGF0YSB3ZSBhZGRlZCB0byB0aGUgZWxlbWVudFxuICAgICAgICAgICAgJC5yZW1vdmVEYXRhKHRoaXMsICdtb3VzZXdoZWVsLWxpbmUtaGVpZ2h0Jyk7XG4gICAgICAgICAgICAkLnJlbW92ZURhdGEodGhpcywgJ21vdXNld2hlZWwtcGFnZS1oZWlnaHQnKTtcbiAgICAgICAgfSxcblxuICAgICAgICBnZXRMaW5lSGVpZ2h0OiBmdW5jdGlvbihlbGVtKSB7XG4gICAgICAgICAgICB2YXIgJGVsZW0gPSAkKGVsZW0pLFxuICAgICAgICAgICAgICAgICRwYXJlbnQgPSAkZWxlbVsnb2Zmc2V0UGFyZW50JyBpbiAkLmZuID8gJ29mZnNldFBhcmVudCcgOiAncGFyZW50J10oKTtcbiAgICAgICAgICAgIGlmICghJHBhcmVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAkcGFyZW50ID0gJCgnYm9keScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KCRwYXJlbnQuY3NzKCdmb250U2l6ZScpLCAxMCkgfHwgcGFyc2VJbnQoJGVsZW0uY3NzKCdmb250U2l6ZScpLCAxMCkgfHwgMTY7XG4gICAgICAgIH0sXG5cbiAgICAgICAgZ2V0UGFnZUhlaWdodDogZnVuY3Rpb24oZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuICQoZWxlbSkuaGVpZ2h0KCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGFkanVzdE9sZERlbHRhczogdHJ1ZSwgLy8gc2VlIHNob3VsZEFkanVzdE9sZERlbHRhcygpIGJlbG93XG4gICAgICAgICAgICBub3JtYWxpemVPZmZzZXQ6IHRydWUgIC8vIGNhbGxzIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmb3IgZWFjaCBldmVudFxuICAgICAgICB9XG4gICAgfTtcblxuICAgICQuZm4uZXh0ZW5kKHtcbiAgICAgICAgbW91c2V3aGVlbDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgIHJldHVybiBmbiA/IHRoaXMuYmluZCgnbW91c2V3aGVlbCcsIGZuKSA6IHRoaXMudHJpZ2dlcignbW91c2V3aGVlbCcpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHVubW91c2V3aGVlbDogZnVuY3Rpb24oZm4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVuYmluZCgnbW91c2V3aGVlbCcsIGZuKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgICAgIHZhciBvcmdFdmVudCAgID0gZXZlbnQgfHwgd2luZG93LmV2ZW50LFxuICAgICAgICAgICAgYXJncyAgICAgICA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcbiAgICAgICAgICAgIGRlbHRhICAgICAgPSAwLFxuICAgICAgICAgICAgZGVsdGFYICAgICA9IDAsXG4gICAgICAgICAgICBkZWx0YVkgICAgID0gMCxcbiAgICAgICAgICAgIGFic0RlbHRhICAgPSAwLFxuICAgICAgICAgICAgb2Zmc2V0WCAgICA9IDAsXG4gICAgICAgICAgICBvZmZzZXRZICAgID0gMDtcbiAgICAgICAgZXZlbnQgPSAkLmV2ZW50LmZpeChvcmdFdmVudCk7XG4gICAgICAgIGV2ZW50LnR5cGUgPSAnbW91c2V3aGVlbCc7XG5cbiAgICAgICAgLy8gT2xkIHNjaG9vbCBzY3JvbGx3aGVlbCBkZWx0YVxuICAgICAgICBpZiAoICdkZXRhaWwnICAgICAgaW4gb3JnRXZlbnQgKSB7IGRlbHRhWSA9IG9yZ0V2ZW50LmRldGFpbCAqIC0xOyAgICAgIH1cbiAgICAgICAgaWYgKCAnd2hlZWxEZWx0YScgIGluIG9yZ0V2ZW50ICkgeyBkZWx0YVkgPSBvcmdFdmVudC53aGVlbERlbHRhOyAgICAgICB9XG4gICAgICAgIGlmICggJ3doZWVsRGVsdGFZJyBpbiBvcmdFdmVudCApIHsgZGVsdGFZID0gb3JnRXZlbnQud2hlZWxEZWx0YVk7ICAgICAgfVxuICAgICAgICBpZiAoICd3aGVlbERlbHRhWCcgaW4gb3JnRXZlbnQgKSB7IGRlbHRhWCA9IG9yZ0V2ZW50LndoZWVsRGVsdGFYICogLTE7IH1cblxuICAgICAgICAvLyBGaXJlZm94IDwgMTcgaG9yaXpvbnRhbCBzY3JvbGxpbmcgcmVsYXRlZCB0byBET01Nb3VzZVNjcm9sbCBldmVudFxuICAgICAgICBpZiAoICdheGlzJyBpbiBvcmdFdmVudCAmJiBvcmdFdmVudC5heGlzID09PSBvcmdFdmVudC5IT1JJWk9OVEFMX0FYSVMgKSB7XG4gICAgICAgICAgICBkZWx0YVggPSBkZWx0YVkgKiAtMTtcbiAgICAgICAgICAgIGRlbHRhWSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgZGVsdGEgdG8gYmUgZGVsdGFZIG9yIGRlbHRhWCBpZiBkZWx0YVkgaXMgMCBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdGl5XG4gICAgICAgIGRlbHRhID0gZGVsdGFZID09PSAwID8gZGVsdGFYIDogZGVsdGFZO1xuXG4gICAgICAgIC8vIE5ldyBzY2hvb2wgd2hlZWwgZGVsdGEgKHdoZWVsIGV2ZW50KVxuICAgICAgICBpZiAoICdkZWx0YVknIGluIG9yZ0V2ZW50ICkge1xuICAgICAgICAgICAgZGVsdGFZID0gb3JnRXZlbnQuZGVsdGFZICogLTE7XG4gICAgICAgICAgICBkZWx0YSAgPSBkZWx0YVk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCAnZGVsdGFYJyBpbiBvcmdFdmVudCApIHtcbiAgICAgICAgICAgIGRlbHRhWCA9IG9yZ0V2ZW50LmRlbHRhWDtcbiAgICAgICAgICAgIGlmICggZGVsdGFZID09PSAwICkgeyBkZWx0YSAgPSBkZWx0YVggKiAtMTsgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTm8gY2hhbmdlIGFjdHVhbGx5IGhhcHBlbmVkLCBubyByZWFzb24gdG8gZ28gYW55IGZ1cnRoZXJcbiAgICAgICAgaWYgKCBkZWx0YVkgPT09IDAgJiYgZGVsdGFYID09PSAwICkgeyByZXR1cm47IH1cblxuICAgICAgICAvLyBOZWVkIHRvIGNvbnZlcnQgbGluZXMgYW5kIHBhZ2VzIHRvIHBpeGVscyBpZiB3ZSBhcmVuJ3QgYWxyZWFkeSBpbiBwaXhlbHNcbiAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVlIGRlbHRhIG1vZGVzOlxuICAgICAgICAvLyAgICogZGVsdGFNb2RlIDAgaXMgYnkgcGl4ZWxzLCBub3RoaW5nIHRvIGRvXG4gICAgICAgIC8vICAgKiBkZWx0YU1vZGUgMSBpcyBieSBsaW5lc1xuICAgICAgICAvLyAgICogZGVsdGFNb2RlIDIgaXMgYnkgcGFnZXNcbiAgICAgICAgaWYgKCBvcmdFdmVudC5kZWx0YU1vZGUgPT09IDEgKSB7XG4gICAgICAgICAgICB2YXIgbGluZUhlaWdodCA9ICQuZGF0YSh0aGlzLCAnbW91c2V3aGVlbC1saW5lLWhlaWdodCcpO1xuICAgICAgICAgICAgZGVsdGEgICo9IGxpbmVIZWlnaHQ7XG4gICAgICAgICAgICBkZWx0YVkgKj0gbGluZUhlaWdodDtcbiAgICAgICAgICAgIGRlbHRhWCAqPSBsaW5lSGVpZ2h0O1xuICAgICAgICB9IGVsc2UgaWYgKCBvcmdFdmVudC5kZWx0YU1vZGUgPT09IDIgKSB7XG4gICAgICAgICAgICB2YXIgcGFnZUhlaWdodCA9ICQuZGF0YSh0aGlzLCAnbW91c2V3aGVlbC1wYWdlLWhlaWdodCcpO1xuICAgICAgICAgICAgZGVsdGEgICo9IHBhZ2VIZWlnaHQ7XG4gICAgICAgICAgICBkZWx0YVkgKj0gcGFnZUhlaWdodDtcbiAgICAgICAgICAgIGRlbHRhWCAqPSBwYWdlSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RvcmUgbG93ZXN0IGFic29sdXRlIGRlbHRhIHRvIG5vcm1hbGl6ZSB0aGUgZGVsdGEgdmFsdWVzXG4gICAgICAgIGFic0RlbHRhID0gTWF0aC5tYXgoIE1hdGguYWJzKGRlbHRhWSksIE1hdGguYWJzKGRlbHRhWCkgKTtcblxuICAgICAgICBpZiAoICFsb3dlc3REZWx0YSB8fCBhYnNEZWx0YSA8IGxvd2VzdERlbHRhICkge1xuICAgICAgICAgICAgbG93ZXN0RGVsdGEgPSBhYnNEZWx0YTtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IG9sZGVyIGRlbHRhcyBpZiBuZWNlc3NhcnlcbiAgICAgICAgICAgIGlmICggc2hvdWxkQWRqdXN0T2xkRGVsdGFzKG9yZ0V2ZW50LCBhYnNEZWx0YSkgKSB7XG4gICAgICAgICAgICAgICAgbG93ZXN0RGVsdGEgLz0gNDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGp1c3Qgb2xkZXIgZGVsdGFzIGlmIG5lY2Vzc2FyeVxuICAgICAgICBpZiAoIHNob3VsZEFkanVzdE9sZERlbHRhcyhvcmdFdmVudCwgYWJzRGVsdGEpICkge1xuICAgICAgICAgICAgLy8gRGl2aWRlIGFsbCB0aGUgdGhpbmdzIGJ5IDQwIVxuICAgICAgICAgICAgZGVsdGEgIC89IDQwO1xuICAgICAgICAgICAgZGVsdGFYIC89IDQwO1xuICAgICAgICAgICAgZGVsdGFZIC89IDQwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gR2V0IGEgd2hvbGUsIG5vcm1hbGl6ZWQgdmFsdWUgZm9yIHRoZSBkZWx0YXNcbiAgICAgICAgZGVsdGEgID0gTWF0aFsgZGVsdGEgID49IDEgPyAnZmxvb3InIDogJ2NlaWwnIF0oZGVsdGEgIC8gbG93ZXN0RGVsdGEpO1xuICAgICAgICBkZWx0YVggPSBNYXRoWyBkZWx0YVggPj0gMSA/ICdmbG9vcicgOiAnY2VpbCcgXShkZWx0YVggLyBsb3dlc3REZWx0YSk7XG4gICAgICAgIGRlbHRhWSA9IE1hdGhbIGRlbHRhWSA+PSAxID8gJ2Zsb29yJyA6ICdjZWlsJyBdKGRlbHRhWSAvIGxvd2VzdERlbHRhKTtcblxuICAgICAgICAvLyBOb3JtYWxpc2Ugb2Zmc2V0WCBhbmQgb2Zmc2V0WSBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICggc3BlY2lhbC5zZXR0aW5ncy5ub3JtYWxpemVPZmZzZXQgJiYgdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QgKSB7XG4gICAgICAgICAgICB2YXIgYm91bmRpbmdSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIG9mZnNldFggPSBldmVudC5jbGllbnRYIC0gYm91bmRpbmdSZWN0LmxlZnQ7XG4gICAgICAgICAgICBvZmZzZXRZID0gZXZlbnQuY2xpZW50WSAtIGJvdW5kaW5nUmVjdC50b3A7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgaW5mb3JtYXRpb24gdG8gdGhlIGV2ZW50IG9iamVjdFxuICAgICAgICBldmVudC5kZWx0YVggPSBkZWx0YVg7XG4gICAgICAgIGV2ZW50LmRlbHRhWSA9IGRlbHRhWTtcbiAgICAgICAgZXZlbnQuZGVsdGFGYWN0b3IgPSBsb3dlc3REZWx0YTtcbiAgICAgICAgZXZlbnQub2Zmc2V0WCA9IG9mZnNldFg7XG4gICAgICAgIGV2ZW50Lm9mZnNldFkgPSBvZmZzZXRZO1xuICAgICAgICAvLyBHbyBhaGVhZCBhbmQgc2V0IGRlbHRhTW9kZSB0byAwIHNpbmNlIHdlIGNvbnZlcnRlZCB0byBwaXhlbHNcbiAgICAgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBhIGxpdHRsZSBvZGQgc2luY2Ugd2Ugb3ZlcndyaXRlIHRoZSBkZWx0YVgvWVxuICAgICAgICAvLyBwcm9wZXJ0aWVzIHdpdGggbm9ybWFsaXplZCBkZWx0YXMuXG4gICAgICAgIGV2ZW50LmRlbHRhTW9kZSA9IDA7XG5cbiAgICAgICAgLy8gQWRkIGV2ZW50IGFuZCBkZWx0YSB0byB0aGUgZnJvbnQgb2YgdGhlIGFyZ3VtZW50c1xuICAgICAgICBhcmdzLnVuc2hpZnQoZXZlbnQsIGRlbHRhLCBkZWx0YVgsIGRlbHRhWSk7XG5cbiAgICAgICAgLy8gQ2xlYXJvdXQgbG93ZXN0RGVsdGEgYWZ0ZXIgc29tZXRpbWUgdG8gYmV0dGVyXG4gICAgICAgIC8vIGhhbmRsZSBtdWx0aXBsZSBkZXZpY2UgdHlwZXMgdGhhdCBnaXZlIGRpZmZlcmVudFxuICAgICAgICAvLyBhIGRpZmZlcmVudCBsb3dlc3REZWx0YVxuICAgICAgICAvLyBFeDogdHJhY2twYWQgPSAzIGFuZCBtb3VzZSB3aGVlbCA9IDEyMFxuICAgICAgICBpZiAobnVsbExvd2VzdERlbHRhVGltZW91dCkgeyBjbGVhclRpbWVvdXQobnVsbExvd2VzdERlbHRhVGltZW91dCk7IH1cbiAgICAgICAgbnVsbExvd2VzdERlbHRhVGltZW91dCA9IHNldFRpbWVvdXQobnVsbExvd2VzdERlbHRhLCAyMDApO1xuXG4gICAgICAgIHJldHVybiAoJC5ldmVudC5kaXNwYXRjaCB8fCAkLmV2ZW50LmhhbmRsZSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbnVsbExvd2VzdERlbHRhKCkge1xuICAgICAgICBsb3dlc3REZWx0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkQWRqdXN0T2xkRGVsdGFzKG9yZ0V2ZW50LCBhYnNEZWx0YSkge1xuICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIG9sZGVyIGV2ZW50IGFuZCB0aGUgZGVsdGEgaXMgZGl2aXNhYmxlIGJ5IDEyMCxcbiAgICAgICAgLy8gdGhlbiB3ZSBhcmUgYXNzdW1pbmcgdGhhdCB0aGUgYnJvd3NlciBpcyB0cmVhdGluZyB0aGlzIGFzIGFuXG4gICAgICAgIC8vIG9sZGVyIG1vdXNlIHdoZWVsIGV2ZW50IGFuZCB0aGF0IHdlIHNob3VsZCBkaXZpZGUgdGhlIGRlbHRhc1xuICAgICAgICAvLyBieSA0MCB0byB0cnkgYW5kIGdldCBhIG1vcmUgdXNhYmxlIGRlbHRhRmFjdG9yLlxuICAgICAgICAvLyBTaWRlIG5vdGUsIHRoaXMgYWN0dWFsbHkgaW1wYWN0cyB0aGUgcmVwb3J0ZWQgc2Nyb2xsIGRpc3RhbmNlXG4gICAgICAgIC8vIGluIG9sZGVyIGJyb3dzZXJzIGFuZCBjYW4gY2F1c2Ugc2Nyb2xsaW5nIHRvIGJlIHNsb3dlciB0aGFuIG5hdGl2ZS5cbiAgICAgICAgLy8gVHVybiB0aGlzIG9mZiBieSBzZXR0aW5nICQuZXZlbnQuc3BlY2lhbC5tb3VzZXdoZWVsLnNldHRpbmdzLmFkanVzdE9sZERlbHRhcyB0byBmYWxzZS5cbiAgICAgICAgcmV0dXJuIHNwZWNpYWwuc2V0dGluZ3MuYWRqdXN0T2xkRGVsdGFzICYmIG9yZ0V2ZW50LnR5cGUgPT09ICdtb3VzZXdoZWVsJyAmJiBhYnNEZWx0YSAlIDEyMCA9PT0gMDtcbiAgICB9XG5cbn0pKTtcblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi4vY29tbW9uL34vaW1wb3J0cy1sb2FkZXI/ZGVmaW5lPT5mYWxzZSEuL34vanF1ZXJ5LW1vdXNld2hlZWwvanF1ZXJ5Lm1vdXNld2hlZWwuanNcbi8vIG1vZHVsZSBpZCA9IDcxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0=\n"
  },
  {
    "path": "src/libs.js",
    "content": "const _$ = GLOBAL_LIBS.jQuery? window.jQuery: require('jquery'),\n      _html2canvas = GLOBAL_LIBS.html2canvas? window.html2canvas: require('html2canvas'),\n      _THREE = GLOBAL_LIBS.THREE? window.THREE: require('three'),\n      _PDFJS = GLOBAL_LIBS.PDFJS? window.PDFJS: require('pdfjs');\n\nexport {\n  _$ as $,\n  _html2canvas as html2canvas,\n  _THREE as THREE,\n  _PDFJS as PDFJS\n};\n"
  },
  {
    "path": "templates/default-book-view.html",
    "content": "<div id=\"fb3d-ctx\" class=\"flip-book\">\n  <div class=\"view\">\n    <div class=\"fnav\">\n      <div class=\"prev\">\n        <a class=\"cmdBackward\" href=\"#\"><span class=\"icon\"><i class=\"fa fa-angle-left\" title=\"<$tr>Previous page</$tr>\"></i></span></a>\n      </div>\n      <div class=\"next\">\n        <a class=\"cmdForward\" href=\"#\"><span class=\"icon\"><i class=\"fa fa-angle-right\" title=\"<$tr>Next page</$tr>\"></i></span></a>\n      </div>\n    </div>\n    <div class=\"widLoadingProgress loading-progress hidden\">\n      <div class=\"progress\">\n      </div>\n      <div class=\"txtLoadingProgress caption\">\n      </div>\n    </div>\n    <div class=\"widLoading page-loading hidden\">\n    </div>\n  </div>\n\n  <div class=\"widFloatWnd float-wnd hidden\">\n    <div class=\"header\">\n      <$tr>Table of contents</$tr>\n      <a href=\"#\" title=\"<$tr>Close</$tr>\" class=\"close cmdCloseToc\">\n        <span class=\"icon\"><i class=\"fa fa-times\"></i></span>\n      </a>\n    </div>\n    <div class=\"body\">\n      <div class=\"ctrl\">\n        <div class=\"toc\">\n          <div class=\"toc-menu widTocMenu\">\n            <ul>\n              <li class=\"cmdBookmarks\"><a href=\"#\"><$tr>Bookmarks</$tr></a></li>\n              <li class=\"cmdThumbnails\"><a href=\"#\"><$tr>Thumbnails</$tr></a></li>\n              <li class=\"cmdSearch\"><a href=\"#\"><$tr>Search</$tr></a></li>\n            </ul>\n          </div>\n          <div class=\"widBookmarks toc-view\">\n\n          </div>\n          <div class=\"widThumbnails toc-view\">\n\n          </div>\n          <div class=\"widSearch toc-view\">\n\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"controls\">\n\n    <div class=\"ctrl js-center\">\n      <nav class=\"fnavbar\">\n        <ul class=\"fnav\">\n\n          <li class=\"fnav-item cmdZoomIn\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-search-plus\" title=\"<$tr>Zoom in</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdZoomOut\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-search-minus\" title=\"<$tr>Zoom out</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdDefaultZoom\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-compress\" title=\"<$tr>Fit view</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdToc\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-bookmark\" title=\"<$tr>Table of contents</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdFastBackward\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-fast-backward\" title=\"<$tr>10 pages backward</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdBackward\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-backward\" title=\"<$tr>Previous page</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item\">\n            <div class=\"pages\">\n              <input type=\"text\" class=\"number inpPage\" maxlength=\"4\" placeholder=\"1\">\n              <input type=\"text\" class=\"amount inpPages\" readOnly maxlength=\"4\" placeholder=\"1\">\n            </div>\n          </li>\n          <li class=\"fnav-item cmdForward\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-forward\" title=\"<$tr>Next page</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdFastForward\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-fast-forward\"  title=\"<$tr>10 pages forward</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdSave\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-download\"  title=\"<$tr>Download</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdPrint\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-print\"  title=\"<$tr>Print</$tr>\"></i></span></a></li>\n          <li class=\"fnav-item cmdFullScreen\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-arrows-alt\" title=\"<$tr>Full screen</$tr>\"></i></span></a></li>\n          <li class=\"dropup fnav-item toggle widSettings\">\n            <a href=\"#\"><div class=\"icon-caret\"><span class=\"icon\"><i class=\"fa fa-cog\" title=\"<$tr>Settings</$tr>\"></i> <i class=\"caret\"></i></span></div></a>\n            <ul class=\"menu hidden\">\n              <li  class=\"cmdSmartPan\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-eye\"></i></span> <$tr>Smart pan</$tr></a></li>\n              <li  class=\"cmdSinglePage\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-file-o\"></i></span> <$tr>Single page</$tr></a></li>\n              <li  class=\"cmdSounds\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-volume-up\"></i></span> <$tr>Sounds</$tr></a></li>\n              <li  class=\"cmdStats\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-line-chart\"></i></span> <$tr>Stats</$tr></a></li>\n              <li class=\"divider\"></li>\n              <li  class=\"cmdLightingUp\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-chevron-up\"></i></span> <$tr>Increase lighting</$tr></a></li>\n              <li  class=\"cmdLightingDown\"><a href=\"#\"><span class=\"icon\"><i class=\"fa fa-chevron-down\"></i></span> <$tr>Reduce lighting</$tr></a></li>\n            </ul>\n          </li>\n        </ul>\n      </nav>\n    </div>\n\n  </div>\n</div>\n"
  },
  {
    "path": "webpack.config.js",
    "content": "var webpack = require('webpack');\nvar path = require('path');\n\nmodule.exports = function(env) {\n  var debug = false;\n  if(env) {\n    debug = !!env.debug;\n  }\n\n  var commonPlugins = [\n    new webpack.DefinePlugin({\n      GLOBAL_LIBS: {\n        jQuery: JSON.stringify(true),\n        html2canvas: JSON.stringify(true),\n        THREE: JSON.stringify(true),\n        PDFJS: JSON.stringify(true),// don't set false. It isn't implemented\n      },\n      GLOBAL_PATHS: {\n        pdfJsWorker: JSON.stringify('js/pdf.worker.js')\n      },\n      ENVIROMENT: {\n        debug: JSON.stringify(debug)\n      }\n    })\n  ];\n\n  if(!debug) {\n    commonPlugins.push(new webpack.DefinePlugin({\n      'process.env': {\n        NODE_ENV: JSON.stringify('production')\n      }\n    }));\n  }\n\n  return {\n    context: __dirname,\n    devtool: debug ? 'inline-sourcemap' : '',\n    entry: ['./index.js'],\n    output: {\n      path: __dirname,\n      filename: './dist/'+(debug ? 'flip-book.js': 'flip-book.min.js')\n    },\n    module: {\n      loaders: [\n        {\n          test: /\\.html$/,\n          loader: 'raw-loader'\n        },\n        {\n          test: /\\.js$/,\n          exclude: /(node_modules|bower_components)/,\n          loader: 'babel-loader',\n          query: {\n            presets: [['es2015', {'loose': true}], 'stage-0'],\n            plugins: ['transform-class-properties']\n          }\n        }\n      ]\n    },\n    plugins: debug ? commonPlugins : [\n      ...commonPlugins,\n      new webpack.optimize.OccurrenceOrderPlugin(),\n      new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),\n    ],\n  };\n}\n"
  }
]